- Representación JSON
- Envío
- VisitRequest
- LatLng
- Punto de referencia
- Ubicación
- TimeWindow
- Vehículo
- TravelMode
- 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 un conjunto de vehículos debe realizar y, al mismo tiempo, minimiza el costo total, que es la suma de lo siguiente:
- el costo de la planificación de ruta de los vehículos (suma del costo por tiempo total, costo por tiempo de viaje y costo fijo para todos los vehículos).
- las penalizaciones por envíos no cumplidos.
- el costo de la duración global de los envíos
Representación JSON |
---|
{ "shipments": [ { object ( |
Campos | |
---|---|
shipments[] |
Conjunto de envíos que deben realizarse en el modelo. |
vehicles[] |
Es el conjunto de vehículos que se pueden usar para realizar visitas. |
globalStartTime |
Hora de inicio y finalización globales del modelo: Ninguna hora fuera de este rango puede considerarse válida. El intervalo de tiempo del modelo debe ser inferior a un año, es decir, el 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: |
globalEndTime |
Si no la estableces, se usará como valor predeterminado 00:00:00 UTC, 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: |
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 reciente de todos los vehículos. Por ejemplo, los usuarios pueden asignar un costo por hora a esa cantidad para intentar optimizar la finalización del trabajo lo antes posible. El 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 Google Maps o distancias geodésicas, según el valor del campo Ejemplos de uso:
|
durationDistanceMatrixSrcTags[] |
Etiquetas que definen las fuentes de las matrices de duración y distancia; Las etiquetas corresponden a |
durationDistanceMatrixDstTags[] |
Etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transitionAttributes[] |
Atributos de transición agregados al modelo. |
shipmentTypeIncompatibilities[] |
Conjuntos de opciones de envío incompatibles (consulte |
shipmentTypeRequirements[] |
Conjuntos de requisitos |
precedenceRules[] |
Conjunto de reglas de precedencia que deben aplicarse en el modelo. |
maxActiveVehicles |
Restringe la cantidad máxima de vehículos activos. Un vehículo está activo si su ruta realiza al menos un envío. Se puede utilizar para limitar la cantidad de rutas en los casos en que haya menos conductores que vehículos y la flota de vehículos sea heterogénea. 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 retiros hasta uno 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 según corresponda) y, luego, visitar una de sus ubicaciones de entrega más adelante (y, por lo tanto, volver a aumentar sus capacidades libres según corresponda).
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 un conjunto de alternativas de retiro asociadas con el envío. Si no se especifica, el vehículo solo deberá visitar la ubicación correspondiente a la entrega. |
deliveries[] |
Es un conjunto de alternativas de entrega asociadas con el envío. Si no se especifica, el vehículo solo debe visitar una ubicación correspondiente a los puntos de partida. |
loadDemands |
Las demandas de carga 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, idealmente que también incluya 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. Es un objeto que contiene una lista de pares |
allowedVehicleIndices[] |
Es el conjunto de vehículos que pueden realizar este envío. Si está vacía, es posible que todos los vehículos la utilicen. Los vehículos se proporcionan según su índice en la lista |
costsPerVehicle[] |
Especifica el costo que se genera cuando cada vehículo entrega este envío. Si se especifica, debe tener:
Estos costos deben estar en la misma unidad que |
costsPerVehicleIndices[] |
Índices de los vehículos a los que se aplica |
pickupToDeliveryAbsoluteDetourLimit |
Especifica el tiempo de desvío absoluto máximo en comparación con la ruta más corta desde el retiro hasta la entrega. Si se especifica, no debe ser negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, que sea el tiempo más corto necesario para pasar de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, configurar
Si se especifican límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par posible de retiro y entrega. A partir de 2017/2010, los desvíos solo se admiten cuando la duración de los viajes no depende 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 del retiro hasta el inicio de la entrega de un envío. Si se especifica, no debe ser negativo, y el envío debe contener al menos un retiro y una entrega. Esto no depende de qué alternativas se seleccionen 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 “ |
shipmentType |
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 del |
ignore |
Si esta preferencia se establece como "true", omitir este envío, pero no apliques Ignorar un envío genera un error de validación cuando hay cualquier Se permite ignorar un envío realizado 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 costos en el modelo y debe ser positivo. IMPORTANTE: Si no se especifica esta penalización, se considera infinita, es decir, debe completarse el envío. |
pickupToDeliveryRelativeDetourLimit |
Especifica el tiempo de desvío relativo máximo en comparación con la ruta más corta desde el retiro hasta la entrega. Si se especifica, no debe ser negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, que sea el tiempo más corto necesario para pasar de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, configurar
Si se especifican límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par posible de retiro y entrega. A partir de 2017/2010, los desvíos solo se admiten cuando la duración de los viajes no depende de los vehículos. |
VisitRequest
Solicitud de una visita que se puede realizar desde un vehículo: tiene una ubicación geográfica (o dos, ver a continuación), horarios de apertura y cierre representados por períodos, y un tiempo de duración del servicio (tiempo que pasa el vehículo una vez que llega a retirar o dejar productos).
Representación JSON |
---|
{ "arrivalLocation": { object ( |
Campos | |
---|---|
arrivalLocation |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta |
arrivalWaypoint |
Es el punto de referencia al que llega el vehículo cuando realiza este |
departureLocation |
La ubicación geográfica donde sale el vehículo después de completar este |
departureWaypoint |
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 o duplicadas. |
timeWindows[] |
Ventanas de tiempo que limitan la hora de llegada a una visita. Ten en cuenta que un vehículo podría salir fuera del horario de llegada; es decir, no es necesario que la hora de llegada y la duración estén dentro de un período establecido. Esto puede generar tiempo de espera si el vehículo llega antes de las La ausencia de Los períodos deben ser inconexos, es decir, no deben superponerse ni ser adyacentes a otros, y deben estar en orden creciente.
|
duration |
Duración de la visita, es decir, el tiempo que pasa el vehículo 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 del servicio de esta solicitud de visita en una ruta vehicular. Se puede usar para pagar diferentes costos por cada retiro o entrega alternativo de un envío. Este costo debe estar en la misma unidad que |
loadDemands |
Cargar demandas de esta solicitud de visita. Es similar al campo Es un objeto que contiene una lista de pares |
visitTypes[] |
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 dobles para representar la latitud en grados y la longitud en grados. 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, así como las ubicaciones de partida y llegada de los Vehículos.
Representación JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Campos | |
---|---|
sideOfRoad |
Opcional. Indica que la ubicación de este punto de referencia tiene preferencia para que el vehículo se detenga en un lado en particular de la ruta. Si estableces 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 segmenta la ubicación desde el centro de la ruta. Esta opción no funciona para “WALKING” medio de transporte. |
Campo de unión location_type . Diferentes maneras de representar una ubicación. Las direcciones (location_type ) solo pueden ser una de las siguientes opciones: |
|
location |
Es un punto que se especifica mediante coordenadas geográficas y que incluye una orientación opcional. |
placeId |
Es el ID del lugar de interés asociado con el punto de referencia. |
Ubicación
Encapsula una ubicación (un punto geográfico y una orientación opcional).
Representación JSON |
---|
{
"latLng": {
object ( |
Campos | |
---|---|
latLng |
Las coordenadas geográficas del punto de referencia. |
heading |
Orientación según la brújula asociada a la dirección del flujo del tráfico. Este valor se usa para especificar el lado de la ruta que se usará para la partida y el destino. Los valores de encabezado pueden variar de 0 a 360, donde 0 especifica la orientación hacia el norte, el 90 especifica la orientación hacia el este, etc. |
TimeWindow
Las ventanas de tiempo limitan 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íodos de tiempo estricto, startTime
y endTime
, aplican la hora más temprana y más reciente del evento, de modo que startTime <= event_time <=
endTime
. El límite inferior del período flexible, softStartTime
, expresa una preferencia para que el evento ocurra en softStartTime
o después de esta si incurre en un costo proporcional al tiempo antes de que se produzca el evento softStartTime. El límite superior del período flexible, softEndTime
, expresa una preferencia para que el evento ocurra a las softEndTime
o antes de esa fecha, ya que incurre en un costo proporcional al tiempo que pasa después del softEndTime
en el 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 respetar lo siguiente:
0 <= `startTime` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
Representación JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Campos | |
---|---|
startTime |
La hora de inicio del período de tiempo real. Si no se especifica, se configurará como Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
endTime |
Es la hora de finalización del período de tiempo real. Si no se especifica, se configurará como Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
softStartTime |
La hora de inicio suave 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: |
softEndTime |
La hora de finalización suave 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: |
costPerHourBeforeSoftStartTime |
Un costo por hora que se agrega a otros costos en el modelo si el evento ocurre antes de softStartTime, que se calcula de la siguiente manera:
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró softStartTime. |
costPerHourAfterSoftEndTime |
Un costo por hora agregado a otros costos en el modelo si el evento ocurre después del
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró |
Vehículo
Modela 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 finalizará a las endLocation
para este vehículo. Una ruta es una secuencia de visitas (consulta ShipmentRoute
).
Representación JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Campos | |
---|---|
displayName |
El nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travelMode |
Indica el medio de transporte que afecta las rutas que utiliza el vehículo y su velocidad. Consulta también |
startLocation |
Es la ubicación geográfica donde se inicia el vehículo antes de recoger cualquier envío. Si no se especifica, el vehículo inicia en el primer lugar de partida. 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 donde el vehículo comienza antes de recoger cualquier envío. Si no se especifica |
endLocation |
Ubicación geográfica donde finaliza el vehículo después de completar su último |
endWaypoint |
Punto de referencia que representa una ubicación geográfica en la que finaliza el vehículo 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 o duplicadas. |
endTags[] |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías o duplicadas. |
startTimeWindows[] |
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 inconexos, es decir, ningún período puede superponerse o ser adyacente a otro, y deben estar en orden cronológico.
|
endTimeWindows[] |
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 inconexos, es decir, ningún período puede superponerse o ser adyacente a otro, y deben estar en orden cronológico.
|
unloadingPolicy |
Se aplica una política de descarga en el vehículo. |
loadLimits |
Capacidades del vehículo (peso, volumen, cantidad de palés, por ejemplo) Las claves del mapa son los identificadores del tipo de carga, coherentes con las claves del campo Es un objeto que contiene una lista de pares |
costPerHour |
Costos de los vehículos: 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 toma la ruta y comprende el tiempo de viaje, de espera y de la visita. Usar |
costPerTraveledHour |
Es el costo por hora recorrida de la ruta del vehículo. Este costo se aplica solo al tiempo de viaje de la ruta (es decir, el que se informa en |
costPerKilometer |
Costo por kilómetro de la ruta vehicular Este costo se aplica a la distancia informada en el |
fixedCost |
Se aplica un costo fijo si este vehículo se usa para gestionar un envío. |
usedIfRouteIsEmpty |
Este campo solo se aplica a vehículos cuando en su ruta no se hacen envíos. Indica si el vehículo se debe considerar como usado o no en este caso. Si es verdadero, el vehículo va desde la ubicación de partida hasta la de finalización, incluso si no entrega envíos, y los costos de tiempo y distancia que resultan de su inicio. --> al final del viaje se tienen en cuenta. De lo contrario, no viaja desde su ubicación de inicio hasta su ubicación de finalización, y no hay |
routeDurationLimit |
El límite se aplica a la duración total de la ruta del vehículo. En un |
travelDurationLimit |
El límite se aplica a la duración del viaje de la ruta del vehículo. En un |
routeDistanceLimit |
El límite se aplica a la distancia total de la ruta del vehículo. En un |
extraVisitDurationForVisitType |
Especifica un mapa de las cadenas visitTypes a las duraciones. La duración es el tiempo adicional que se toma en Si una solicitud de visita tiene varios tipos, se agregará una duración para cada tipo en el mapa. Es un objeto que contiene una lista de pares |
breakRule |
Describe el programa de descanso que se aplicará en este vehículo. Si está vacía, 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 vehículo ignorado en |
travelDurationMultiple |
Especifica un factor multiplicativo que se puede usar para aumentar o reducir los tiempos de viaje del vehículo. Por ejemplo, establecer este valor en 2.0 significa que este vehículo es más lento y tiene tiempos de viaje que son el doble de los que tienen los vehículos estándar. Esta cantidad múltiple no afecta la duración 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 que se aplique este múltiplo, pero antes de realizar cualquier operación numérica, por lo tanto, un pequeño múltiplo puede generar una pérdida de precisión. Consulta también |
TravelMode
Son los medios de transporte que pueden utilizar los vehículos.
Deben ser un subconjunto de los medios de transporte de la API de Google Maps Platform Routes Preferred. Consulta: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enumeraciones | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Medio de transporte no especificado, equivalente a DRIVING . |
DRIVING |
Es el medio de transporte correspondiente a la ruta en auto (automóvil, ...). |
WALKING |
Medio de transporte correspondiente a las instrucciones sobre cómo llegar a pie. |
UnloadingPolicy
Política sobre cómo se puede descargar un vehículo. Se aplica solo a los envíos que tengan retiro y entrega.
Otros envíos son gratuitos para realizarse en cualquier lugar de la ruta, independientemente de unloadingPolicy
.
Enumeraciones | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada; las entregas deben ocurrir después de sus retiros correspondientes. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en orden inverso al de retiro |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que los retiros |
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 |
Un límite flexible de la carga Consulta los |
costPerUnitAboveSoftMax |
Si en algún momento la carga supera los |
startLoadInterval |
El intervalo de carga aceptable del vehículo al comienzo de la ruta. |
endLoadInterval |
El intervalo de carga aceptable del vehículo al final de la ruta. |
maxLoad |
La cantidad de carga máxima aceptable. |
Intervalo
Intervalo de cantidades de carga aceptables
Representación JSON |
---|
{ "min": string, "max": string } |
Campos | |
---|---|
min |
Una carga mínima aceptable Debe ser mayor o igual que 0. Si se especifican ambos, |
max |
Una carga aceptable máxima Debe ser mayor o igual que 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 dura o blanda.
Cuando se define un campo de límite flexible, se deben definir juntos el umbral de máx. rendimiento y su costo asociado.
Representación JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Campos | |
---|---|
maxDuration |
Un límite estricto que restringe la duración a maxDuration como máximo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
softMaxDuration |
Un límite flexible no aplica un límite de duración máxima, pero, cuando se infringe, la ruta genera 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 |
Un límite flexible que no aplica un límite de duración máxima, pero, cuando se infringe, genera un costo cuadrático en la duración de la ruta. 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 |
Costo por hora generado si se infringe el umbral de
El costo no debe ser negativo. |
costPerSquareHourAfterQuadraticSoftMax |
Costo por hora cuadrada que se genera si se infringe el umbral de El costo adicional es de 0 si la duración está por debajo del umbral. De lo contrario, dependerá de la duración de la siguiente manera:
El costo no debe ser negativo. |
DistanceLimit
Es un límite que define una distancia máxima que se puede recorrer. Puede ser dura o blanda.
Si se define un límite flexible, se deben definir tanto softMaxMeters
como costPerKilometerAboveSoftMax
, y no deben ser negativos.
Representación JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Campos | |
---|---|
maxMeters |
Un límite estricto que restringe la distancia para que sea como máximo maxMeters. El límite no debe ser negativo. |
softMaxMeters |
Un límite flexible no aplica un límite de distancia máxima, pero, cuando se infringe, 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. |
costPerKilometerAboveSoftMax |
Costo por kilómetro generado si la distancia supera el límite de
El costo no debe ser negativo. |
BreakRule
Son las reglas para generar descansos para un vehículo (p.ej., las horas de 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. Es posible que se produzca una ruptura:
- durante el viaje entre dos visitas (lo que incluye el tiempo justo antes o después de una visita, pero no en medio de ella), en cuyo caso se extiende el tiempo en tránsito correspondiente entre las visitas
- o antes del arranque del vehículo (es posible que no se encienda en medio de una pausa), en cuyo caso esto no afecta la hora de inicio del vehículo.
- o después de que finaliza el vehículo (dito, con la hora de finalización del vehículo).
Representación JSON |
---|
{ "breakRequests": [ { object ( |
Campos | |
---|---|
breakRequests[] |
Secuencia de pausas. Lee el mensaje |
frequencyConstraints[] |
Es posible que se apliquen varias |
BreakRequest
La secuencia de descansos (es decir, el número y el orden) que corresponden a cada vehículo debe conocerse de antemano. Los objetos 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 pedido (esto está marcado).
Representación JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Campos | |
---|---|
earliestStartTime |
Obligatorio. Límite inferior (inclusivo) al 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: |
latestStartTime |
Obligatorio. Límite superior (inclusivo) al 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: |
minDuration |
Obligatorio. 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 mediante la aplicación de una frecuencia de pausa mínima, como "Debe haber una pausa de al menos 1 hora cada 12 horas". Si suponemos que esto se puede interpretar como "En cualquier período variable de 12 h, debe haber al menos una pausa de, al menos, una hora". Ese ejemplo se traduciría de la siguiente manera: 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 ya especificadas en el BreakRequest
.
En la práctica, puede aplicarse una FrequencyConstraint
a las pausas no consecutivas. Por ejemplo, el siguiente programa respeta el horario que indica "1 h cada 12 h". ejemplo:
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. Duración mínima de la pausa para esta restricción. No es negativo. Consulta la descripción de Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
maxInterBreakDuration |
Obligatorio. Intervalo máximo permitido de cualquier intervalo de tiempo en la ruta que no incluye, al menos, 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 la visita y las ubicaciones de partida del vehículo para visitar, así como las ubicaciones de finalización 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 |
vehicleStartTag |
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[] |
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 ningún costo o restricción se refiere a las distancias en el modelo, puede dejarse vacío. De lo contrario, debe tener tantos elementos como |
TransitionAttributes
Especifica atributos de 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 estrictos (según la semántica natural “AND”).
Representación JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Campos | |
---|---|
srcTag |
Etiquetas que definen el conjunto de transiciones (src->dst) a las que se aplican estos atributos. Una visita de origen o el inicio del vehículo coincide si su |
excludedSrcTag |
Consulta los |
dstTag |
Una visita de destino o la finalización de un vehículo coinciden si su |
excludedDstTag |
Consulta los |
cost |
Especifica un costo por realizar esta transición. Se encuentra en la misma unidad que todos los demás costos del modelo y no debe ser negativo. Este importe se suma a todos los demás costos existentes. |
costPerKilometer |
Especifica un costo por kilómetro aplicado a la distancia recorrida mientras se realiza esta transición. Suma cualquier |
distanceLimit |
Especifica un límite para la distancia recorrida mientras se realiza esta transición. A partir de 2021/06, solo se admiten límites flexibles. |
delay |
Especifica un retraso generado al realizar esta transición. Esta demora siempre ocurre después de terminar 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 envíos según su tipo de envío. La aparición de envíos incompatibles en la misma ruta se restringe en función del modo de incompatibilidad.
Representación JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Campos | |
---|---|
types[] |
Lista de tipos incompatibles. Dos envíos con un |
incompatibilityMode |
Se aplicó el modo a la incompatibilidad. |
IncompatibilityMode
Modos que definen cómo se restringen los envíos incompatibles en la misma ruta.
Enumeraciones | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
No se especificó el modo de incompatibilidad. 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 envíos según su tipo de envío. Los detalles del requisito se definen en función del modo de requisitos.
Representación JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Campos | |
---|---|
requiredShipmentTypeAlternatives[] |
Lista de tipos de envío alternativos que requiere |
dependentShipmentTypes[] |
Todos los envíos con un tipo indicado en el campo NOTA: No se permiten cadenas de requisitos en las que un |
requirementMode |
Se aplica el modo al requisito. |
RequirementMode
Modos que definen el aspecto de envíos dependientes en una ruta.
Enumeraciones | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisitos no especificado. Este valor nunca debe usarse. |
PERFORMED_BY_SAME_VEHICLE |
En este modo, todo "dependiente" los envíos deben compartir el mismo vehículo que al menos uno de sus entre los envíos. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con el modo Un “dependiente” por lo tanto, el retiro del envío debe tener:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Igual que antes, excepto la cuenta "dependiente" los envíos deben tener un envío en su vehículo en el momento de la entrega. |
PrecedenceRule
Una regla de prioridad entre dos eventos (cada evento es el retiro o la entrega de un envío): el "segundo" el evento debe comenzar, al menos, offsetDuration
después de "primero". ha empezado.
Varias prioridades pueden referirse a los mismos eventos (o relacionados), p.ej., "el retiro de B se produce después de la entrega de A". y "el retiro de C ocurre después del retiro de B".
Además, las prioridades solo se aplican cuando se realizan ambos envíos y se ignoran de otra forma.
Representación JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Campos | |
---|---|
firstIsDelivery |
Indica si el "primer" el evento es una entrega. |
secondIsDelivery |
Indica si el "segundo" el evento es una entrega. |
offsetDuration |
El desplazamiento entre los "primeros" y "second" para cada evento. Puede ser negativo. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
firstIndex |
Índice de envío del “primer” para cada evento. Se debe especificar este campo. |
secondIndex |
Índice de envío del "segundo" para cada evento. Se debe especificar este campo. |