Prioriza las visitas cercanas con atributos de transición

En este ejemplo, se muestra cómo usar atributos de transición para priorizar las rutas en las que el mismo vehículo realiza las cargas y entregas cercanas en un período. Para obtener más información sobre los atributos de transición, consulta Modela la lógica empresarial con atributos de transición.

En este ejemplo:

  • Las entregas de los envíos A, B y C están cerca una de la otra en la misma ruta.
  • Las publicaciones adicionales se lanzarán más adelante.
  • Las publicaciones no tienen tiempos de entrega especificados.
  • Independientemente del programa de visitas, el vehículo debe recorrer esta ruta dos veces: una vez por la mañana de camino al depósito y una vez por la tarde de regreso.
  • La distancia de viaje total y la duración de la ruta siempre son las mismas, independientemente de cuándo se realicen A, B y C.

Ejemplo con entregas de envíos en la misma ruta. Hay tres embarques, A, B y C, en camino desde el depósito hacia otros embarques. A está a 1, 000 m del depósito, B está a 50 metros más lejos del depósito y C está a 30 metros más lejos en la misma dirección. Hay otros envíos a 1,000 m de C.

En esta situación, y para una solicitud que solo usa el costo por hora y el costo por kilómetro, la ruta optimizada podría tener A y B en la mañana y C en la tarde, y el costo de la solución sería el mismo que si se manejaran los tres al mismo tiempo.

Costo por kilómetro con un umbral

Para agrupar las visitas cercanas, primero debes seleccionar una distancia de umbral. Esta es la distancia máxima entre dos visitas que consideras cercanas. En este ejemplo, se usa un umbral de 100 metros que corresponde aproximadamente a una cuadra en un área urbana. Puedes aumentar o disminuir el umbral para que coincida con las necesidades de tu empresa y las preferencias de tus conductores.

Para agrupar visitas cercanas dentro de un radio de 100 metros, estableces un costo alto en los primeros 100 metros de cada transición y un costo más bajo para los metros adicionales de la transición. Dado que los primeros 100 metros son los más costosos, el optimizador realiza los mayores ahorros con transiciones más cortas que el umbral de 100 metros, incluso si eso significa extender la longitud total de la ruta.

Para configurar los costos, agrega una entrada nueva a ShipmentModel.transition_attributes con las siguientes propiedades:

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

Ningún envío ni vehículo debe usar la etiqueta #unused_tag# para que coincida con todas las transiciones posibles. Para obtener más información, consulta Cómo hacer coincidir todas las solicitudes de visita.

Cómo funciona un costo alto por debajo del umbral

En esta sección, se muestra cómo el costo por debajo y por encima del umbral afecta el costo general de las diferentes soluciones de la situación de ejemplo.

Solución 1: Realiza A y B en el viaje de ida y C en el viaje de regreso.

En esta solución, los envíos se dividen en los dos recorridos de esta ruta. Dos de ellos se entregan en el primer recorrido y el restante se entrega en el segundo. Existen 5 transiciones:

Transición Distancia Por debajo del umbral Por encima del umbral
Distancia Costo Distancia Costo
depósito →A 1,000 m 100 m 5 900 m 0.9
A→B 50 m 50 m 2.5 0 m 0
B→other 1,030 m 100 m 5 930 m 0.93
other→C 1,000 m 100 m 5 900 m 0.9
C→depósito 1,080 m 100 m 5 980 m 0.98
Total 450 m 22.5 3,710 m 3.71

El costo general se calcula como la suma de los dos costos por kilómetro:

  • el costo por kilómetro por debajo del límite (50) multiplicado por la distancia total recorrida por debajo del límite (450 m = 0.45 km)
  • el costo por kilómetro por encima del umbral (1) multiplicado por la distancia total recorrida por encima del umbral (3710 m = 3.71 km).

Por lo tanto, el costo total es 0.45 × 50 + 3.71 × 1 = 22.5 + 3.71 = 26.21.

Solución 2: Realiza A, B y C en el viaje de ida, nada en el viaje de regreso

En esta solución, a diferencia de la solución 1, los tres envíos se entregan “como un grupo” durante un recorrido por la ruta. En el otro cruce, el vehículo no se detiene. Una vez más, hay 5 transiciones, pero sus duraciones y composiciones son diferentes:

Transición Distancia Por debajo del umbral Por encima del umbral
Distancia Costo Distancia Costo
depósito →A 1,000 m 100 m 5 900 m 0.9
A→B 50 m 50 m 2.5 0 m 0
B→C 30 m 30 m 1.5 0 m 0
C→other 1,000 m 100 m 5 900 m 0.9
other→depot 2080 m 100 m 5 1,980 m 1.98
Total 380 m 19 3780 m 3.78

Si se utiliza el mismo cálculo que en la solución 1, el costo general es 0.38 × 50 + 3.78 × 1 = 19 + 3.78 = 22.78, y realizar todas las visitas en un bloque de tiempo tiene un costo más bajo que realizarlas en dos grupos. Para reforzar este efecto, puedes aumentar DistanceLimit.cost_per_kilometer_below_soft_max.

Por qué no funciona un costo bajo por kilómetro por debajo del umbral

Dado que deseas preferir las transiciones cortas a las largas, es posible que te tiente asignar un costo alto por kilómetro a las transiciones largas y mantener el costo bajo por kilómetro para las transiciones cortas. Sin embargo, esto tiene un efecto inverso: como los primeros 100 metros de la transición son los más económicos, el optimizador usa estos metros "económicos" para obtener el mayor efecto, ya que prefiere las transiciones que tienen cerca de 100 metros o más.

Puedes ver este efecto en las dos soluciones de ejemplo. Si cambias el costo por kilómetro por debajo y por encima del umbral, los costos de la ruta cambiarán de la siguiente manera:

Costo alto superior al umbral Costo alto por debajo del umbral
Solución 1 Solución 2 Solución 1 Solución 2
Kilómetros por debajo del umbral 0.45 0.38 0.45 0.38
Costo por kilómetro por debajo del umbral 1.00 1.00 50.00 50.00
Kilómetros por encima del umbral 3.71 3.78 3.71 3.78
Costo por kilómetro superior al umbral 50.00 50.00 1.00 1.00
Costo total 185.95 189.38 26.21 22.78

Para cada versión, el costo total más bajo de las dos soluciones se destaca en negrita. Puedes ver que, cuando usas un costo alto por encima del umbral, el costo total de la ruta es ahora más alto para la ruta en la que se agrupan las visitas, lo que es lo opuesto a lo que querías lograr.