Ciclo de vida del plan de ruta

En esta página, se describe el ciclo de vida de un plan de ruta con la API de Route Optimization, desde la identificación de tus necesidades de enrutamiento hasta la finalización con un plan de ruta integrado en tu sistema.

Cuando sigues las etapas del plan de ruta, puedes alcanzar los siguientes objetivos:

  • Asigna tus operaciones de flota: Traduce tu flota física, las restricciones complejas y los objetivos comerciales en código para la API.
  • Optimiza los planes de ruta para tu empresa: Comprende cómo definir mejor tu plan de ruta para que pueda cumplir con tus objetivos y mejorar tus operaciones diarias.
  • Realiza la implementación en producción: Implementa tu plan de ruta incluyéndolo en tus operaciones diarias.

En el siguiente diagrama, se muestra el ciclo de vida de un plan de ruta.

Un diagrama de flujo del ciclo de vida de un plan de ruta que se explica en el texto que aparece a continuación

La fase de implementación de un plan de ruta se produce cuando integras la API por primera vez o cuando los requisitos de tu empresa cambian de manera significativa. Abarca las etapas 1 a 5.

La fase de operaciones diarias es más liviana y la definición es mínima. Abarca las etapas 2 a 4.

Las etapas del ciclo de vida de una ruta son las siguientes:

  1. Define el alcance de tu problema: Identifica y organiza tus objetivos, recursos, tareas y restricciones para tener una imagen completa de tus operaciones antes de comenzar a usar la API.
  2. Asigna tus datos: Traduce la realidad de tu empresa a parámetros de la API para que el plan de ruta refleje cómo necesitas que opere tu flota.
  3. Crea una solicitud y obtén un plan de ruta: Ingresa tus datos en la API y obtén tu plan de ruta optimizado.
  4. Define mejor tu plan de ruta: Prueba tu plan de ruta y realiza iteraciones en él ajustando tus restricciones y objetivos para asegurarte de que cubra todas tus necesidades.
  5. Integra el plan de ruta: Conecta el plan de ruta a tus sistemas existentes para proporcionar navegación práctica.

Define el alcance de tu problema

Antes de usar la API, debes organizar los detalles de tus operaciones diarias en categorías de datos claras. Esto te permite iniciar el proceso de implementación con claridad sobre cuáles son tus recursos y tareas actuales, qué los restringe y cuáles son los objetivos que quieres lograr con tu flota.

Identifica tus recursos y tareas

Un paso importante cuando planificas tu plan de ruta es identificar tus recursos y tareas, que son tus vehículos y envíos.

Los vehículos Los envíos
  • Cantidad: ¿Cuántos vehículos tienes?
  • Ubicaciones: ¿Dónde comienzan y terminan los vehículos?
  • Hora: ¿Cuál es el horario de trabajo de los conductores de los vehículos?
  • Capacidad: ¿Cuáles son los límites de tus vehículos?
  • Costos: ¿Cuáles son los costos de operar tu flota?
  • Ubicaciones: ¿Dónde están los puntos de retiro y entrega?
  • Demandas: ¿Cuál es el peso o el tamaño de los paquetes?
  • Restricciones: ¿Hay períodos específicos para la entrega?
  • Tiempo de servicio: ¿Cuánto tiempo necesita el conductor para estacionar y descargar?
  • Requisitos: ¿El envío requiere un tipo de vehículo o conductor específico?

Identifica tus restricciones

Tus restricciones son los límites y las restricciones sobre cómo puedes usar tus vehículos y cómo debes manejar tus envíos. Dictan la mayoría de tus operaciones y son vitales cuando creas un plan de ruta optimizado.

Por lo general, las restricciones se dividen en dos categorías:

Restricciones estrictas Restricciones flexibles
Son límites que no se pueden romper. Por ejemplo, un camión no puede transportar más peso que su capacidad máxima, y un conductor no puede hacer un retiro después de que una tienda haya cerrado. Son preferencias que se pueden violar si es necesario, por lo general, con un costo de penalización. Por ejemplo, es posible que prefieras cargar un camión solo al 80% de su capacidad o realizar la entrega antes de una hora objetivo, pero no te importa exceder estos límites para obtener una mejor ruta.

Entre las restricciones comunes, se incluyen las siguientes:

  • Límites de capacidad: El peso, el volumen o la cantidad máxima de artículos que puede transportar un vehículo.
  • Períodos: Los períodos específicos en los que una ubicación está abierta para una visita o los turnos específicos de un conductor.
  • Costos: El costo de operar un vehículo o de omitir un envío. Uno de los objetivos principales de la API es generar un plan de ruta rentable.
  • Descansos del conductor: Períodos de descanso del conductor que suelen requerir las leyes laborales después de una cierta cantidad de horas de trabajo.

Establece tus objetivos comerciales

Una vez que establezcas tus recursos y tareas, y sus limitaciones, es momento de establecer qué métricas son más importantes para tu empresa. Estos objetivos van de la mano con las restricciones y te ayudan a decidir qué es lo más importante cuando planificas una ruta.

A continuación, se muestran algunos ejemplos de objetivos comerciales:

Tamaño de la flota Distancia Hora Costo
¿Quieres minimizar la cantidad de vehículos que se usan o usar toda tu flota para terminar la jornada laboral antes? ¿Quieres la ruta más corta para ahorrar combustible o prefieres una ruta más rápida que podría ser más larga debido al uso de autopistas? ¿Quieres minimizar las horas totales trabajadas o priorizar la llegada a horas específicas que pueden alargar el tiempo que se pasa en la ruta? ¿Quieres minimizar los gastos operativos, como los salarios y el combustible, o aceptar costos más altos para cumplir con plazos estrictos?

Asigna tus datos

Una vez que hayas recopilado tus datos, asígnalos para que coincidan con las propiedades de la API. Esto le brinda al optimizador toda la información para mostrar un plan de ruta que tenga en cuenta la realidad de tu empresa.

Usa los parámetros de las siguientes tablas para asignar los recursos, las tareas, las restricciones, y los objetivos que asignaste en la sección Define el alcance de tu problema.

Asignación de variables

Concepto del mundo real Parámetro de la API Descripción
Conductor o vehículo model.vehicles[] Representa un solo vehículo en tu flota.
Ubicaciones de los depósitos vehicles[].startWaypoint
vehicles[].endWaypoint
Es la ubicación donde el vehículo comienza y termina su ruta.
Tu horario de atención model.globalStartTime
model.globalEndTime
Es la hora de inicio más temprana y la hora de finalización más tardía para la operación de toda la flota.
Tarea o paquete model.shipments[] Representa un trabajo. Puede ser un pickup, una delivery o ambos.
Ubicación de la tarea pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Es la ubicación geográfica donde se realiza el trabajo.
Tiempo de servicio pickups[].duration
deliveries[].duration
Es el tiempo que se pasa en la ubicación para completar la tarea (por ejemplo, la descarga), sin incluir el tiempo de viaje.

Asignación de restricciones

Restricción del mundo real Parámetro de la API Descripción
Capacidad del vehículo vehicles[].loadLimits Establece el límite estricto o flexible para la capacidad del vehículo. Si el loadDemand de un envío excede el límite restante, no se asigna.
Tamaño del paquete shipments[].loadDemands Es la cantidad de capacidad del vehículo que consume un envío.
Restricción del vehículo shipments[].allowedVehicleIndices Restringe un envío para que solo pueda ser retirado o entregado por vehículos o conductores específicos.
Horario de atención shipments[].pickups[].timeWindows o shipments[].deliveries[].timeWindows Establece el horario de atención para visitar una ubicación. Si un vehículo no puede llegar dentro de este período, se omite el envío.
Límite de duración del turno vehicles[].routeDurationLimit Establece un límite estricto o flexible sobre cuánto tiempo puede trabajar un conductor específico (por ejemplo, un máximo de 8 horas), independientemente de la hora de finalización global.
Descansos del conductor vehicles[].breakRule Aplica reglas de descanso específicas, como descansos obligatorios después de ciertas horas de trabajo.
Restricciones en la ruta vehicles[].travelMode Especifica el modo de viaje (por ejemplo, DRIVE o BICYCLE). Esto restringe la ruta a las rutas legales y determina las velocidades que se usan para calcular las duraciones del viaje.

Asignación de objetivos

Objetivo del mundo real Parámetro de la API Descripción
Minimizar el tamaño de la flota vehicles[].fixedCost Aplica un costo único por usar un vehículo. Un costo fijo alto obliga a una ruta a priorizar el uso de menos vehículos en lugar de aumentar la distancia total o el tiempo de trabajo.
Minimizar la distancia vehicles[].costPerKilometer Aplica un costo por cada kilómetro recorrido. Prioriza las rutas más cortas para ahorrar combustible y desgaste.
Minimizar el tiempo total vehicles[].costPerHour Aplica un costo por cada hora que el vehículo está activo (incluido el tiempo de viaje y de espera). Prioriza la finalización más rápida.
Minimizar el tiempo de conducción vehicles[].costPerTraveledHour Aplica un costo específicamente por el tiempo que se pasa en movimiento. Esto distingue entre estar sentado en el tráfico (costoso) y esperar en una parada(potencialmente más económico).
Priorizar ciertas tareas shipments[].penaltyCost Aplica un costo si se omite un envío específico. Si estableces un valor alto, te aseguras de que las tareas críticas tengan prioridad sobre las opcionales.

Crea la solicitud y obtén una respuesta

El uso de la API de Route Optimization para generar un plan de ruta implica los siguientes pasos:

  1. Configura tu entorno: Configura tu proyecto de Google Cloud, habilita la API y configura la autenticación. Para obtener instrucciones, consulta Cómo comenzar. Solo debes seguir este paso una vez.
  2. Envía la solicitud: Construye el cuerpo de la solicitud con la asignación de datos definida en la sección anterior. Para obtener información sobre los extremos, los encabezados y el formato de la solicitud, consulta Cómo realizar una solicitud a la API.
  3. Comprende la respuesta: Una vez que obtengas una respuesta de la API, comprende el plan de ruta y qué significa cada parámetro. Consulta Cómo interpretar una respuesta.

Define mejor tu plan de ruta

Traducir la logística del mundo real a costos y restricciones de la API es una tarea compleja. Es posible que tu plan de ruta inicial no coincida con tus objetivos comerciales ni con las expectativas del conductor. Definir mejor tu plan de ruta es el proceso iterativo de probar las rutas que se muestran y ajustar tus parámetros hasta que encuentres una configuración que alcance tus objetivos.

Ajusta los objetivos y las restricciones

Si el plan de ruta generado no satisface tus necesidades, puedes modificar ciertos parámetros para obtener resultados diferentes. Ajustar o relajar los parámetros altera la forma en que se resuelven los objetivos en conflicto en el plan de ruta, y relajar los parámetros es una forma eficiente de descubrir los parámetros que causan errores en tus planes de ruta.

En la siguiente tabla, se enumeran los problemas de enrutamiento comunes y los parámetros que puedes ajustar para resolverlos.

Situación Parámetro Ajuste Descripción
Se omite un envío importante shipments[].penaltyCost Aumenta su valor o agrega costos de penalización a otros envíos. Si el envío es opcional, aumenta su costo de penalización para priorizarlo. Si el envío es obligatorio (no tiene costo de penalización), agrega costos de penalización a otros envíos menos críticos. Esto los hace opcionales, lo que libera tiempo y capacidad del vehículo para el envío importante.
Se omite el envío debido a la hora softStartTime / softEndTime Agrega períodos flexibles. Los períodos estrictos quitan las tareas que llegan incluso un minuto tarde. Los períodos flexibles permiten que el conductor llegue un poco fuera de horario pagando un "costo" en lugar de fallar en la asignación.
Se omite el envío debido al peso loadLimits[].softMaxLoad y costPerUnitAbove Agrega demandas de carga flexibles. Permite que un vehículo exceda ligeramente su capacidad ideal (por una penalización) en lugar de dejar un paquete.
Se omite el envío debido a la sobrecarga de la flota model.vehicles[] o shipments[].timeWindows Agrega vehículos o relaja los períodos. Si hay demasiados envíos para la flota actual, en especial durante las horas pico, agrega más vehículos o amplía los períodos de entrega para distribuir la carga de trabajo.
Las rutas son demasiado largas o ineficientes vehicles[].costPerKilometer / costPerHour Agrega costos o aumenta su valor. Le indica a la API que el viaje es costoso, lo que la alienta a quitar las paradas distantes y aisladas para crear rutas más ajustadas para la flota.
Los turnos de los conductores son demasiado largos vehicles[].routeDurationLimit o model.vehicles[] Agrega límites de duración o agrega vehículos y límites. Aplica un límite estricto (por ejemplo, 8 horas) en el tiempo total que un conductor pasa en la ruta. Si solo agregas vehículos, no se acortarán las rutas, a menos que también apliques límites de duración para obligar al solucionador a distribuir la carga de trabajo en la flota más grande.

Actualiza un plan de ruta

A menudo, debes actualizar un plan de ruta y mantener la misma base, como agregar un retiro al cronograma de un conductor activo. Para ello, usa parámetros de inyección, que le proporcionan a la API un inicio basado en tu solución anterior, lo que le permite modificar el plan existente en lugar de calcular uno nuevo desde cero.

Estas son diferentes formas de actualizar un plan de ruta con parámetros de inyección:

  • Pasa las rutas de una respuesta anterior al campo injectedFirstSolutionRoutes de tu nueva solicitud. Esto acelera la búsqueda de optimización y es útil para volver a planificar antes de que comiencen las operaciones diarias, como integrar envíos de último momento.
  • Controla el grado de cambio con el campo injectedSolutionConstraint. Esto es útil cuando las operaciones ya están en curso, lo que te permite conservar la secuencia actual del conductor o corregir partes del plan que ya se ejecutaron.
  • Para asegurarte de que la ruta actualizada permanezca asignada al vehículo correcto , establece interpretInjectedSolutionsUsingLabels en true. Esto es útil en la experimentación cuando se agregan o quitan envíos y vehículos, ya que hace coincidir las rutas con etiquetas en lugar de índices. Esto requiere que todas las etiquetas de vehículos y envíos sean únicas.

Integra tu plan de ruta

Tu plan de ruta finalizado es un objeto de datos que representa una administración optimizada de tus recursos y tareas, mientras sigues tus restricciones y objetivos. Usa este plan de ruta en tus operaciones diarias integrándolo en tu sistema. Por lo general, esto implica visualizar tu plan de ruta para los administradores de la flota y enviar instrucciones paso a paso a los conductores.

Visualización

Para permitir que los administradores de la flota verifiquen y supervisen tu plan de ruta, puedes visualizarlo de las siguientes maneras:

Para permitir que los administradores de la flota verifiquen y supervisen tu plan de ruta, puedes mostrarlo en un mapa del panel. Según tu etapa de desarrollo actual, puedes visualizar tu plan de ruta de las siguientes maneras:

  • Explora sin código: Puedes usar la app de código abierto Route Optimizationpara ver cómo la API traduce tus datos en rutas físicas en un mapa. Esta aplicación web sirve como una herramienta de exploración que te permite crear situaciones, ajustar parámetros de restricción y renderizar visualmente los planes de ruta resultantes antes de escribir cualquier código.
  • Muestra el orden de las visitas: Puedes mostrar la secuencia de visitas como puntos numerados en un mapa para evaluar tus planes de optimización y despacho en tu propio sistema. Para ello, busca el array visits dentro de cada ruta de la respuesta de la API. Los elementos de este array se ordenan exactamente como el conductor debe ejecutarlos. Puedes iterar en esta lista, usar el shipmentIndex para recuperar las coordenadas de ubicación de cada parada y usar tu biblioteca de asignación para renderizar marcadores numerados en el mapa según su orden en la lista.
  • Dibuja la ruta física: Puedes visualizar la ruta planificada exacta en un mapa para comprender por qué el optimizador eligió una secuencia específica. Esta polilínea representa la ruta deseada para la planificación y la evaluación, no la ruta en tiempo real que toma un conductor. Establece populatePolylines: true en tu solicitud para obtener un encodedPolyline campo para cada ruta y decodifícalo con el google.maps.geometry.encoding.decodePath() método de la API de Maps JavaScript.

Envío a los conductores

Puedes integrar instrucciones paso a paso en tu aplicación para conductores con el SDK de Navigation o proporcionar vínculos directos a la app para consumidores de Google Maps.

  • SDK de Navigation: Si tienes una aplicación para conductores personalizada, puedes integrar el SDK de Navigation para Android o iOS para obtener instrucciones paso a paso en la app. Puedes integrar la información de la tarea de la respuesta de la API en tu sistema y usar el SDK para la navegación. Para pasar las rutas de la respuesta de la API al SDK, establece populateTransitionPolylines: true en tu solicitud. Esto genera un routeToken para cada transición en la respuesta.
  • Fleet Engine: Para la administración avanzada de la flota, puedes importar el plan de ruta generado por la API a Fleet Engine para supervisar la ejecución de la ruta en tiempo real. Si bien la API proporciona una polilínea de la ruta deseada para la evaluación, Fleet Engine vincula tu secuencia planificada de visitas con el seguimiento de vehículos en vivo.