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 enrutamiento 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 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.
  • Implementa en producción: Implementa tu plan de rutas 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 cambian significativamente los requisitos de tu empresa. Abarca las etapas de la 1 a la 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. Define el alcance de tu problema: Identifica y organiza tus objetivos, recursos, tareas y restricciones para tener un panorama completo 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 funcione 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 rutas: Prueba tu plan de rutas y, luego, itera 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 una navegación práctica.

Delimita el 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 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?
  • Tiempo: ¿Cuáles son las horas 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 administrar 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: ¿Existen 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

Las restricciones son los límites y las restricciones sobre cómo puedes usar tus vehículos y cómo debes manejar tus envíos. Determinan la mayoría de tus operaciones y son vitales para crear 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 que su capacidad máxima, y un conductor no puede realizar una recogida después de que se cierra una tienda. 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 al 80% de su capacidad o realizar la entrega antes de un tiempo objetivo, pero no tienes problemas con exceder estos límites para obtener una mejor ruta.

Entre las restricciones comunes, se incluyen las siguientes:

  • Límites de capacidad: Es el peso, el volumen o la cantidad máxima de artículos que puede transportar un vehículo.
  • Intervalos de tiempo: Son los horarios específicos en los que una ubicación está abierta para una visita o las horas de turno específicas de un conductor.
  • Costos: Es el costo de ejecutar un vehículo o de omitir un envío. Uno de los objetivos principales de la API es generar un plan de ruta rentable.
  • Pausas del conductor: Son los períodos de descanso del conductor que suelen exigir las leyes laborales después de una determinada cantidad de horas de trabajo.

Establece tus objetivos comerciales

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

Estos son 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 la 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 el total de horas trabajadas o priorizar la llegada en horarios específicos, lo que puede prolongar 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 de tu flota.
Ubicaciones de 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
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, un 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 completando la tarea (por ejemplo, descargando), sin incluir la duración del 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 supera 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 de vehículos 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 las horas disponibles 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 para el tiempo que puede trabajar un conductor específico (por ejemplo, un máximo de 8 horas), independientemente de la hora de finalización global.
Pausas del conductor vehicles[].breakRule Aplica reglas de descanso específicas, como pausas obligatorias después de ciertas horas de trabajo.
Restricciones en la ruta vehicles[].travelMode Especifica el medio de transporte (por ejemplo, DRIVE o BICYCLE). Esto restringe la ruta a las rutas legales y determina las velocidades que se usan para calcular las duraciones de los viajes.

Asignación de objetivos

Objetivo del mundo real Parámetro de la API Descripción
Minimiza 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.
Minimiza la distancia vehicles[].costPerKilometer 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 Aplica un costo por cada hora que el vehículo esté activo (incluidos 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 para el tiempo que se pasa en movimiento. Esto distingue entre estar en el tráfico (costoso) y esperar en una parada(potencialmente más económico).
Prioriza ciertas tareas shipments[].penaltyCost Aplica un costo si se omite un envío específico. Establecer este valor alto garantiza que las tareas críticas se prioricen sobre las opcionales.

Crea la solicitud y obtén una respuesta

Para usar la API de Route Optimization y generar un plan de ruta, 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 tienes que 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 Realiza 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 Interpreta una respuesta.

Define 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 tus objetivos comerciales ni con las expectativas de los conductores. Refinar 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 logre 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 modifica 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 habituales 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 hace que sean opcionales, lo que libera tiempo y capacidad del vehículo para el envío importante.
Se omitió el envío debido al tiempo softStartTime/softEndTime Agrega períodos flexibles Las ventanas de tiempo estrictas descartan las tareas que se retrasan incluso un minuto. Las ventanas flexibles permiten que el conductor llegue un poco fuera de horario pagando un "costo" en lugar de no cumplir con la asignación.
Se omitió el envío debido al peso loadLimits[].softMaxLoad y costPerUnitAbove Agrega demandas de carga suave Permite que un vehículo supere ligeramente su capacidad ideal (por una penalización) en lugar de dejar un paquete atrás.
Se omitió el envío debido a la sobrecarga de la flota model.vehicles[] o shipments[].timeWindows Agrega vehículos o flexibiliza los períodos Si hay demasiados envíos para la flota actual, especialmente durante las horas pico, agrega más vehículos o amplía los plazos 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 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[] Agrega límites de duración o agrega vehículos y límites Aplica un límite estricto (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, necesitas actualizar un plan de ruta sin modificar la base, como 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 indican las diferentes formas en 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, lo 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 permanezca 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 coincide con las rutas que usan 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 sigue 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 flotas y enviar instrucciones paso a paso a los conductores.

Visualización

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

Para permitir que los administradores de flotas 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 optimización de rutas de código abierto para ver cómo la API traduce tus datos en rutas físicas en un mapa. Esta aplicación web sirve como una herramienta exploratoria que te permite crear situaciones, ajustar los parámetros de restricción y renderizar de forma visual 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 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 exacta planificada 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 toma 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.

Asignación a conductores

Puedes integrar la navegación 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 app de conductor 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 flotas, puedes importar el plan de ruta que genera 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 prevista para la evaluación, Fleet Engine vincula tu secuencia planificada de visitas con el seguimiento de vehículos en tiempo real.