- Representación JSON
- Envío
- VisitRequest
- LatLng
- Waypoint
- Ubicación
- TimeWindow
- Vehicle
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Objetivo
- Tipo
- DurationDistanceMatrix
- Row
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Un modelo de envío contiene un conjunto de envíos que deben realizarse con un conjunto de vehículos, y minimiza el costo general, que es la suma de los siguientes elementos:
- El costo de la planificación de rutas de los vehículos (suma del costo por tiempo total, el costo por tiempo de viaje y el costo fijo en todos los vehículos).
- las penalizaciones por envíos no realizados.
- el costo de la duración global de los envíos
| Representación JSON |
|---|
{ "shipments": [ { object ( |
| Campos | |
|---|---|
shipments[] |
Es el conjunto de envíos que se deben realizar en el modelo. |
vehicles[] |
Es el conjunto de vehículos que se pueden usar para realizar visitas. |
objectives[] |
Es el conjunto de objetivos de este modelo que transformaremos en costos. Si no está vacío, el modelo de entrada no debe tener costo. Para obtener la solicitud modificada, usa Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles. |
globalStartTime |
Hora de inicio y finalización global del modelo: No se puede considerar válida ninguna hora fuera de este rango. El período del modelo debe ser inferior a un año, es decir, Cuando uses campos de Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
globalEndTime |
Si no se establece, se usa la hora predeterminada 00:00:00 UTC del 1 de enero de 1971 (es decir, segundos: 31536000, nanosegundos: 0). Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
globalDurationCostPerHour |
La "duración global" del plan general es la diferencia entre la hora de inicio efectiva más temprana y la hora de finalización efectiva más tardía de todos los vehículos. Los usuarios pueden asignar un costo por hora a esa cantidad para intentar optimizar la finalización del trabajo lo antes posible, por ejemplo. Este costo debe estar en la misma unidad que |
durationDistanceMatrices[] |
Especifica las matrices de duración y distancia que se usan en el modelo. Si este campo está vacío, se usarán las distancias geodésicas o de Google Maps, según el valor del campo Ejemplos de uso:
|
durationDistanceMatrixSrcTags[] |
Son etiquetas que definen las fuentes de las matrices de duración y distancia. Las etiquetas corresponden a |
durationDistanceMatrixDstTags[] |
Son etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transitionAttributes[] |
Se agregaron atributos de transición al modelo. |
shipmentTypeIncompatibilities[] |
Conjuntos de shipment_types incompatibles (consulta |
shipmentTypeRequirements[] |
Conjuntos de requisitos de |
precedenceRules[] |
Conjunto de reglas de precedencia que se deben aplicar en el modelo. IMPORTANTE: El uso de reglas de precedencia limita el tamaño del problema que se puede optimizar. Es posible que se rechacen las solicitudes que usan reglas de precedencia que incluyen muchos envíos. |
maxActiveVehicles |
Restringe la cantidad máxima de vehículos activos. Un vehículo está activo si su ruta realiza al menos un envío. Esto se puede usar para limitar la cantidad de rutas en el caso de que haya menos conductores que vehículos y que la flota de vehículos sea heterogénea. Luego, la optimización seleccionará el mejor subconjunto de vehículos para usar. Debe ser estrictamente positivo. |
Envío
Es el envío de un solo artículo, desde una de sus recolecciones hasta una de sus entregas. Para que el envío se considere realizado, un vehículo único debe visitar una de sus ubicaciones de retiro (y disminuir sus capacidades de repuesto en consecuencia) y, luego, visitar una de sus ubicaciones de entrega (y, por lo tanto, volver a aumentar sus capacidades de repuesto en consecuencia).
| Representación JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Campos | |
|---|---|
displayName |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es el conjunto de alternativas de retiro asociadas al envío. Si no se especifica, el vehículo solo debe visitar una ubicación que corresponda a las entregas. |
deliveries[] |
Es el conjunto de alternativas de entrega asociadas al envío. Si no se especifica, el vehículo solo debe visitar una ubicación que corresponda a las paradas. |
loadDemands |
Demandas de carga del envío (por ejemplo, peso, volumen, cantidad de palets, etcétera) Las claves del mapa deben ser identificadores que describan el tipo de carga correspondiente y, de ser posible, también deben incluir las unidades. Por ejemplo: "weight_kg", "volume_gallons", "pallet_count", etcétera. Si una clave determinada no aparece en el mapa, la carga correspondiente se considera nula. |
allowedVehicleIndices[] |
Es el conjunto de vehículos que pueden realizar este envío. Si está vacío, todos los vehículos pueden realizarla. Los vehículos se indican por su índice en la lista |
costsPerVehicle[] |
Especifica el costo en el que se incurre cuando cada vehículo entrega este envío. Si se especifica, debe tener ALGUNA de las siguientes opciones:
Estos costos deben estar en la misma unidad que |
costsPerVehicleIndices[] |
Son los índices de los vehículos a los que se aplica |
pickupToDeliveryAbsoluteDetourLimit |
Especifica el tiempo máximo absoluto de desvío en comparación con la ruta más corta desde la partida hasta el destino. Si se especifica, debe ser no negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, sea t el tiempo más corto que se tarda en ir desde la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, el parámetro de configuración Si se especifican límites relativos y absolutos en el mismo envío, se usará el límite más restrictivo para cada par posible de retiro o entrega. Desde el 10/2017, los desvíos solo se admiten cuando las duraciones de los viajes no dependen de los vehículos. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
pickupToDeliveryTimeLimit |
Especifica la duración máxima desde el inicio de la recolección hasta el inicio de la entrega de un envío. Si se especifica, debe ser no negativo, y el envío debe contener al menos un retiro y una entrega. Esto no depende de las alternativas seleccionadas para el retiro y la entrega, ni de la velocidad del vehículo. Esto se puede especificar junto con las restricciones de desvío máximas: la solución respetará ambas especificaciones. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
shipmentType |
Es una cadena no vacía que especifica un "tipo" para este envío. Esta función se puede usar para definir incompatibilidades o requisitos entre Se diferencia de |
label |
Especifica una etiqueta para este envío. Esta etiqueta se informa en la respuesta en el campo |
ignore |
Si es verdadero, se omite este envío, pero no se aplica un Si se ignora un envío, se produce un error de validación cuando hay algún Se permite ignorar un envío que se realiza en |
penaltyCost |
Si no se completa el envío, esta penalización se agrega al costo general de las rutas. Un envío se considera completado si se visita una de sus alternativas de retiro y entrega. El costo se puede expresar en la misma unidad que se usa para todos los demás campos relacionados con el costo en el modelo y debe ser positivo. IMPORTANTE: Si no se especifica esta penalización, se considera infinita, es decir, el envío debe completarse. |
pickupToDeliveryRelativeDetourLimit |
Especifica el tiempo máximo de desvío relativo en comparación con la ruta más corta desde la partida hasta el destino. Si se especifica, debe ser no negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, sea t el tiempo más corto que se tarda en ir desde la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, el parámetro de configuración Si se especifican límites relativos y absolutos en el mismo envío, se usará el límite más restrictivo para cada par posible de retiro o entrega. Desde el 10/2017, los desvíos solo se admiten cuando las duraciones de los viajes no dependen de los vehículos. |
VisitRequest
Solicitud de una visita que se puede realizar en vehículo: tiene una ubicación geográfica (o dos, consulta a continuación), horarios de apertura y cierre representados por ventanas de tiempo, y un tiempo de duración del servicio (tiempo que pasa el vehículo una vez que llega para recoger o dejar mercancías).
| Representación JSON |
|---|
{ "arrivalLocation": { object ( |
| Campos | |
|---|---|
arrivalLocation |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta acción de |
arrivalWaypoint |
Es el punto de ruta al que llega el vehículo cuando realiza este |
departureLocation |
Es la ubicación geográfica desde la que el vehículo sale después de completar este |
departureWaypoint |
Es la parada en la que el vehículo sale después de completar este |
tags[] |
Especifica las etiquetas adjuntas a la solicitud de visita. No se permiten cadenas vacías ni duplicadas. |
timeWindows[] |
Son períodos que restringen la hora de llegada a una visita. Ten en cuenta que un vehículo puede salir fuera del período de hora de llegada, es decir, la hora de llegada y la duración no tienen que estar dentro de un período. Esto puede generar tiempo de espera si el vehículo llega antes de La ausencia de Los períodos no deben superponerse ni ser adyacentes, y deben estar en orden ascendente.
|
duration |
Duración de la visita, es decir, el tiempo que el vehículo pasa entre la llegada y la salida (se debe agregar al posible tiempo de espera; consulta Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
cost |
Es el costo de atender esta solicitud de visita en una ruta de vehículo. Se puede usar para pagar diferentes costos por cada alternativa de retiro o entrega de un envío. Este costo debe estar en la misma unidad que |
loadDemands |
Son las demandas de carga de esta solicitud de visita. Es igual que el campo |
visitTypes[] |
Especifica los tipos de visita. Se puede usar para asignar el tiempo adicional que necesita un vehículo para completar esta visita (consulta Un tipo solo puede aparecer una vez. |
label |
Especifica una etiqueta para este |
avoidUTurns |
Especifica si se deben evitar los giros en U en las rutas de conducción en esta ubicación. La función para evitar giros en U es el mejor esfuerzo y no se garantiza que se eviten por completo. Esta es una función experimental y su comportamiento está sujeto a cambios. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request para obtener más detalles. |
LatLng
Es un objeto que representa un par de valores de latitud y longitud. Esto se expresa como un par de números de punto flotante de doble precisión que representan los grados de latitud y longitud. A menos que se especifique lo contrario, este objeto debe cumplir con el estándar WGS84. Los valores deben pertenecer a rangos normalizados.
| Representación JSON |
|---|
{ "latitude": number, "longitude": number } |
| Campos | |
|---|---|
latitude |
La latitud expresada en grados. Debe pertenecer al rango [-90.0, +90.0]. |
longitude |
La longitud expresada en grados. Debe pertenecer al rango [-180.0, +180.0]. |
Punto de referencia
Encapsula un punto de ruta. Los puntos de referencia marcan las ubicaciones de llegada y salida de los VisitRequests, y las ubicaciones de inicio y finalización de los vehículos.
| Representación JSON |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| Campos | |
|---|---|
sideOfRoad |
Opcional. Indica que la ubicación de este punto de referencia está destinada a que el vehículo se detenga en un lado específico de la ruta. Cuando configuras este valor, la ruta pasará por la ubicación para que el vehículo pueda detenerse al costado de la ruta hacia el que se inclina la ubicación desde el centro de la ruta. Esta opción no funciona para el modo de viaje "A PIE". |
vehicleStopover |
Indica que el punto de referencia está destinado a que los vehículos se detengan, con la intención de recoger o dejar pasajeros. Esta opción solo funciona para el modo de viaje "CONDUCCIÓN" y cuando "locationType" es "location". Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
Campo de unión location_type. Diferentes formas de representar una ubicación. Las direcciones (location_type) solo pueden ser una de las siguientes opciones: |
|
location |
Es un punto especificado con coordenadas geográficas, que incluye un rumbo opcional. |
placeId |
Es el ID de lugar del PDI asociado con el punto de ruta. Cuando uses un ID de lugar para especificar la ubicación de llegada o salida de un VisitRequest, usa un ID de lugar que sea lo suficientemente específico como para determinar una ubicación de LatLng para la navegación al lugar. Por ejemplo, un ID de lugar que representa un edificio es adecuado, pero no se recomienda un ID de lugar que representa una ruta. |
Ubicación
Encapsula una ubicación (un punto geográfico y un encabezado opcional).
| Representación JSON |
|---|
{
"latLng": {
object ( |
| Campos | |
|---|---|
latLng |
Son las coordenadas geográficas de la parada. |
heading |
Es el rumbo de la brújula asociado con la dirección del flujo de tráfico. Este valor se usa para especificar el lado de la ruta que se usará para la recogida y la entrega. Los valores de dirección pueden ser de 0 a 360, donde 0 especifica una dirección hacia el norte, 90 especifica una dirección hacia el este, etcétera. |
TimeWindow
Los períodos restringen la hora de un evento, como la hora de llegada a una visita o la hora de inicio y finalización de un vehículo.
Los límites de la ventana temporal estricta, startTime y endTime, imponen la hora más temprana y más tardía del evento, de modo que startTime <= event_time <=
endTime. El límite inferior de la ventana temporal flexible, softStartTime, expresa una preferencia para que el evento ocurra en softStartTime o después de esa fecha, ya que incurre en un costo proporcional al tiempo que transcurre antes de softStartTime. El límite superior de la ventana temporal flexible, softEndTime, expresa una preferencia para que el evento ocurra en softEndTime o antes, ya que incurre en un costo proporcional al tiempo que transcurre después de softEndTime hasta que ocurre el evento. startTime, endTime, softStartTime y softEndTime deben estar dentro de los límites de tiempo globales (consulta ShipmentModel.global_start_time y ShipmentModel.global_end_time) y deben cumplir con lo siguiente:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| Representación JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| Campos | |
|---|---|
startTime |
Es la hora de inicio del período de tiempo fijo. Si no se especifica, se establecerá en Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
endTime |
Es la hora de finalización del período fijo. Si no se especifica, se establecerá en Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
softStartTime |
Es la hora de inicio flexible del período. Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
softEndTime |
Es la hora de finalización flexible del período. Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
costPerHourBeforeSoftStartTime |
Es un costo por hora que se agrega a otros costos del modelo si el evento ocurre antes de softStartTime, y se calcula de la siguiente manera: Este costo debe ser positivo y el campo solo se puede establecer si se configuró softStartTime. |
costPerHourAfterSoftEndTime |
Es un costo por hora que se agrega a otros costos del modelo si el evento ocurre después de Este costo debe ser positivo, y el campo solo se puede configurar si se estableció |
Vehículo
Modela un vehículo en un problema de envío. Resolver un problema de envío creará una ruta que comienza en startLocation y termina en endLocation para este vehículo. Una ruta es una secuencia de visitas (consulta ShipmentRoute).
| Representación JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| Campos | |
|---|---|
displayName |
Es el nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travelMode |
Es el modo de viaje que afecta las rutas que puede usar el vehículo y su velocidad. Consulta también |
routeModifiers |
Es un conjunto de condiciones que se deben cumplir y que afectan la forma en que se calculan las rutas para el vehículo determinado. |
startLocation |
Ubicación geográfica en la que se encuentra el vehículo antes de recoger cualquier envío. Si no se especifica, el vehículo comienza en su primera parada. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
startWaypoint |
Es un punto de referencia que representa una ubicación geográfica en la que el vehículo se detiene antes de recoger cualquier envío. Si no se especifican |
endLocation |
Ubicación geográfica en la que se detiene el vehículo después de completar su último |
endWaypoint |
Es un punto de ruta que representa una ubicación geográfica en la que el vehículo se detiene después de completar su último |
startTags[] |
Especifica las etiquetas adjuntas al inicio de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
endTags[] |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
startTimeWindows[] |
Períodos durante los cuales el vehículo puede salir de su ubicación de inicio. Deben estar dentro de los límites de tiempo globales (consulta los campos Los períodos que pertenecen al mismo campo repetido deben ser disjuntos, es decir, ningún período puede superponerse con otro ni ser adyacente a él, y deben estar en orden cronológico.
|
endTimeWindows[] |
Son los períodos durante los cuales el vehículo puede llegar a su ubicación final. Deben estar dentro de los límites de tiempo globales (consulta los campos Los períodos que pertenecen al mismo campo repetido deben ser disjuntos, es decir, ningún período puede superponerse con otro ni ser adyacente a él, y deben estar en orden cronológico.
|
unloadingPolicy |
Se aplica la política de descarga en el vehículo. |
loadLimits |
Capacidades del vehículo (peso, volumen, cantidad de palets, por ejemplo) Las claves del mapa son los identificadores del tipo de carga, coherentes con las claves del campo |
costPerHour |
Costos del vehículo: Todos los costos se suman y deben estar en la misma unidad que Es el costo por hora de la ruta del vehículo. Este costo se aplica al tiempo total que tarda la ruta y comprende el tiempo de viaje, el tiempo de espera y el tiempo de visita. Usar |
costPerTraveledHour |
Es el costo por hora de viaje de la ruta del vehículo. Este costo solo se aplica al tiempo de viaje que toma la ruta (es decir, el que se informa en |
costPerKilometer |
Es el costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en |
fixedCost |
Es el costo fijo que se aplica si se usa este vehículo para transportar un envío. |
usedIfRouteIsEmpty |
Este campo solo se aplica a los vehículos cuando su ruta no incluye ningún envío. Indica si el vehículo se debe considerar como usado o no en este caso. Si es verdadero, el vehículo va desde su ubicación de inicio hasta su ubicación final, incluso si no realiza ningún envío, y se tienen en cuenta los costos de tiempo y distancia que resultan de su viaje de inicio a fin. De lo contrario, no se desplaza desde su ubicación de inicio hasta su ubicación final, y no se programa ningún |
routeDurationLimit |
Es el límite aplicado a la duración total de la ruta del vehículo. En un |
travelDurationLimit |
Es el límite aplicado a la duración del viaje de la ruta del vehículo. En un |
routeDistanceLimit |
Es el límite aplicado a la distancia total de la ruta del vehículo. En un |
extraVisitDurationForVisitType |
Especifica un mapa de cadenas visitTypes a duraciones. La duración es el tiempo adicional a Si una solicitud de visita tiene varios tipos, se agregará una duración para cada tipo en el mapa. |
breakRule |
Describe el programa de descanso que se aplicará en este vehículo. Si está vacío, no se programarán descansos para este vehículo. |
label |
Especifica una etiqueta para este vehículo. Esta etiqueta se informa en la respuesta como el |
ignore |
Si es verdadero, Si un vehículo ignorado en Si un envío se realiza con un vehículo ignorado en |
travelDurationMultiple |
Especifica un factor multiplicativo que se puede usar para aumentar o disminuir los tiempos de viaje de este vehículo. Por ejemplo, si se establece en 2.0, significa que este vehículo es más lento y tiene tiempos de viaje que son el doble de los de los vehículos estándar. Este múltiplo no afecta las duraciones de las visitas. Afecta el costo si se especifican ADVERTENCIA: Los tiempos de viaje se redondearán al segundo más cercano después de aplicar este múltiplo, pero antes de realizar cualquier operación numérica. Por lo tanto, un múltiplo pequeño puede generar una pérdida de precisión. Consulta también |
TravelMode
Son los modos de viaje que pueden usar los vehículos.
Estos deben ser un subconjunto de los modos de viaje de la API de Routes de Google Maps Platform. Consulta https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.
Nota: Las rutas de WALKING están en versión beta y, a veces, es posible que no incluyan veredas o rutas peatonales claras. Debes mostrar esta advertencia al usuario para todas las rutas a pie que muestres en tu app.
| Enums | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Modo de viaje sin especificar, equivalente a DRIVING. |
DRIVING |
Modo de viaje correspondiente a las instrucciones sobre cómo llegar en automóvil (coche, …). |
WALKING |
Modo de viaje correspondiente a las indicaciones para llegar a pie. |
RouteModifiers
Encapsula un conjunto de condiciones opcionales que se deben satisfacer cuando se calculan rutas de vehículos. Es similar a RouteModifiers en la API de Routes Preferred de Google Maps Platform. Consulta https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| Representación JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Campos | |
|---|---|
avoidTolls |
Especifica si se deben evitar las rutas con peaje cuando sea razonable. Se dará preferencia a las rutas que no incluyan rutas con peaje. Solo se aplica a los modos de viaje motorizados. |
avoidHighways |
Especifica si se deben evitar las autopistas cuando sea razonable. Se dará preferencia a las rutas que no contengan autopistas. Solo se aplica a los modos de viaje motorizados. |
avoidFerries |
Especifica si se deben evitar los ferris cuando sea razonable. Se dará preferencia a las rutas que no incluyan viajes en transbordador. Solo se aplica a los modos de viaje motorizados. |
avoidIndoor |
Opcional. Especifica si se debe evitar la navegación en interiores cuando sea razonable. Se dará preferencia a las rutas que no contengan navegación en interiores. Solo se aplica al modo de viaje |
UnloadingPolicy
Política sobre cómo se puede descargar un vehículo. Solo se aplica a los envíos que tienen tanto un retiro como una entrega.
Los demás envíos pueden ocurrir en cualquier lugar de la ruta, independientemente de unloadingPolicy.
| Enums | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada; las entregas solo deben ocurrir después de sus correspondientes retiros. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en el orden inverso al de las recolecciones |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las recolecciones |
LoadLimit
Define un límite de carga que se aplica a un vehículo, p.ej., "este camión solo puede transportar hasta 3,500 kg". Consulta los loadLimits.
| Representación JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Campos | |
|---|---|
softMaxLoad |
Es un límite flexible de la carga. Consulta los |
costPerUnitAboveSoftMax |
Si la carga alguna vez supera |
startLoadInterval |
Es el intervalo de carga aceptable del vehículo al inicio de la ruta. |
endLoadInterval |
Es el intervalo de carga aceptable del vehículo al final de la ruta. |
maxLoad |
Es la cantidad máxima aceptable de carga. |
costPerKilometer |
Costo de transportar una unidad de carga durante un kilómetro para este vehículo. Esto se puede usar como proxy para el consumo de combustible: si la carga es un peso (en Newtons), entonces carga*kilómetro tiene la dimensión de una energía. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles. |
costPerTraveledHour |
Costo de viajar con una unidad de carga durante una hora para este vehículo. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles. |
Intervalo
Intervalo de importes de carga aceptables.
| Representación JSON |
|---|
{ "min": string, "max": string } |
| Campos | |
|---|---|
min |
Una carga mínima aceptable Debe ser ≥ 0. Si se especifican ambos, |
max |
Una carga máxima aceptable Debe ser ≥ 0. Si no se especifica, este mensaje no restringe la carga máxima. Si se especifican ambos, |
LoadCost
Costo de mover una unidad de carga durante un Transition. Para una carga determinada, el costo es la suma de dos partes:
- min(carga,
loadThreshold) *costPerUnitBelowThreshold - máx.(0, carga -
loadThreshold) *costPerUnitAboveThreshold
Con este costo, las soluciones prefieren satisfacer primero las demandas altas o, de manera equivalente, satisfacer las demandas altas al final. Por ejemplo, si un vehículo tiene
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
y su ruta es start,pickup,pickup,delivery,delivery,end con transiciones:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
entonces el costo incurrido por este LoadCost es (cost_below * load_below * kilometers + cost_above * load_above * kms)
- transición 0: 0.0
- transición 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- transición 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 4: 0.0
Por lo tanto, el LoadCost en la ruta es de 120.0.
Sin embargo, si la ruta es start,pickup,delivery,pickup,delivery,end con transiciones, sucede lo siguiente:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
entonces el costo que genera este LoadCost es
- transición 0: 0.0
- transición 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 2: 0.0
- transición 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 4: 0.0
Aquí, el LoadCost en la ruta es 40.0.
LoadCost hace que las soluciones con transiciones cargadas sean más costosas.
Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles.
| Representación JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Campos | |
|---|---|
loadThreshold |
Es la cantidad de carga por encima de la cual el costo de mover una unidad de carga cambia de costPerUnitBelowThreshold a costPerUnitAboveThreshold. Debe ser >= 0. |
costPerUnitBelowThreshold |
Costo de mover una unidad de carga, para cada unidad entre 0 y el umbral. Debe ser un valor finito y mayor o igual que 0. |
costPerUnitAboveThreshold |
Es el costo de mover una unidad de carga por cada unidad que supere el umbral. En el caso especial de que el umbral sea igual a 0, se trata de un costo fijo por unidad. Debe ser un valor finito y mayor o igual que 0. |
DurationLimit
Es un límite que define la duración máxima de la ruta de un vehículo. Puede ser de hardware o de software.
Cuando se define un campo de límite flexible, se deben definir juntos el umbral máximo flexible y su costo asociado.
| Representación JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Campos | |
|---|---|
maxDuration |
Es un límite estricto que restringe la duración a un máximo de maxDuration. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
softMaxDuration |
Es un límite flexible que no aplica un límite de duración máximo, pero, cuando se incumple, la ruta incurre en un costo. Este costo se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
quadraticSoftMaxDuration |
Es un límite flexible que no aplica un límite de duración máximo, pero, cuando se incumple, la ruta incurre en un costo cuadrático en la duración. Este costo se suma a otros costos definidos en el modelo, con la misma unidad. Si se define,
Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
costPerHourAfterSoftMax |
Es el costo por hora que se genera si se incumple el umbral de El costo no debe ser negativo. |
costPerSquareHourAfterQuadraticSoftMax |
Es el costo por hora cuadrada en el que se incurre si se incumple el umbral de El costo adicional es 0 si la duración es inferior al umbral; de lo contrario, el costo depende de la duración de la siguiente manera: El costo no debe ser negativo. |
DistanceLimit
Es un límite que define la distancia máxima que se puede recorrer. Puede ser de hardware o de software.
Si se define un límite flexible, se deben definir softMaxMeters y costPerKilometerAboveSoftMax, y ambos deben ser no negativos.
| Representación JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Campos | |
|---|---|
maxMeters |
Es un límite estricto que restringe la distancia a un valor máximo de maxMeters. El límite no debe ser negativo. |
softMaxMeters |
Es un límite flexible que no aplica un límite de distancia máximo, pero, cuando se incumple, genera un costo que se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, softMaxMeters debe ser menor que maxMeters y no debe ser negativo. |
costPerKilometerBelowSoftMax |
Costo por kilómetro incurrido, que aumenta hasta Este costo no se admite en |
costPerKilometerAboveSoftMax |
Es el costo por kilómetro en el que se incurre si la distancia supera el límite de El costo no debe ser negativo. |
BreakRule
Son reglas para generar interrupciones de tiempo para un vehículo (p.ej., descansos para el almuerzo). Una pausa es un período de tiempo contiguo durante el cual el vehículo permanece inactivo en su posición actual y no puede realizar ninguna visita. Puede ocurrir una interrupción en los siguientes casos:
- durante el viaje entre dos visitas (lo que incluye el tiempo inmediatamente anterior o posterior a una visita, pero no en el medio de una visita), en cuyo caso extiende el tiempo de tránsito correspondiente entre las visitas
- o antes del arranque del vehículo (es posible que el vehículo no arranque en medio de una pausa), en cuyo caso no afecta la hora de arranque del vehículo.
- o después del final del vehículo (ídem, con la hora de finalización del vehículo).
| Representación JSON |
|---|
{ "breakRequests": [ { object ( |
| Campos | |
|---|---|
breakRequests[] |
Es la secuencia de interrupciones. Ver el mensaje |
frequencyConstraints[] |
Se pueden aplicar varios |
BreakRequest
La secuencia de descansos (es decir, su cantidad y orden) que se aplican a cada vehículo debe conocerse de antemano. Los BreakRequest repetidos definen esa secuencia, en el orden en que deben ocurrir. Sus períodos (earliestStartTime / latestStartTime) pueden superponerse, pero deben ser compatibles con el orden (esto se verifica).
| Representación JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Campos | |
|---|---|
earliestStartTime |
Obligatorio. Límite inferior (inclusive) del inicio del receso. Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
latestStartTime |
Obligatorio. Límite superior (inclusive) del inicio de la pausa. Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
minDuration |
Obligatorio. Es la duración mínima de la pausa. Debe ser positivo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
FrequencyConstraint
También se puede restringir aún más la frecuencia y la duración de las pausas especificadas anteriormente, aplicando una frecuencia mínima de pausas, como "Debe haber una pausa de al menos 1 hora cada 12 horas". Suponiendo que esto se puede interpretar como "Dentro de cualquier período de 12 h, debe haber al menos un descanso de al menos una hora", ese ejemplo se traduciría al siguiente FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Los tiempos y la duración de las pausas en la solución respetarán todas esas restricciones, además de los períodos y las duraciones mínimas ya especificados en BreakRequest.
En la práctica, un FrequencyConstraint puede aplicarse a interrupciones no consecutivas. Por ejemplo, la siguiente programación respeta el ejemplo "1h cada 12h":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| Representación JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| Campos | |
|---|---|
minBreakDuration |
Obligatorio. Es la duración mínima de la pausa para este parámetro de restricción. No negativo. Consulta la descripción de Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
maxInterBreakDuration |
Obligatorio. Es el lapso máximo permitido de cualquier intervalo de tiempo en la ruta que no incluye, al menos de forma parcial, una interrupción de Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
Objetivo
Los objetivos reemplazan por completo el modelo de costos y, por lo tanto, son incompatibles con los costos preexistentes. Cada objetivo se asigna a una cantidad de costos predefinidos para, p.ej., vehículos, envíos o atributos de transición.
Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles.
| Representación JSON |
|---|
{
"type": enum ( |
| Campos | |
|---|---|
type |
Es el tipo de objetivo. |
weight |
Es el valor que se le debe asignar a este objetivo en relación con los demás. Puede ser cualquier número no negativo, y los pesos no tienen que sumar 1. Los pesos tienen un valor predeterminado de 1.0. |
Tipo
Es el tipo de objetivo que se asignará a un conjunto de costos.
| Enums | |
|---|---|
DEFAULT |
Se usará un conjunto predeterminado de costos para garantizar una solución razonable. Nota: Este objetivo se puede usar por sí solo, pero también se agregará siempre con un peso de 1.0, como referencia, a los objetivos especificados por el usuario, si aún no está presente. |
MIN_DISTANCE |
Objetivos "MIN". Minimizar la distancia total recorrida |
MIN_WORKING_TIME |
Minimizar el tiempo total de trabajo, sumado para todos los vehículos |
MIN_TRAVEL_TIME |
Igual que el anterior, pero enfocándose solo en el tiempo de viaje. |
MIN_NUM_VEHICLES |
Minimiza la cantidad de vehículos que se usan. |
DurationDistanceMatrix
Especifica una matriz de duración y distancia desde las ubicaciones de inicio de la visita y del vehículo hasta las ubicaciones de finalización de la visita y del vehículo.
| Representación JSON |
|---|
{
"rows": [
{
object ( |
| Campos | |
|---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener la misma cantidad de elementos que |
vehicleStartTag |
Es la etiqueta que define a qué vehículos se aplica esta matriz de duración y distancia. Si está vacío, se aplica a todos los vehículos y solo puede haber una matriz. Cada inicio de vehículo debe coincidir exactamente con una matriz, es decir, exactamente uno de sus campos Todas las matrices deben tener un |
Fila
Especifica una fila de la matriz de duración y distancia.
| Representación JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Campos | |
|---|---|
durations[] |
Son los valores de duración para una fila determinada. Debe tener la misma cantidad de elementos que Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
meters[] |
Son los valores de distancia para una fila determinada. Si no hay costos ni restricciones que hagan referencia a las distancias en el modelo, este campo se puede dejar vacío. De lo contrario, debe tener tantos elementos como |
TransitionAttributes
Especifica los atributos de las transiciones entre dos visitas consecutivas en una ruta. Se pueden aplicar varios TransitionAttributes a la misma transición. En ese caso, todos los costos adicionales se suman y se aplica la restricción o el límite más estricto (siguiendo la semántica natural "Y").
| Representación JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Campos | |
|---|---|
srcTag |
Son las etiquetas que definen el conjunto de transiciones (src->dst) a las que se aplican estos atributos. Una visita de origen o un inicio de vehículo coinciden si su |
excludedSrcTag |
Consulta los |
dstTag |
Una visita al destino o un final de viaje del vehículo coinciden si su |
excludedDstTag |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Esta unidad es la misma que la de todos los demás costos del modelo y no debe ser negativa. Se aplica además de todos los demás costos existentes. |
costPerKilometer |
Especifica un costo por kilómetro que se aplica a la distancia recorrida durante esta transición. Se suma a cualquier |
distanceLimit |
Especifica un límite en la distancia recorrida durante esta transición. Desde el 2021/06, solo se admiten límites flexibles. |
delay |
Especifica una demora que se produce cuando se realiza esta transición. Este retraso siempre se produce después de finalizar la visita de origen y antes de comenzar la visita de destino. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
ShipmentTypeIncompatibility
Especifica las incompatibilidades entre los envíos según su tipo de envío. La aparición de envíos incompatibles en la misma ruta se restringe según el modo de incompatibilidad.
| Representación JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Campos | |
|---|---|
types[] |
Es la lista de tipos incompatibles. Dos envíos que tienen diferentes |
incompatibilityMode |
Es el modo que se aplica a la incompatibilidad. |
IncompatibilityMode
Son los modos que definen cómo se restringe la apariencia de los envíos incompatibles en la misma ruta.
| Enums | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidad sin especificar. Este valor nunca debe usarse. |
NOT_PERFORMED_BY_SAME_VEHICLE |
En este modo, dos envíos con tipos incompatibles nunca pueden compartir el mismo vehículo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
En este modo, dos envíos con tipos incompatibles nunca pueden estar en el mismo vehículo al mismo tiempo:
|
ShipmentTypeRequirement
Especifica los requisitos entre envíos según su shipmentType. Los detalles del requisito se definen según el modo de requisito.
| Representación JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Campos | |
|---|---|
requiredShipmentTypeAlternatives[] |
Es la lista de tipos de envío alternativos que requiere el |
dependentShipmentTypes[] |
Todos los envíos con un tipo en el campo NOTA: No se permiten cadenas de requisitos en las que un |
requirementMode |
Es el modo aplicado al requisito. |
RequirementMode
Son los modos que definen la apariencia de los envíos dependientes en una ruta.
| Enums | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito sin especificar. Este valor nunca debe usarse. |
PERFORMED_BY_SAME_VEHICLE |
En este modo, todos los envíos "dependientes" deben compartir el mismo vehículo que al menos uno de sus envíos "obligatorios". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con el modo Por lo tanto, el retiro de un envío "dependiente" debe tener una de las siguientes opciones:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Igual que antes, excepto que los envíos "dependientes" deben tener un envío "obligatorio" en su vehículo en el momento de la entrega. |
PrecedenceRule
Es una regla de precedencia entre dos eventos (cada evento es el retiro o la entrega de un envío): El evento "segundo" debe comenzar al menos offsetDuration después de que haya comenzado el evento "primero".
Varias precedencias pueden hacer referencia a los mismos eventos (o eventos relacionados), p.ej.: "El retiro de B se realiza después de la entrega de A" y "El retiro de C se realiza después del retiro de B".
Además, las precedencias solo se aplican cuando se realizan ambos envíos y, de lo contrario, se ignoran.
| Representación JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Campos | |
|---|---|
firstIsDelivery |
Indica si el evento "first" es una entrega. |
secondIsDelivery |
Indica si el evento "segundo" es una entrega. |
offsetDuration |
Es el desplazamiento entre el evento "primero" y el "segundo". Puede ser negativo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
firstIndex |
Índice de envío del evento "primero". Se debe especificar este campo. |
secondIndex |
Índice de envío del evento "second". Se debe especificar este campo. |