ELAI S.r.l.

La ruta más corta llega tarde: ¿qué debe optimizar un planificador de entregas?

Tres clientes, seis rutas y un plazo: un caso completo distingue distancia mínima, servicio y viabilidad sin prometer ahorros no medidos.

La ruta más corta llega tarde: ¿qué debe optimizar un planificador de entregas?

La promesa al cliente no se mide en kilómetros

Una empresa debe planificar tres entregas con un vehículo. Un cliente tiene un plazo y los tiempos de descarga difieren. Pedir a un planificador de IA solo la ruta más corta puede producir una solución óptima en distancia e inútil para el servicio. El algoritmo no tiene por qué fallar: quizá especificamos el problema equivocado.

¿Qué cambia al imponer el plazo como restricción en vez de esperar que surja al minimizar kilómetros? Construimos un caso pequeño con enumeración completa de los seis órdenes de clientes. No usamos tráfico real, motor de mapas ni datos de clientes EL-AI. El ejemplo sintético explica cómo objetivo y viabilidad cambian una decisión empresarial.

Supuestos, coordenadas y reloj

El depósito D está en (0,0) km, A en (1,0), B en (4,0) y C en (4,3). Las distancias son segmentos euclídeos, no carreteras. La velocidad constante supuesta es 1 km/min, equivalente a 60 km/h. No hay esperas, tráfico ni restricciones viales. Salimos en el minuto cero, visitamos cada cliente una vez y volvemos al depósito.

El servicio dura 10 minutos en A y un minuto en B y C. B exige llegar antes del minuto 6 inclusive; se restringe la llegada, no terminar la descarga. Cada cliente recibe una caja, todas cargadas al inicio; la capacidad es tres cajas. El servicio avanza el reloj sin añadir kilómetros. Estos detalles evitan mezclar unidades u omitir el tiempo con el vehículo parado.

La recurrencia que convierte una ruta en un horario

d(i, j) es la distancia en km, v la velocidad en km/min, s_i el servicio en minutos y a_i la llegada en minutos. Al llegar a i completamos el servicio antes de viajar a j. La llegada siguiente suma llegada previa, servicio y tiempo de viaje. Al inicio a_D=0 y s_D=0. Esta recurrencia muestra por qué el orden cambia las llegadas aunque el servicio total sea idéntico.

d(i,j) = sqrt((x_i-x_j)^2 + (y_i-y_j)^2) a_j = a_i + s_i + d(i,j)/v minimise L(pi) = sum_(consecutive i,j in D,pi,D) d(i,j) subject to a_B <= 6 min; initial load = 3 crates <= Q

pi es el orden de clientes, L la longitud total y Q la capacidad. Minimizamos solo entre rutas viables. No restamos “minutos” de “kilómetros” en una puntuación sin sentido físico. Un objetivo con penalización por retraso sería posible, pero exigiría coste por minuto y decidir explícitamente qué retraso es negociable. Aquí el requisito es rígido.

Dos rutas casi iguales, resultados distintos

D-A-B-C-D recorre 1+3+3+5=12 km. Llegamos a A en el minuto 1, terminamos su servicio en el 11 y alcanzamos B en el 14: ocho minutos tarde. Invertir el giro no basta: D-C-B-A-D también mide 12 km, pero llegamos a C en el minuto 5, acabamos allí en el 6 y alcanzamos B en el 9. Ambos mínimos de distancia incumplen el plazo.

D-B-C-A-D llega a B en el minuto 4, dentro del límite. Tras un minuto de servicio alcanza C en el 8. Después de su servicio, el tramo de √18 km a A da una llegada próxima al minuto 13,2426. Diez minutos de servicio y un kilómetro de regreso terminan el giro hacia el 24,2426. La distancia es 8+√18≈12,2426 km. Unos 0,2426 km adicionales satisfacen el requisito; el giro completo no acaba antes que los de 12 km, que terminan en el minuto 24.

OrdenDistancia kmLlegada B minFin min
ABC12.000014.000024.0000
ACB12.242619.242624.2426
BAC16.24264.000028.2426
BCA12.24264.000024.2426
CAB16.242623.242628.2426
CBA12.00009.000024.0000

Cada fila empieza y acaba implícitamente en D. La tabla redondea a cuatro decimales para leer; el código conserva resultados completos. Solo BAC y BCA cumplen la llegada a B y BCA es más corta. Al evaluar las seis alternativas permitidas obtenemos un óptimo del modelo finito, no solo lo mejor hallado por una heurística. No prueba optimalidad para una ciudad real.

Mapa sintético en km y comparación de distancia total frente a llegada a B. La línea discontinua marca el minuto 6; los puntos verdes cumplen el requisito. Los segmentos son euclídeos, no carreteras ni medidas de tráfico.
Mapa sintético en km y comparación de distancia total frente a llegada a B. La línea discontinua marca el minuto 6; los puntos verdes cumplen el requisito. Los segmentos son euclídeos, no carreteras ni medidas de tráfico.

Los supuestos cambian la respuesta

El código incluye sensibilidad con servicios en A de 0, 1, 2, 5 y 10 minutos y plazos de B de 4, 6, 10 y 14 minutos. Son recálculos, no predicciones. Sin servicio en A y con plazo 6, ABC llega a B en el minuto 4 y es viable; con servicio A de 10 y plazo 14 vuelve a ser viable sin cambiar distancia. La descarga no es un detalle para añadir después de optimizar.

La capacidad también puede vaciar el conjunto viable. Con capacidad de dos cajas y obligación de cargar tres para un viaje, ninguna ruta es viable. Cambiar el orden no crea espacio. El código lo comprueba sin inventar solución: recargar, hacer varios viajes o añadir vehículo requeriría otro modelo. “Sin solución bajo estos supuestos” es un resultado informativo.

Del modelo verificable a la operación

Enumerar n clientes exige n! órdenes y unas n operaciones por evaluación directa. Es transparente con tres, pero escala mal. Solvers, heurísticas y métodos aprendidos pueden abordar casos mayores si comparten contrato de tiempos, capacidad y objetivos. La IA puede estimar tiempos de viaje; predecir no sustituye verificar restricciones e introduce incertidumbre. No comparamos solvers ni entrenamos un modelo de tráfico.

Leímos la guía primaria OR-Tools de rutas con ventanas temporales: datos, callback de tiempos y restricciones de la dimensión temporal. Ilustra separar costes de recorrido y ventanas admitidas; no copiamos su matriz ni ejecutamos OR-Tools. La operación real exige red vial, servicios validados, reglas de carga, tolerancias y protocolo. El artículo no demuestra un planificador EL-AI instalado ni ahorros de clientes.

La respuesta: optimizar solo lo aceptable

La ruta más corta no es intrínsecamente errónea: resuelve un objetivo incompleto para esta empresa. Aquí pasar de 12 a unos 12,2426 km permite servir B a tiempo, sin acortar el giro completo ni demostrar beneficio económico general. Hay que medir el compromiso, codificarlo como restricción y minimizar después la distancia entre alternativas aceptables. Antes de juzgar la inteligencia del planificador, revisemos el problema entregado.

Fuente y reproducibilidad

Google OR-Tools — Vehicle Routing Problem with Time Windows.

import math
points={'D':(0,0),'A':(1,0),'B':(4,0),'C':(4,3)}
service={'D':0,'A':10,'B':1,'C':1}
for order in ['ABC','BCA']:
    time=distance=0.0;current='D';arrivals={}
    for node in [*order,'D']:
        leg=math.dist(points[current],points[node])
        distance+=leg;time+=leg  # synthetic speed: 1 km/min
        arrivals[node]=time;time+=service[node];current=node
    print(order,distance,arrivals['B'],time)

Código, datos e instrucciones · JSON. Cálculos didácticos ejecutados con Python 3.14.0; figuras con Matplotlib 3.11.2. Análisis asistido por IA, sin afirmar revisión por pares ni humana. Portada original ImageGen ilustrativa: no documenta personas, sedes ni instalaciones de EL-AI. Fuentes consultadas el 21 de octubre de 2026.