- 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 general, que es la suma de lo siguiente:
- el costo de enrutar los vehículos (suma del costo por tiempo total, costo por tiempo de viaje y costo fijo de todos los vehículos).
- las penalizaciones de envío sin cumplir.
- el costo de la duración global de los envíos
Representación JSON |
---|
{ "shipments": [ { object ( |
Campos | |
---|---|
shipments[] |
Conjunto de envíos que se deben realizar en el modelo. |
vehicles[] |
Conjunto de vehículos que se puede usar para realizar visitas. |
globalStartTime |
Hora de inicio y finalización global 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, los valores de Cuando uses los campos Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
globalEndTime |
Si no se establece, se usa 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 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 vigente más reciente de todos los vehículos. Por ejemplo, los usuarios pueden asignar un costo por hora a esa cantidad para intentar realizar optimizaciones en función de la finalización más temprana de los trabajos. Este costo debe ser 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, en su lugar se usarán las distancias geodésicas o de Google Maps, 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 shipping_types incompatibles (consulta |
shipmentTypeRequirements[] |
Conjuntos de requisitos de |
precedenceRules[] |
Conjunto de reglas de prioridad que se deben aplicar 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. Esto se puede utilizar 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 utilizar. Debe ser estrictamente positivo. |
Envío
Es el envío de un solo artículo, desde uno de sus puntos de retiro 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 libres 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 |
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 con el envío. Si no se especifica, el vehículo solo debe visitar una ubicación que corresponda al punto de partida. |
loadDemands |
Las demandas de carga del envío (por ejemplo, peso, volumen, cantidad de palés, etcétera) Las claves en el mapa deben ser identificadores que describan el tipo de carga correspondiente; idealmente, también deben incluir 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 puede realizar este envío. Si está vacío, es posible que todos los vehículos lo hagan. Los vehículos se proporcionan según su índice en la lista |
costsPerVehicle[] |
Especifica el costo que se cobra cuando cada vehículo entrega este envío. Si se especifica, debe tener una de las siguientes opciones:
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 máximo en comparación con la ruta más corta desde el punto de partida 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, supongamos que hay un menor tiempo que lleva pasar directamente de la alternativa de retiro seleccionada a la alternativa de entrega seleccionada. Luego, cuando se configura
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/entrega. A partir de 2017/10, los desvíos solo se admiten cuando la duración de los viajes no depende de vehículos. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
pickupToDeliveryTimeLimit |
Especifica la duración máxima desde el inicio del retiro hasta 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 retiro y entrega, ni de la velocidad del vehículo. Esto se puede especificar junto con las restricciones máximas de desvío: la solución respetará ambas especificaciones. Una duración en segundos con hasta nueve dígitos decimales que terminen 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 Es diferente de |
label |
Especifica una etiqueta para este envío. Esta etiqueta aparece en la respuesta en |
ignore |
Si es verdadero, omite este envío, pero no apliques un Si ignoras un envío, se generará un error de validación cuando haya Si ignoras 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 puede expresarse en la misma unidad que se usa para todos los demás campos relacionados con los costos en el modelo y debe ser positivo. IMPORTANTE: Si no se especifica esta penalización, se considera que es infinita, es decir, se debe completar el envío. |
pickupToDeliveryRelativeDetourLimit |
Especifica el tiempo de desvío relativo máximo en comparación con la ruta más corta desde el punto de partida 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, supongamos que hay un menor tiempo que lleva pasar directamente de la alternativa de retiro seleccionada a la alternativa de entrega seleccionada. Luego, cuando se configura
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/entrega. A partir de 2017/10, los desvíos solo se admiten cuando la duración de los viajes no depende de vehículos. |
VisitRequest
Es una solicitud de visita que se puede realizar en un vehículo. Tiene una ubicación geográfica (o dos, consulta más abajo), los horarios de apertura y cierre representados por períodos de tiempo, y el tiempo de duración del servicio (el tiempo que pasa el vehículo hasta que llega a recoger o dejar la mercadería).
Representación JSON |
---|
{ "arrivalLocation": { object ( |
Campos | |
---|---|
arrivalLocation |
Es la ubicación geográfica a la que llega el vehículo cuando se realiza este |
arrivalWaypoint |
El punto de referencia al que llega el vehículo cuando realiza esta |
departureLocation |
Es la ubicación geográfica donde sale el vehículo después de completar este |
departureWaypoint |
Punto de referencia desde el que sale el vehículo después de completar esta |
tags[] |
Especifica las etiquetas adjuntas a la solicitud de visita. No se permiten cadenas vacías o duplicadas. |
timeWindows[] |
Son las ventanas de tiempo que restringen la hora de llegada a una visita. Ten en cuenta que un vehículo puede salir fuera del período de llegada, es decir, no es necesario que la hora de llegada y la duración estén dentro del margen de tiempo establecido. Es posible que se genere tiempo de espera si el vehículo llega antes del La ausencia de Los períodos de tiempo deben ser inconexos, es decir, ningún período debe superponerse ni ser adyacente a otro, y deben estar en orden creciente.
|
duration |
La duración de la visita, es decir, el tiempo que pasa el vehículo entre la llegada y la salida (se agrega al posible tiempo de espera; consulta Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
cost |
Costo de mantenimiento de esta solicitud de visita en una ruta para vehículos. Se puede usar para pagar diferentes costos por cada retiro alternativo o entrega de un envío. Este costo debe ser la misma unidad que |
loadDemands |
Carga las demandas de esta solicitud de visita. Es similar al campo Es un objeto que contiene una lista de pares |
visitTypes[] |
Especifica los tipos de visitas. Esto se puede usar para asignar tiempo adicional que se requiere 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]. |
Waypoint
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 finalización 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 la preferencia de que el vehículo se detenga en un lado particular de la ruta. Cuando estableces este valor, la ruta pasará por la ubicación para que el vehículo pueda detenerse en el costado de la ruta en el que se encuentra sesgada desde el centro de la ruta. Esta opción no funciona para el medio de transporte "WALKING". |
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 mediante coordenadas geográficas con un encabezado opcional. |
placeId |
Es 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 | |
---|---|
latLng |
Las coordenadas geográficas del punto de referencia. |
heading |
Indica la orientación según la brújula asociada con la dirección del flujo del tráfico. Este valor se utiliza para especificar el lado de la ruta que se usará para el punto de partida y el destino. Los valores de encabezado pueden ser de 0 a 360, donde 0 especifica la orientación hacia el norte, 90 indica la orientació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 las horas de inicio y finalización de un vehículo.
Los límites de ventana 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 de la ventana de tiempo flexible, softStartTime
, expresa una preferencia para que el evento ocurra a partir de softStartTime
, ya que incurre en un costo proporcional al tiempo antes de softStartTime que ocurra el evento. El límite superior de la ventana de tiempo flexible, softEndTime
, expresa una preferencia para que el evento ocurra a partir del softEndTime
o antes, ya que incurre en un costo proporcional al tiempo después de que ocurre el evento softEndTime
. 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 difícil. Si no se especifica, se establecerá en Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
endTime |
La hora de finalización del período difícil Si no se especifica, se establecerá en Una marca de tiempo en formato RFC3339 UTC “Zulú”, con 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 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 resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
costPerHourBeforeSoftStartTime |
Un costo por hora agregado a otros costos en el modelo si el evento ocurre antes de softStartTime, calculado de la siguiente manera:
Este costo debe ser positivo y el campo solo se puede configurar si se configuró softStartTime. |
costPerHourAfterSoftEndTime |
Un costo por hora agregado 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 configuró |
Vehículo
Modela un vehículo con un problema de envío. Si resuelves un problema de envío, se creará una ruta para este vehículo que comienza en startLocation
y finaliza en endLocation
. 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 |
El medio de transporte que afecta las rutas utilizables por el vehículo y su velocidad. Consulta también |
startLocation |
Es la ubicación geográfica donde comienza el vehículo antes de retirar cualquier envío. Si no se especifica, el vehículo comienza en su primera partida. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
startWaypoint |
Punto de referencia que representa una ubicación geográfica donde comienza el vehículo antes de recoger cualquier envío. Si no se especifica |
endLocation |
Es la ubicación geográfica donde termina el vehículo después de completar su último |
endWaypoint |
Punto de referencia que representa una ubicación geográfica donde termina el vehículo después de completar su último |
startTags[] |
Especifica las etiquetas adjuntas al comienzo 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 cumplir con los límites de tiempo globales (consulta los campos Las ventanas temporales que pertenecen al mismo campo repetido deben ser inconexas, es decir, ninguna ventana de tiempo 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 la ubicación de destino. Deben cumplir con los límites de tiempo globales (consulta los campos Las ventanas temporales que pertenecen al mismo campo repetido deben ser inconexas, es decir, ninguna ventana de tiempo puede superponerse o ser adyacente a otro, y deben estar en orden cronológico.
|
unloadingPolicy |
Se aplicó una política de descarga en el vehículo. |
loadLimits |
Capacidades del vehículo (por ejemplo, peso, volumen y cantidad de palés) 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 del vehículo: Todos los costos se suman y deben estar en la misma unidad que Costo por hora de la ruta del vehículo. Este costo se aplica al tiempo total que ocupa la ruta e incluye el tiempo de viaje, el tiempo de espera y el tiempo de visita. El uso de |
costPerTraveledHour |
Costo por hora recorrida de la ruta del vehículo. Este costo solo se aplica al tiempo de viaje que ocupa la ruta (es decir, el que se registró en |
costPerKilometer |
Costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en |
fixedCost |
Se aplica un costo fijo si se usa este vehículo para realizar un envío. |
usedIfRouteIsEmpty |
Este campo solo se aplica a los vehículos cuando su ruta no realiza 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 partida hasta su ubicación final, incluso si no realiza ningún envío, y se tienen en cuenta los costos de tiempo y distancia resultantes del viaje hasta el final. De lo contrario, no se desplaza desde su ubicación de partida hasta su ubicación de finalización, y no se programaron |
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 objeto |
extraVisitDurationForVisitType |
Especifica un mapa de cadenas visitTypes a duraciones. La duración es el tiempo adicional al que se realizará 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á de manera forzosa 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 se realiza un envío en Si un vehículo ignorado se realiza un envío 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, este vehículo es más lento y tiene tiempos de viaje que son el doble de los de los vehículos estándar. Esta acción múltiple no afecta la duración de las visitas. Esto 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 múltiplo pequeño puede producir una pérdida de precisión. Consulta también |
TravelMode
Medios de transporte que pueden usar los vehículos.
Estos deben ser un subconjunto de los medios de transporte de la API de Routes Preferred de Google Maps Platform. Consulta https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enumeradores | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Medio de transporte no especificado, que equivale a DRIVING . |
DRIVING |
Medio de transporte correspondiente a las indicaciones en automóvil (automóvil, etc.). |
WALKING |
Modo de viaje correspondiente a las instrucciones sobre cómo llegar a pie |
UnloadingPolicy
Política sobre cómo se puede descargar un vehículo. Se aplica únicamente a los envíos que ofrecen retiro y entrega.
Otros envíos son gratuitos en cualquier lugar de la ruta, independientemente de unloadingPolicy
.
Enumeradores | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada; las entregas deben realizarse después de su recogida correspondiente. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en el orden inverso a los retiros. |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las 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 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 máxima de carga 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 máxima aceptable. 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 la 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 en conjunto el umbral de límite flexible 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 terminen 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 terminen en " |
quadraticSoftMaxDuration |
Un límite flexible no aplica un límite de duración máxima, pero cuando se infringe, la ruta genera un costo cuadrático de 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 terminen 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 0 si la duración es inferior al umbral. De lo contrario, depende de la duración de la siguiente manera:
El costo no debe ser negativo. |
DistanceLimit
Un límite que define la distancia máxima que se puede recorrer. Puede ser duro o blando.
Si defines un límite flexible, se deben definir tanto softMaxMeters
como costPerKilometerAboveSoftMax
, y estos no deben ser negativos.
Representación JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Campos | |
---|---|
maxMeters |
Un límite estricto que restringe la distancia a un máximo de maxMeters El límite no debe ser negativo. |
softMaxMeters |
Un límite flexible no aplica un límite de distancia máximo, 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, este debe ser menor que maxMeters y no debe ser negativo. |
costPerKilometerAboveSoftMax |
Costo por kilómetro acumulado si la distancia supera el límite de
El costo no debe ser negativo. |
BreakRule
Reglas para generar pausas para un vehículo (p.ej., horarios para almorzar). Una pausa es un período continuo durante el cual el vehículo permanece inactivo en su posición actual y no puede realizar ninguna visita. Puede producirse una pausa:
- durante el viaje entre dos visitas (que incluye el tiempo justo antes o justo después de una visita, pero no en el medio de una visita), en cuyo caso se extiende el tiempo en tránsito correspondiente entre las visitas
- o antes de arrancar (el vehículo podría no arrancar en medio de una pausa), en cuyo caso no afectará el tiempo de inicio.
- o después de la finalización del vehículo (con la hora de finalización del vehículo).
Representación JSON |
---|
{ "breakRequests": [ { object ( |
Campos | |
---|---|
breakRequests[] |
La secuencia de las pausas. Revisa el mensaje |
frequencyConstraints[] |
Es posible que se apliquen varios |
BreakRequest
Se debe conocer de antemano la secuencia de descansos (es decir, su número y orden) que se aplican a cada vehículo. Los elementos 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á verificado).
Representación JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Campos | |
---|---|
earliestStartTime |
Obligatorio. Límite inferior (inclusivo) al comienzo del descanso. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
latestStartTime |
Obligatorio. Límite superior (inclusivo) al comienzo del descanso. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con 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 terminen en " |
FrequencyConstraint
Se puede restringir aún más la frecuencia y la duración de las pausas especificadas anteriormente aplicando 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 “Dentro de una ventana de tiempo variable de 12 h, debe haber al menos una pausa de al menos una hora”, ese ejemplo se traduciría a la 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 ya especificadas en el BreakRequest
.
En la práctica, se puede aplicar un FrequencyConstraint
a pausas no consecutivas. Por ejemplo, la siguiente programación 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 | |
---|---|
minBreakDuration |
Obligatorio. 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 terminen en " |
maxInterBreakDuration |
Obligatorio. El intervalo máximo permitido de cualquier intervalo de tiempo de la ruta que no incluya, al menos, una pausa de Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
DurationDistanceMatrix
Especifica una matriz de duración y distancia desde las ubicaciones de partida de las visitas y los vehículos hasta las ubicaciones de las visitas y de salida de vehículos.
Representación JSON |
---|
{
"rows": [
{
object ( |
Campos | |
---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener tantos elementos como |
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 partida de vehículo debe coincidir exactamente con una matriz, es decir, uno de los 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 de una fila determinada. Debe tener tantos elementos como Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
meters[] |
Valores de distancia para una fila determinada. Si ningún costo o restricción hace referencia a las distancias en el modelo, este campo puede quedar vacío; de lo contrario, debe tener tantos elementos como |
TransitionAttributes
Especifica los atributos de las transiciones entre dos visitas consecutivas de una ruta. Se pueden aplicar varias 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 de “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 un inicio de un vehículo coinciden si su |
excludedSrcTag |
Consulta los |
dstTag |
Una visita a destino o un final de vehículo coincide si su |
excludedDstTag |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Está en la misma unidad que todos los demás costos del modelo y no debe ser negativo. Se aplica sobre todos los demás costos existentes. |
costPerKilometer |
Especifica un costo por kilómetro aplicado a la distancia recorrida durante esta transición. Suma a cualquier |
distanceLimit |
Especifica un límite en 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 cuando se realiza esta transición. Esta demora siempre ocurre después de que finaliza la visita de origen y antes de comenzar la visita de destino. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
ShipmentTypeIncompatibility
Especifica las incompatibilidades entre los envíos según su tipo de envío. La apariencia 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[] |
Lista de tipos incompatibles. Dos envíos con |
incompatibilityMode |
Se aplicó el modo a la incompatibilidad. |
IncompatibilityMode
Medios que definen la restricción de apariencia de envíos incompatibles en la misma ruta
Enumeradores | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidad no especificado. Este valor nunca debe usarse. |
NOT_PERFORMED_BY_SAME_VEHICLE |
De 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 en función de su tipo de envío. El modo de requisitos define los detalles del requisito.
Representación JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Campos | |
---|---|
requiredShipmentTypeAlternatives[] |
Lista de tipos de envío alternativos que requiere la |
dependentShipmentTypes[] |
Todos los envíos con un tipo en el campo NOTA: No se permiten cadenas de requisitos en las que un |
requirementMode |
Modo aplicado al requisito. |
RequirementMode
Medios que definen la apariencia de los envíos dependientes en una ruta
Enumeradores | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
No se especificó el modo de requisitos. 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 incluir:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Es igual que antes, excepto que los envíos “dependientes” deben tener un envío “obligatorio” en su vehículo al 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" evento debe comenzar al menos offsetDuration
después de que haya comenzado el "primero".
Varias prioridades pueden hacer referencia a los mismos eventos (o relacionados), p.ej., “el retiro de B ocurre después de la entrega de A” y “el retiro de C ocurre después de la entrega de B”.
Además, las prioridades solo se aplican cuando se realizan ambos envíos y se ignoran.
Representación JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Campos | |
---|---|
firstIsDelivery |
Indica si el "primer" evento es una entrega. |
secondIsDelivery |
Indica si el "segundo" evento es una entrega. |
offsetDuration |
El desplazamiento entre el "primer" y el "segundo" evento Puede ser negativo. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
firstIndex |
Índice de envío del "primer" evento. Se debe especificar este campo. |
secondIndex |
Índice de envío del evento "segundo". Se debe especificar este campo. |