Ciclo de vida del plan de ruta

En esta página, se describe el ciclo de vida de un plan de rutas con la API de Route Optimization, desde la identificación de tus necesidades de planificación de rutas hasta la integración de un plan de rutas 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 rutas para tu empresa: Comprende cómo definir mejor tu plan de rutas para que cumpla con tus objetivos y mejore tus operaciones diarias.
  • Implementa tu plan de rutas en producción: Inclúyelo 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 a continuación

La fase de implementación de un plan de rutas 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 ligera y el perfeccionamiento es mínimo. Abarca las etapas 2 a 4.

Las etapas de la vida de una ruta son las siguientes:

  1. Delimita el alcance de tu problema: Identifica y organiza tus objetivos, recursos, tareas y restricciones para tener una visión completa de tus operaciones antes de comenzar a usar la API.
  2. Asigna tus datos: Traduce tu realidad empresarial en 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 ajústalo iterativamente modificando tus restricciones y objetivos para asegurarte de que satisfaga todas tus necesidades.
  5. Integra el plan de ruta: Conecta el plan de ruta a tus sistemas existentes para proporcionar navegación práctica.

Delimita tu problema

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

Identifica tus recursos y tareas

Un paso importante al planificar 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 viajes de los vehículos?
  • Hora: ¿Cuál es el horario laboral 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. Rigen 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
Estos son límites que no se pueden superar. Por ejemplo, un camión no puede transportar más peso del que permite su capacidad máxima, y un conductor no puede hacer una recolección después de que una tienda cerró. Estas son preferencias que se pueden incumplir si es necesario, por lo general, con un costo de penalización. Por ejemplo, es posible que prefieras cargar un camión solo hasta el 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áximos de artículos que puede transportar un vehículo.
  • Períodos: Son los períodos específicos en los que una ubicación está abierta para una visita o las horas de turno específicas 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 exigirse por las leyes laborales después de una cierta cantidad de horario laboral.

Establece tus objetivos comerciales

Una vez que establezcas tus recursos y tareas, y sus limitaciones, es momento de determinar 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.

Estos son algunos ejemplos de objetivos comerciales:

Tamaño de la flota Distancia Hora Costo
¿Quieres minimizar la cantidad de vehículos utilizados 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 llegar a horarios específicos, lo que puede alargar el tiempo en 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 devolver 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 API Descripción
Conductor o vehículo model.vehicles[] Representa un solo vehículo de tu flota.
Ubicaciones de los depósitos vehicles[].startWaypoint
vehicles[].endWaypoint
Es la ubicación donde el vehículo comienza y finaliza su ruta.
Tu horario de atención model.globalStartTime
model.globalEndTime
Hora de inicio más temprana y hora de finalización más tardía para el funcionamiento de toda la flota.
Tarea o paquete model.shipments[] Representa un trabajo. Puede ser pickup, delivery o ambos.
Ubicación de la tarea pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Es la ubicación geográfica en la que se realiza el trabajo.
Tiempo de servicio pickups[].duration
deliveries[].duration
Es el tiempo dedicado a completar la tarea en la ubicación (por ejemplo, la descarga), sin incluir el tiempo de viaje.

Mapeo de restricciones

Restricción del mundo real Parámetro de API Descripción
Capacidad del vehículo vehicles[].loadLimits Establece el límite flexible o estricto para la capacidad del vehículo. Si el loadDemand de un envío supera el límite restante, no se asigna.
Tamaño del paquete shipments[].loadDemands Es la cantidad de capacidad del vehículo que ocupa un envío.
Restricción de vehículo shipments[].allowedVehicleIndices Restringe un envío para que solo lo puedan retirar o entregar vehículos o conductores específicos.
Horario de atención shipments[].pickups[].timeWindows o shipments[].deliveries[].timeWindows Establece el horario disponible para visitar una ubicación. Si un vehículo no puede llegar dentro de este período, se omitirá el envío.
Límite de longitud del turno vehicles[].routeDurationLimit Establece un límite flexible o estricto 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 los tiempos de viaje.

Asignación de objetivos

Objetivo del mundo real Parámetro de API Descripción
Minimizar el tamaño de la flota vehicles[].fixedCost Aplica un costo único por el uso de 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 Se aplica un costo por cada kilómetro recorrido. Prioriza las rutas más cortas para ahorrar combustible y reducir el desgaste.
Minimiza el tiempo total vehicles[].costPerHour Se aplica un costo por cada hora en que el vehículo está activo (incluido el tiempo de viaje y de espera). Prioriza la finalización más rápida.
Minimiza el tiempo de conducción vehicles[].costPerTraveledHour Aplica un costo específicamente por el tiempo dedicado al 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. Establecer este valor alto garantiza que se prioricen las tareas críticas por sobre las opcionales.

Crea la solicitud y obtén una respuesta

Para generar un plan de ruta con la API de Route Optimization, sigue estos 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 las solicitudes, 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 el significado de cada parámetro. Consulta Cómo interpretar una respuesta.

Cómo definir mejor tu plan de ruta

Traducir la logística del mundo real en costos y restricciones de la API es una tarea compleja. Es posible que tu plan de ruta inicial no coincida con los objetivos comerciales o las expectativas de los conductores. Definir mejor tu plan de ruta es el proceso iterativo de probar las rutas que se muestran y ajustar los parámetros hasta que encuentres una configuración que cumpla con 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 Aumentar su valor o agregar 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 los envíos otros, que son menos críticos. Esto los hace opcionales, lo que libera tiempo y capacidad del vehículo para el envío importante.
Se omitió el envío debido a la sincronización softStartTime/softEndTime Agregar períodos flexibles Los períodos estrictos descartan las tareas que se retrasan incluso un minuto. Las ventanas flexibles permiten que el conductor llegue con un pequeño retraso pagando un "costo" en lugar de no completar la tarea.
Se omitió el envío debido al peso loadLimits[].softMaxLoad y costPerUnitAbove Agrega demandas de carga flexibles Permite que un vehículo supere ligeramente su capacidad ideal (con una penalización) en lugar de dejar un paquete.
Se omitió el envío debido a la sobrecarga de la flota model.vehicles[] o shipments[].timeWindows Agregar vehículos o períodos de relajación Si hay demasiados envíos para la flota actual, especialmente 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 Agregar costos o aumentar su valor Indica a la API que el viaje es costoso, lo que la alienta a descartar 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[] Agregar límites de duración o agregar vehículos y límites Aplica un límite máximo (por ejemplo, 8 horas) al tiempo total que un conductor pasa en la ruta. Agregar vehículos por sí solo no acortará 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, es necesario actualizar un plan de ruta sin cambiar la base, por ejemplo, agregar una recogida al programa de un conductor activo. Para ello, usa parámetros de inserción, que proporcionan a la API un punto de partida basado en tu solución anterior, lo que le permite modificar el plan existente en lugar de calcular uno nuevo desde cero.

A continuación, se muestran diferentes formas en las que puedes actualizar un plan de ruta con parámetros de inserció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, ya que te permite conservar la secuencia actual del conductor o corregir partes del plan que ya se ejecutaron.
  • Asegúrate de que la ruta actualizada siga asignada al vehículo correcto configurando interpretInjectedSolutionsUsingLabels como true. Esto es útil en la experimentación cuando se agregan o quitan envíos y vehículos, ya que las rutas se correlacionan 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, a la vez que cumple con tus restricciones y objetivos. Integra este plan de ruta en tu sistema para usarlo en tus operaciones diarias. 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 flota verifiquen y supervisen tu plan de ruta, puedes mostrarlo en un mapa del panel. Según la etapa de desarrollo en la que te encuentres, puedes visualizar tu plan de ruta de las siguientes maneras:

  • Explora sin código: Puedes usar la app de código abierto Route Optimization para ver cómo la API traduce tus datos en rutas físicas en un mapa. Esta aplicación web funciona como una herramienta de exploración que te permite crear situaciones, ajustar parámetros de restricción y renderizar visualmente los planes de rutas resultantes antes de escribir cualquier código.
  • Mostrar 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, ubica 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 esta lista, usar shipmentIndex para recuperar las coordenadas de ubicación de cada parada y usar tu biblioteca de mapas 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 prevista para la planificación y la evaluación, no la ruta en tiempo real que tomó un conductor. Establece populatePolylines: true en tu solicitud para obtener un campo encodedPolyline para cada ruta y decodifícalo con el método google.maps.geometry.encoding.decodePath() de la API de Maps JavaScript.

Envío a los conductores

Puedes integrar las 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 personalizada para conductores, puedes integrar el SDK de Navigation para Android o iOS para obtener indicaciones paso a paso integradas 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, configura 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 rutas generado por la API en Fleet Engine para supervisar la ejecución de la ruta en tiempo real. Si bien la API proporciona una polilínea del camino previsto para la evaluación, Fleet Engine vincula tu secuencia planificada de visitas con el seguimiento en tiempo real del vehículo.