- Representación JSON
- Envío
- VisitRequest
- LatLng
- Waypoint
- Ubicación
- TimeWindow
- Vehículo
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Intervalo
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Fila
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Un modelo de envío contiene un conjunto de envíos que debe realizar un conjunto de vehículos, a la vez que minimiza el costo general, que es la suma de lo siguiente:
- el costo de planificar las rutas de los vehículos (suma del costo por tiempo total, costo por tiempo de viaje y costo fijo de 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 un conjunto de vehículos que se pueden usar para realizar visitas. |
global |
Horas de inicio y finalización globales del modelo: No se pueden considerar válidas las horas fuera de este rango. El período del modelo debe ser inferior a un año, es decir, Cuando uses campos Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
global |
Si no se establece, se usa de forma predeterminada el valor 00:00:00 UTC del 1 de enero de 1971 (es decir, segundos: 31536000, nanos: 0). Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
global |
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 reciente de todos los vehículos. Los usuarios pueden asignar un costo por hora a esa cantidad para intentar optimizar la finalización de la tarea lo antes posible, por ejemplo. Este costo debe estar en la misma unidad que |
duration |
Especifica las matrices de duración y distancia que se usan en el modelo. Si este campo está vacío, se usarán Google Maps o distancias geodésicas, según el valor del campo Ejemplos de uso:
|
duration |
Etiquetas que definen las fuentes de las matrices de duración y distancia. Las etiquetas corresponden a |
duration |
Etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transition |
Atributos de transición agregados al modelo. |
shipment |
Conjuntos de shipment_types incompatibles (consulta |
shipment |
Conjuntos de requisitos de |
precedence |
Es un conjunto de reglas de prioridad que se deben aplicar en el modelo. |
max |
Limita 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 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 uno de sus puntos de retiro hasta uno de sus puntos de entrega. 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 repuestos según corresponda) y, luego, visitar una de sus ubicaciones de entrega más adelante (y, por lo tanto, volver a aumentar sus capacidades de repuestos según corresponda).
Representación JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Campos | |
---|---|
display |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es un 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 los puntos de partida. |
load |
Cargas del envío (por ejemplo, peso, volumen, cantidad de palés, etcétera) Las claves del mapa deben ser identificadores que describan el tipo de carga correspondiente, lo ideal es que también incluyan las unidades. Por ejemplo: "weight_kg", "volume_gallons", "pallet_count", etc. Si una clave determinada no aparece en el mapa, la carga correspondiente se considera nula. |
allowed |
Es el conjunto de vehículos que pueden realizar este envío. Si está vacío, todos los vehículos pueden realizarlo. Los vehículos se indican por su índice en la lista |
costs |
Especifica el costo que se genera cuando cada vehículo entrega este envío. Si se especifica, debe tener UNO de los siguientes elementos:
Estos costos deben estar en la misma unidad que |
costs |
Índices de los vehículos a los que se aplica |
pickup |
Especifica el tiempo máximo de desvío absoluto en comparación con la ruta más corta desde la partida hasta la entrega. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recogida y una entrega. Por ejemplo, supongamos que t es el tiempo más corto que se tarda en ir de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, la configuración de
Si se especifican los límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de recolección y entrega posibles. A partir de octubre de 2017, solo se admiten desvíos cuando las duraciones de viaje no dependen de los vehículos. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
pickup |
Especifica la duración máxima desde el inicio del retiro hasta el inicio de la entrega de un envío. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recogida 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áximo: la solución respetará ambas especificaciones. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
shipment |
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 |
ignore |
Si es verdadero, omite este envío, pero no apliques 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 |
penalty |
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. |
pickup |
Especifica el tiempo máximo de desvío relativo en comparación con la ruta más corta desde la recogida hasta la entrega. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recogida y una entrega. Por ejemplo, supongamos que t es el tiempo más corto que se tarda en ir de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, la configuración de
Si se especifican los límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de recolección y entrega posibles. A partir de octubre de 2017, solo se admiten desvíos cuando las duraciones de viaje no dependen de los vehículos. |
VisitRequest
Es una solicitud de visita que puede realizar un vehículo: tiene una geolocalización (o dos, consulta a continuación), horarios de apertura y cierre representados por ventanas de tiempo y una duración del servicio (tiempo que pasa el vehículo una vez que llega para recoger o dejar bienes).
Representación JSON |
---|
{ "arrivalLocation": { object ( |
Campos | |
---|---|
arrival |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta |
arrival |
El punto de referencia al que llega el vehículo cuando realiza esta |
departure |
Es la geolocalización desde la que sale el vehículo después de completar este |
departure |
Es el punto de referencia desde el que sale el vehículo después de completar este |
tags[] |
Especifica las etiquetas adjuntas a la solicitud de visita. No se permiten cadenas vacías ni duplicadas. |
time |
Son períodos que limitan la hora de llegada en una visita. Ten en cuenta que un vehículo puede salir fuera del período de la 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 un tiempo de espera si el vehículo llega antes de La ausencia de Las ventanas de tiempo deben ser disjuntas, es decir, ninguna debe superponerse con otra ni estar adyacente a ella, y deben estar en orden creciente.
|
duration |
Es la duración de la visita, es decir, el tiempo que el vehículo pasa entre la llegada y la salida (se debe agregar al tiempo de espera posible; 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 del vehículo. Esto se puede usar para pagar diferentes costos por cada retiro o entrega alternativa de un envío. Este costo debe estar en la misma unidad que |
load |
Carga las demandas de esta solicitud de visita. Es similar al campo |
visit |
Especifica los tipos de visita. Se puede usar para asignar el tiempo adicional necesario para que un vehículo complete esta visita (consulta Un tipo solo puede aparecer una vez. |
label |
Especifica una etiqueta para este |
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 referencia. Los puntos de referencia marcan las ubicaciones de llegada y salida de VisitRequests, y las ubicaciones de inicio y finalización de los vehículos.
Representación JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Campos | |
---|---|
side |
Opcional. Indica que la ubicación de este punto de referencia tiene la preferencia de que el vehículo se detenga en un lado particular de la ruta. Cuando establezcas este valor, la ruta pasará por la ubicación para que el vehículo pueda detenerse en el lado de la ruta hacia el que se orienta la ubicación desde el centro de la ruta. Esta opción no funciona para el modo de viaje "CAMINAR". |
Campo de unión location_type . Son 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, incluido un encabezado opcional. |
place |
El ID de lugar del lugar de interés asociado con el punto de referencia. |
Ubicación
Encapsula una ubicación (un punto geográfico y un encabezado opcional).
Representación JSON |
---|
{
"latLng": {
object ( |
Campos | |
---|---|
lat |
Son las coordenadas geográficas del punto de referencia. |
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 partida y la llegada. Los valores de rumbo pueden ser de 0 a 360, en los que 0 especifica un rumbo hacia el norte, 90 especifica un rumbo 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 período rígidos, startTime
y endTime
, aplican la hora más temprana y la más reciente del evento, de modo que startTime <= event_time <=
endTime
. El límite inferior de la ventana de tiempo flexible, softStartTime
, expresa una preferencia para que el evento ocurra en softStartTime
o después de este, lo que genera un costo proporcional a cuánto tiempo antes de softStartTime ocurre el evento. El límite superior de la ventana de tiempo flexible, softEndTime
, expresa una preferencia para que el evento ocurra en softEndTime
o antes, lo que genera un costo proporcional a cuánto tiempo después de softEndTime
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 respetar 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 | |
---|---|
start |
Es la hora de inicio del período de tiempo fijo. Si no se especifica, se establecerá en Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
end |
La hora de finalización del período fijo Si no se especifica, se establecerá en Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
soft |
Es la hora de inicio flexible del período. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
soft |
Es la hora de finalización flexible del período. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
cost |
Es un costo por hora que se agrega a otros costos del modelo si el evento ocurre antes de softStartTime, calculado de la siguiente manera:
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró softStartTime. |
cost |
Es un costo por hora que se suma a otros costos del modelo si el evento ocurre después de
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró |
Vehículo
Representa un vehículo con un problema de envío. Si resuelves un problema de envío, se creará una ruta que comenzará en startLocation
y terminará en endLocation
para este vehículo. Una ruta es una secuencia de visitas (consulta ShipmentRoute
).
Representación JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Campos | |
---|---|
display |
Es el nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travel |
El modo de viaje, que afecta las rutas que puede usar el vehículo y su velocidad. Consulta también |
route |
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. |
start |
Es la ubicación geográfica donde comienza el vehículo antes de recoger los envíos. Si no se especifica, el vehículo comienza en su primer punto de partida. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
start |
Punto de referencia que representa una ubicación geográfica donde comienza el vehículo antes de recoger los envíos. Si no se especifican |
end |
Es la ubicación geográfica donde finaliza el vehículo después de completar su último |
end |
Punto de referencia que representa una ubicación geográfica en la que finaliza el vehículo después de completar su último |
start |
Especifica las etiquetas adjuntas al inicio de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
end |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
start |
Son los períodos durante los cuales el vehículo puede salir de su ubicación de partida. 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 estar adyacente a otro, y deben estar en orden cronológico.
|
end |
Son los períodos durante los cuales el vehículo puede llegar a su ubicación de destino. 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 estar adyacente a otro, y deben estar en orden cronológico.
|
unloading |
Se aplicó la política de descarga en el vehículo. |
load |
Capacidades del vehículo (por ejemplo, peso, volumen, cantidad de palés) Las claves del mapa son los identificadores del tipo de carga, coherentes con las claves del campo |
cost |
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, además, incluye el tiempo de viaje, el tiempo de espera y el tiempo de visita. El uso de |
cost |
Es el costo por hora recorrida de la ruta del vehículo. Este costo se aplica solo al tiempo de viaje que tarda la ruta (es decir, el que se informa en |
cost |
Es el costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en |
fixed |
Es el costo fijo que se aplica si se usa este vehículo para manejar un envío. |
used |
Este campo solo se aplica a los vehículos cuando su ruta no entrega ningún envío. Indica si el vehículo se debe considerar usado o no en este caso. Si es verdadero, el vehículo va de su ubicación de inicio a la de destino, incluso si no entrega ningún envío, y se tienen en cuenta los costos de tiempo y distancia que resultan del viaje de inicio a destino. De lo contrario, no viaja desde su ubicación de inicio hasta la de destino, y no se programan |
route |
Es el límite que se aplica a la duración total de la ruta del vehículo. En un |
travel |
Es el límite que se aplica a la duración del viaje de la ruta del vehículo. En un |
route |
Es el límite que se aplica a la distancia total de la ruta del vehículo. En un |
extra |
Especifica un mapa de cadenas de 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 uno de ellos en el mapa. |
break |
Describe el programa de descansos 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 realiza un envío en Si un vehículo ignorado realiza un envío en |
travel |
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 el doble de los que tienen los vehículos estándar. Este múltiplo no afecta las duraciones de las visitas. Sí 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 provocar una pérdida de precisión. Consulta también |
TravelMode
Son los medios de transporte que pueden usar los vehículos.
Estos deben ser un subconjunto de los modos de viaje de la API de Routes Preferred de Google Maps Platform. Consulta: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enumeraciones | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Es el modo de viaje no especificado, equivalente a DRIVING . |
DRIVING |
Es el modo de viaje correspondiente a las instrucciones sobre cómo llegar en automóvil (automóvil, etc.). |
WALKING |
Es el modo de transporte correspondiente a las instrucciones sobre cómo llegar a pie. |
RouteModifiers
Encapsula un conjunto de condiciones opcionales que se deben cumplir cuando se calculan las rutas de los vehículos. Esto 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 | |
---|---|
avoid |
Especifica si se deben evitar las rutas con peaje cuando sea razonable. Se dará preferencia a las rutas que no contengan rutas con peaje. Solo se aplica a los modos de viaje motorizados. |
avoid |
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. |
avoid |
Especifica si se deben evitar los ferris cuando sea razonable. Se dará preferencia a las rutas que no incluyan viajes en transbordadores. Solo se aplica a los modos de viaje motorizados. |
avoid |
Opcional. Especifica si se debe evitar navegar 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 un retiro y una entrega.
Los demás envíos pueden ocurrir en cualquier lugar de la ruta, independientemente de unloadingPolicy
.
Enumeraciones | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada: Las entregas deben realizarse después de los retiros correspondientes. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en orden inverso a las recuperaciones |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las recogidas |
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 | |
---|---|
soft |
Es un límite flexible de la carga. Consulta los |
cost |
Si la carga supera |
start |
Es el intervalo de carga aceptable del vehículo al comienzo de la ruta. |
end |
Es el intervalo de carga aceptable del vehículo al final de la ruta. |
max |
Es la cantidad máxima de carga aceptable. |
Intervalo
Intervalo de cargas 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, |
DurationLimit
Es un límite que define una duración máxima de la ruta de un vehículo. Puede ser duro o blando.
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 | |
---|---|
max |
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 “ |
soft |
Un límite flexible no aplica un límite de duración máxima, pero, cuando se incumple, hace que la ruta incurra 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 “ |
quadratic |
Un límite flexible no aplica un límite de duración máximo, pero cuando se incumple, hace que la ruta incurra 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 “ |
cost |
Es el costo por hora que se genera si se incumple el límite de
El costo no debe ser negativo. |
cost |
Es el costo por hora cuadrada que se genera si se incumple el límite de El costo adicional es de 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 duro o blando.
Si se define un límite flexible, se deben definir softMaxMeters
y costPerKilometerAboveSoftMax
, y no deben ser negativos.
Representación JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
Campos | |
---|---|
max |
Es un límite estricto que restringe la distancia a un máximo de maxMeters. El límite no debe ser negativo. |
soft |
Un límite flexible no aplica un límite de distancia máxima, 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 inferior a maxMeters y no debe ser un valor negativo. |
cost |
El costo por kilómetro incurrido aumenta hasta
Este costo no se admite en |
cost |
Se genera un costo por kilómetro si la distancia supera el límite de
El costo no debe ser negativo. |
BreakRule
Son reglas para generar pausas de tiempo para un vehículo (p.ej., pausas para el almuerzo). Una pausa es un período contiguo durante el cual el vehículo permanece inactivo en su posición actual y no puede realizar ninguna visita. Puede ocurrir una pausa en los siguientes casos:
- durante el viaje entre dos visitas (que incluye el tiempo justo antes o después de una visita, pero no en medio de una visita), en cuyo caso se extiende el tiempo de tránsito correspondiente entre las visitas,
- o antes de que se encienda el vehículo (es posible que el vehículo no se encienda en medio de una pausa), en cuyo caso no afecta la hora de inicio del vehículo.
- o después de que finalice el viaje (también con la hora de finalización del viaje).
Representación JSON |
---|
{ "breakRequests": [ { object ( |
Campos | |
---|---|
break |
Es la secuencia de pausas. Consulta el mensaje |
frequency |
Es posible que se apliquen varios |
BreakRequest
Se debe conocer de antemano la secuencia de descansos (es decir, su cantidad y orden) que se aplica a cada vehículo. Los BreakRequest
repetidos definen esa secuencia, en el orden en que deben ocurrir. Sus ventanas de tiempo (earliestStartTime
/ latestStartTime
) pueden superponerse, pero deben ser compatibles con el pedido (esto se verifica).
Representación JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Campos | |
---|---|
earliest |
Obligatorio. Límite inferior (inclusive) del inicio de la pausa. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
latest |
Obligatorio. Es el límite superior (inclusivo) del inicio de la pausa. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
min |
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
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 pueda interpretar como "Dentro de cualquier período deslizante de 12 horas, debe haber al menos una pausa de una hora", ese ejemplo se traduciría en el siguiente FrequencyConstraint
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
El tiempo 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 que ya se especificaron en BreakRequest
.
En la práctica, un FrequencyConstraint
puede aplicarse a pausas no consecutivas. Por ejemplo, el siguiente programa respeta el ejemplo de "1 h cada 12 h":
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 | |
---|---|
min |
Obligatorio. Es la duración mínima de la pausa para esta restricción. No negativo. Consulta la descripción de Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
max |
Obligatorio. Es la duración máxima permitida de cualquier intervalo de tiempo en la ruta que no incluya, al menos de forma parcial, una pausa de Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
DurationDistanceMatrix
Especifica una matriz de duración y distancia de las ubicaciones de inicio y 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 tantos elementos como |
vehicle |
Es la etiqueta que define a qué vehículos se aplica esta matriz de duración y distancia. Si está vacía, 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[] |
Valores de duración para una fila determinada. Debe tener tantos elementos como Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
meters[] |
Valores de distancia para una fila determinada. Si no hay costos ni restricciones que se refieran a distancias en el modelo, 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. Es posible que se apliquen varios TransitionAttributes
a la misma transición. En ese caso, se suman todos los costos adicionales y se aplica la restricción o el límite más estricto (según la semántica natural de "Y").
Representación JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Campos | |
---|---|
src |
Son etiquetas que definen el conjunto de transiciones (src->dst) a las que se aplican estos atributos. Una visita a la fuente o un inicio de vehículo coinciden si su |
excluded |
Consulta los |
dst |
Una visita al destino o el final del viaje coinciden si su |
excluded |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Se expresa en la misma unidad que todos los demás costos del modelo y no debe ser negativo. Se aplica además de todos los demás costos existentes. |
cost |
Especifica un costo por kilómetro aplicado a la distancia recorrida durante esta transición. Se suma a cualquier |
distance |
Especifica un límite para la distancia recorrida durante la realización de esta transición. A partir de junio de 2021, solo se admiten límites flexibles. |
delay |
Especifica una demora que se produce cuando se realiza esta transición. Esta demora siempre ocurre después de finalizar la visita a la fuente y antes de iniciar la visita al 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 shipmentType. 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 |
incompatibility |
Es el modo que se aplica a la incompatibilidad. |
IncompatibilityMode
Son modos que definen cómo se restringe la aparición de envíos incompatibles en la misma ruta.
Enumeraciones | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidad no especificado. 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 |
Para dos envíos con tipos incompatibles con el modo de incompatibilidad
|
ShipmentTypeRequirement
Especifica los requisitos entre los envíos según su shipmentType. El modo de requisito define los detalles del requisito.
Representación JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Campos | |
---|---|
required |
Es la lista de tipos de envío alternativos que requiere |
dependent |
Todos los envíos con un tipo en el campo NOTA: No se permiten cadenas de requisitos de modo que un |
requirement |
Es el modo aplicado al requisito. |
RequirementMode
Son modos que definen la apariencia de los envíos dependientes en una ruta.
Enumeraciones | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito no especificado. 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, una recolección de envíos “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 el vehículo en el momento de la entrega. |
PrecedenceRule
Una regla de prioridad entre dos eventos (cada evento es la recolección o la entrega de un envío): el "segundo" evento debe comenzar al menos offsetDuration
después de que comenzó el "primero".
Varias prioridades pueden referirse a los mismos eventos (o relacionados), p.ej., "La recolección de B ocurre después de la entrega de A" y "la recolección de C ocurre después de la recolección de B".
Además, las prioridades 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 | |
---|---|
first |
Indica si el evento "primero" es una publicación. |
second |
Indica si el "segundo" evento es una publicación. |
offset |
Es la compensación entre el "primer" y el "segundo" evento. Puede ser negativo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
first |
Es el índice de envío del "primer" evento. Se debe especificar este campo. |
second |
Es el índice de envío del "segundo" evento. Se debe especificar este campo. |