Índice
RouteOptimization
(interfaz)AggregatedMetrics
(mensaje)BatchOptimizeToursMetadata
(mensaje)BatchOptimizeToursRequest
(mensaje)BatchOptimizeToursRequest.AsyncModelConfig
(mensaje)BatchOptimizeToursResponse
(mensaje)BreakRule
(mensaje)BreakRule.BreakRequest
(mensaje)BreakRule.FrequencyConstraint
(mensaje)DataFormat
(enumeración)DistanceLimit
(mensaje)GcsDestination
(mensaje)GcsSource
(mensaje)InjectedSolutionConstraint
(mensaje)InjectedSolutionConstraint.ConstraintRelaxation
(mensaje)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
(mensaje)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
(enumeración)InputConfig
(mensaje)Location
(mensaje)OptimizeToursRequest
(mensaje)OptimizeToursRequest.SearchMode
(enumeración)OptimizeToursRequest.SolvingMode
(enumeración)OptimizeToursResponse
(mensaje)OptimizeToursResponse.Metrics
(mensaje)OptimizeToursValidationError
(mensaje)OptimizeToursValidationError.FieldReference
(mensaje)OutputConfig
(mensaje)RouteModifiers
(mensaje)Shipment
(mensaje)Shipment.Load
(mensaje)Shipment.VisitRequest
(mensaje)ShipmentModel
(mensaje)ShipmentModel.DurationDistanceMatrix
(mensaje)ShipmentModel.DurationDistanceMatrix.Row
(mensaje)ShipmentModel.PrecedenceRule
(mensaje)ShipmentRoute
(mensaje)ShipmentRoute.Break
(mensaje)ShipmentRoute.EncodedPolyline
(mensaje)ShipmentRoute.Transition
(mensaje)ShipmentRoute.VehicleLoad
(mensaje)ShipmentRoute.Visit
(mensaje)ShipmentTypeIncompatibility
(mensaje)ShipmentTypeIncompatibility.IncompatibilityMode
(enumeración)ShipmentTypeRequirement
(mensaje)ShipmentTypeRequirement.RequirementMode
(enumeración)SkippedShipment
(mensaje)SkippedShipment.Reason
(mensaje)SkippedShipment.Reason.Code
(enumeración)TimeWindow
(mensaje)TransitionAttributes
(mensaje)Vehicle
(mensaje)Vehicle.DurationLimit
(mensaje)Vehicle.LoadLimit
(mensaje)Vehicle.LoadLimit.Interval
(mensaje)Vehicle.TravelMode
(enumeración)Vehicle.UnloadingPolicy
(enumeración)Waypoint
(mensaje)
RouteOptimization
Un servicio para optimizar los recorridos en vehículos.
Validez de ciertos tipos de campos:
google.protobuf.Timestamp
- Los horarios se expresan en tiempo Unix: segundos desde 1970-01-01T00:00:00+00:00.
- segundos debe estar en [0, 253402300799], es decir, en [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos se debe desactivar o establecer en 0.
google.protobuf.Duration
- segundos debe estar en [0, 253402300799], es decir, en [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos se debe desactivar o establecer en 0.
google.type.LatLng
- la latitud debe estar entre [-90.0, 90.0].
- debe estar en [-180.0, 180.0].
- al menos uno de los valores de latitud y longitud debe ser distinto de cero.
BatchOptimizeTours |
---|
Optimiza los recorridos de vehículos para uno o más mensajes de Este método es una operación de larga duración (LRO). Las entradas para la optimización ( El usuario puede sondear Si el campo Si el campo
|
OptimizeTours |
---|
Envía un Un modelo El objetivo es proporcionar una asignación de
|
AggregatedMetrics
Métricas agregadas de ShipmentRoute
(resp. por OptimizeToursResponse
para todos los elementos Transition
o Visit
(resp. de todos los ShipmentRoute
).
Campos | |
---|---|
performed_shipment_count |
Cantidad de envíos realizados. Ten en cuenta que un par de retiro y entrega solo se registra una vez. |
travel_duration |
Duración total del viaje de una ruta o una solución. |
wait_duration |
Duración de espera total de una ruta o una solución. |
delay_duration |
Es la duración total de la demora de una ruta o una solución. |
break_duration |
Es la duración total de la pausa de una ruta o una solución. |
visit_duration |
Duración total de las visitas de una ruta o una solución. |
total_duration |
La duración total debe ser igual a la suma de todas las duraciones anteriores. En el caso de las rutas, también corresponde a lo siguiente:
|
travel_distance_meters |
Distancia de viaje total para una ruta o una solución. |
max_loads |
Carga máxima alcanzada en toda la ruta (solución correspondiente), para cada una de las cantidades en esta ruta (solución correspondiente), calculada como el máximo de todos los |
BatchOptimizeToursMetadata
Este tipo no tiene campos.
Metadatos de la operación para las llamadas de BatchOptimizeToursRequest
BatchOptimizeToursRequest
Solicitud para optimizar por lotes los recorridos como una operación asíncrona. Cada archivo de entrada debe contener un OptimizeToursRequest
y cada archivo de salida contendrá un OptimizeToursResponse
. La solicitud contiene información para leer, escribir y analizar los archivos. Todos los archivos de entrada y salida deben estar en el mismo proyecto.
Campos | |
---|---|
parent |
Obligatorio. Proyecto de destino y ubicación para realizar una llamada. Formato: * Si no se especifica una ubicación, se elegirá automáticamente una región. |
model_configs[] |
Obligatorio. Información de entrada y salida de cada modelo de compra, como rutas de acceso de archivos y formatos de datos. |
AsyncModelConfig
Información para resolver un modelo de optimización de forma asíncrona.
Campos | |
---|---|
display_name |
Opcional. Es el nombre del modelo definido por el usuario; los usuarios pueden usarlo como alias para realizar un seguimiento de los modelos. |
input_config |
Obligatorio. Información sobre el modelo de entrada. |
output_config |
Obligatorio. La información de ubicación de salida deseada. |
BatchOptimizeToursResponse
Este tipo no tiene campos.
Respuesta a un BatchOptimizeToursRequest
. Esto se muestra en la operación de larga duración una vez que se completa la operación.
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. Es posible que se produzca una ruptura:
- 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 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).
Campos | |
---|---|
break_requests[] |
Secuencia de pausas. Lee el mensaje |
frequency_constraints[] |
Es posible que se apliquen varios |
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 (earliest_start_time
/ latest_start_time
) pueden superponerse, pero deben ser compatibles con el pedido (esto está marcado).
Campos | |
---|---|
earliest_start_time |
Obligatorio. Límite inferior (inclusivo) al inicio de la pausa. |
latest_start_time |
Obligatorio. Es el límite superior (inclusivo) del inicio de la pausa. |
min_duration |
Obligatorio. Duración mínima de la pausa. Debe ser positivo. |
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
:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { 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
Campos | |
---|---|
min_break_duration |
Obligatorio. Duración mínima de la pausa para esta restricción. No es negativo. Consulta la descripción de |
max_inter_break_duration |
Obligatorio. Intervalo máximo permitido de cualquier intervalo de tiempo en la ruta que no incluye, al menos, una pausa de |
DataFormat
Formatos de datos para archivos de entrada y salida.
Enumeraciones | |
---|---|
DATA_FORMAT_UNSPECIFIED |
El valor no es válido. El formato no debe ser UNSPECIFIED. |
JSON |
Notación de objetos de JavaScript. |
PROTO_TEXT |
el formato de texto de los búferes de protocolo. Consulta https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Es un límite que define la distancia máxima que se puede recorrer. Puede ser dura o blanda.
Si se define un límite flexible, se deben definir tanto soft_max_meters
como cost_per_kilometer_above_soft_max
, y no deben ser negativos.
Campos | |
---|---|
max_meters |
Un límite estricto que restringe la distancia a un máximo de max_meters. El límite no debe ser negativo. |
soft_max_meters |
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 soft_max_meters, debe ser menor que max_meters y no debe ser negativo. |
cost_per_kilometer_below_soft_max |
Costo por kilómetro generado, que aumenta hasta
Este costo no se admite en |
cost_per_kilometer_above_soft_max |
Costo por kilómetro generado si la distancia supera el límite de
El costo no debe ser negativo. |
GcsDestination
La ubicación de Google Cloud Storage en la que se escribirán los archivos de salida.
Campos | |
---|---|
uri |
Obligatorio. El URI de Google Cloud Storage. |
GcsSource
La ubicación de Google Cloud Storage desde la que se leerá el archivo de entrada.
Campos | |
---|---|
uri |
Obligatorio. Es el URI de un objeto de Google Cloud Storage con el formato |
InjectedSolutionConstraint
Solución insertada en la solicitud, incluida información sobre qué visitas se deben restringir y cómo se deben restringir.
Campos | |
---|---|
routes[] |
Rutas de la solución para inyectar Algunas rutas pueden omitirse de la solución original. Las rutas y los envíos omitidos deben satisfacer las suposiciones de validez básicas que se indican para |
skipped_shipments[] |
Se omitieron los envíos de la solución para inyectar. Es posible que se omitan algunos de la solución original. Observa el campo |
constraint_relaxations[] |
Para cero o más grupos de vehículos, especifica cuándo y en qué medida flexibilizar las restricciones. Si este campo está vacío, todas las rutas no vacías para vehículos tendrán una restricción total. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de las visitas y en qué nivel. Solo se pueden omitir los envíos que se indican en el campo skipped_shipment
. es decir, no se pueden ejecutar.
Campos | |
---|---|
relaxations[] |
Todas las flexibilizaciones de las restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en |
vehicle_indices[] |
Especifica los índices de vehículos a los que se aplica la restricción de visita Un índice de vehículos se asigna de la misma manera que |
Relajación
Si el campo relaxations
está vacío, la hora de inicio y la secuencia de todas las visitas del routes
estarán completamente restringidas y no se podrán insertar ni agregar visitas nuevas a esas rutas. Además, la hora de inicio y finalización de un vehículo en routes
tiene restricciones completas, a menos que el vehículo esté vacío (es decir, no tenga visitas y tenga el valor used_if_route_is_empty
configurado como falso en el modelo).
relaxations(i).level
especifica el nivel de flexibilización de restricciones aplicado a una visita #j que cumple con los siguientes requisitos:
route.visits(j).start_time >= relaxations(i).threshold_time
Yj + 1 >= relaxations(i).threshold_visit_count
De manera similar, el arranque del vehículo se relaja en relaxations(i).level
si cumple con los siguientes requisitos:
vehicle_start_time >= relaxations(i).threshold_time
Yrelaxations(i).threshold_visit_count == 0
y el extremo del vehículo está relajado enrelaxations(i).level
si cumple con los siguientes requisitos:vehicle_end_time >= relaxations(i).threshold_time
Yroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Para aplicar un nivel de relajación si una visita cumple con el threshold_visit_count
O el threshold_time
, agrega dos relaxations
con el mismo level
: uno con solo threshold_visit_count
establecido y el otro con solo threshold_time
configurado. Si una visita cumple con las condiciones de varios relaxations
, se aplica el nivel más relajado. Como resultado, desde el inicio del vehículo hasta las visitas a la ruta hasta el final, el nivel de relajación se vuelve más relajado; es decir, el nivel de relajación no disminuye a medida que avanza la ruta.
El horario y la secuencia de las visitas de ruta que no cumplen con las condiciones límite de ninguna relaxations
están completamente limitadas y no se puede insertar ninguna visita en estas secuencias. Además, si el inicio o la finalización de un vehículo no cumplen con las condiciones de relajación, el tiempo es fijo, a menos que el vehículo esté vacío.
Campos | |
---|---|
level |
El nivel de relajación de la restricción que se aplica cuando se cumplen las condiciones en |
threshold_time |
Hora en la que se puede aplicar la relajación |
threshold_visit_count |
Es la cantidad de visitas en las que se puede aplicar la relajación Si es |
Nivel
Expresa los diferentes niveles de relajación de restricciones, que se aplican para una visita y los que siguen cuando se satisfacen las condiciones del umbral.
La siguiente enumeración está en orden de relajación creciente.
Enumeraciones | |
---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: Ninguna restricción es relajada, es decir, todas las visitas están completamente restringidas. Este valor no se debe usar explícitamente en |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Se flexibilizarán las horas de inicio y finalización de las visitas y de los vehículos, pero cada visita seguirá vinculada al mismo vehículo y se deberá observar la secuencia de visitas: no se puede insertar ninguna visita entre ellas ni antes de ellas. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Igual que en RELAX_VISIT_TIMES_AFTER_THRESHOLD , pero la secuencia de visitas también es relajada: solo este vehículo puede realizar visitas, pero es posible que dejen de realizarse. |
RELAX_ALL_AFTER_THRESHOLD |
Igual que RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , pero el vehículo también está relajado: las visitas son completamente gratuitas en el momento del umbral o después de este, y es posible que no se realicen. |
InputConfig
Especifica una entrada para [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_format |
Obligatorio. El formato de los datos de entrada. |
Campo de unión source . Obligatorio. Las direcciones (source ) solo pueden ser una de las siguientes opciones: |
|
gcs_source |
Una ubicación de Google Cloud Storage. Debe ser un solo objeto (archivo). |
Ubicación
Encapsula una ubicación (un punto geográfico y una orientación opcional).
Campos | |
---|---|
lat_lng |
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 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. |
OptimizeToursRequest
Solicitud que se debe proporcionar a un solucionador de problemas de optimización de recorridos que define el modelo de envío que se debe resolver, así como los parámetros de optimización.
Campos | |
---|---|
parent |
Obligatorio. Proyecto o ubicación de destino para realizar una llamada. Formato: * Si no se especifica una ubicación, se elegirá una región automáticamente. |
timeout |
Si se establece este tiempo de espera, el servidor muestra una respuesta antes de que finalice el tiempo de espera o se alcance el plazo del servidor para las solicitudes síncronas, lo que ocurra primero. En el caso de las solicitudes asíncronas, el servidor generará una solución (si es posible) antes de que transcurra el tiempo de espera. |
model |
Modelo de envío a resolver. |
solving_mode |
De forma predeterminada, el modo de resolución es |
search_mode |
Es el modo de búsqueda que se usa para resolver la solicitud. |
injected_first_solution_routes[] |
Guía el algoritmo de optimización para encontrar una primera solución similar a la anterior. El modelo está limitado cuando se compila la primera solución. Cualquier envío que no se realice en una ruta se omite de forma implícita en la primera solución, pero se pueden realizar en soluciones sucesivas. La solución debe cumplir con algunas suposiciones básicas de validez:
Si la solución inyectada no es factible, no se muestra necesariamente un error de validación y, en su lugar, puede devolverse un error que indica inviabilidad. |
injected_solution_constraint |
Limita el algoritmo de optimización para encontrar una solución final que sea similar a una solución anterior. Por ejemplo, se puede usar para inmovilizar partes de rutas que ya se completaron o que deben completarse, pero no deben modificarse. Si la solución inyectada no es factible, no se muestra necesariamente un error de validación y, en su lugar, puede devolverse un error que indica inviabilidad. |
refresh_details_routes[] |
Si el campo no está vacío, las rutas proporcionadas se actualizarán sin modificar la secuencia subyacente de visitas o los tiempos de viaje; solo se actualizarán otros detalles. Esto no resuelve el modelo. A partir de 2020/11, esto solo propaga las polilíneas de rutas no vacías y requiere que Es posible que los campos Este campo no se debe usar junto con
|
interpret_injected_solutions_using_labels |
Si es verdadero:
Esta interpretación se aplica a los campos Si es verdadero, las etiquetas de las siguientes categorías deben aparecer como máximo una vez en su categoría:
Si un Quitar las visitas de ruta o las rutas completas de una solución insertada puede tener un efecto en las restricciones implícitas, lo que puede provocar cambios en la solución, errores de validación o inviabilidad. NOTA: El llamador debe asegurarse de que cada |
consider_road_traffic |
Ten en cuenta la estimación del tráfico para calcular los campos |
populate_polylines |
Si es verdadero, las polilíneas se propagarán en las |
populate_transition_polylines |
Si es verdadero, las polilíneas se propagarán en la respuesta |
allow_large_deadline_despite_interruption_risk |
Si se establece, la solicitud puede tener un plazo (consulta https://grpc.io/blog/deadlines) de hasta 60 minutos. De lo contrario, el plazo máximo es solo 30 minutos. Ten en cuenta que las solicitudes de larga duración tienen un riesgo de interrupción mucho mayor (pero aún pequeño). |
use_geodesic_distances |
Si esta preferencia se establece como "true", las distancias de viaje se calcularán con distancias geodésicas en lugar de distancias de Google Maps, y los tiempos de viaje se calcularán mediante distancias geodésicas con una velocidad definida por |
label |
Etiqueta que se puede usar para identificar esta solicitud, informada en |
geodesic_meters_per_second |
Cuando |
max_validation_errors |
Trunca la cantidad de errores de validación que se muestran. Por lo general, estos errores se adjuntan a una carga útil de error INVALID_ARGUMENT como un detalle de error de BadRequest (https://cloud.google.com/apis/design/errors#error_details), a menos que solving_mode=VALIDATE_ONLY: consulta el campo |
SearchMode
Es el modo que define el comportamiento de la búsqueda y que establece un equilibrio entre la latencia y la calidad de la solución. En todos los modos, se aplica la fecha límite de solicitud global.
Enumeraciones | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Modo de búsqueda no especificado, equivalente a RETURN_FAST . |
RETURN_FAST |
Detén la búsqueda después de encontrar la primera solución adecuada. |
CONSUME_ALL_AVAILABLE_TIME |
Dedica todo el tiempo disponible a buscar mejores soluciones. |
SolvingMode
Define cómo la herramienta de resolución debe manejar la solicitud. En todos los modos, excepto VALIDATE_ONLY
, si la solicitud no es válida, recibirás un error INVALID_REQUEST
. Consulta max_validation_errors
para limitar la cantidad de errores que se muestran.
Enumeraciones | |
---|---|
DEFAULT_SOLVE |
Resuelve el modelo. Es posible que se emitan advertencias en [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY |
Solo valida el modelo sin resolverlo: propaga la mayor cantidad de OptimizeToursResponse.validation_errors posible. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Solo propaga IMPORTANTE: No se muestran todos los envíos inviables, sino solo los que se detectan como inviables durante el procesamiento previo. |
OptimizeToursResponse
Respuesta después de resolver un problema de optimización del recorrido que contiene las rutas seguidas por cada vehículo, los envíos que se omitieron y el costo total de la solución
Campos | |
---|---|
routes[] |
Rutas calculadas para cada vehículo la i-ésima ruta corresponde al i-ésimo vehículo del modelo. |
request_label |
Copia de |
skipped_shipments[] |
Se omite la lista de todos los envíos. |
validation_errors[] |
Lista de todos los errores de validación que pudimos detectar de forma independiente. Consulta “VARIOS ERRORES” explicación del mensaje |
metrics |
Métricas de duración, distancia y uso para esta solución. |
Métricas
Métricas generales, agregadas en todas las rutas
Campos | |
---|---|
aggregated_route_metrics |
Corresponde a las rutas agregadas. Cada métrica es la suma (o máxima, para las cargas) de todos los campos |
skipped_mandatory_shipment_count |
Cantidad de envíos obligatorios omitidos. |
used_vehicle_count |
Cantidad de vehículos usados Nota: Si la ruta de un vehículo está vacía y el valor de |
earliest_vehicle_start_time |
La hora de inicio más temprana de un vehículo usado, que se calcula como la hora mínima de |
latest_vehicle_end_time |
Es la hora de finalización más reciente de un vehículo usado, calculada como el máximo de todos los vehículos usados de |
costs |
Costo de la solución, desglosado por campos de solicitudes relacionados con el costo. Las claves son rutas de acceso proto relacionadas con la entrada de OptimizeToursRequest, p.ej., “model.shipments.pickups.cost”, y los valores son el costo total que genera el campo de costo correspondiente, agregado en toda la solución. En otras palabras, los costos["model.shipments.pickups.cost"] es la suma de todos los costos de retiro en la solución. Todos los costos definidos en el modelo se informan aquí en detalle, excepto los costos relacionados con TransitionAttributes que solo se informan de forma agregada a partir de 2022/01. |
total_cost |
El costo total de la solución. Es la suma de todos los valores en el mapa de costos. |
OptimizeToursValidationError
Describe un error o una advertencia que se encontró durante la validación de una OptimizeToursRequest
.
Campos | |
---|---|
code |
Un error de validación se define mediante el par ( Otros campos (a continuación) proporcionan más contexto sobre el error. VARIOS ERRORES: Cuando hay varios errores, el proceso de validación intenta generar varios de ellos. Al igual que un compilador, este es un proceso imperfecto. Algunos errores de validación serán "irreparables", lo que significa que detienen todo el proceso de validación. Este es el caso de los errores de ESTIBILIDAD: REFERENCE: una lista de todos los pares (código, nombre):
|
display_name |
El nombre visible del error. |
fields[] |
Un contexto de error puede incluir 0, 1 (la mayoría de las veces) o más campos. Por ejemplo, hacer referencia al vehículo núm. 4 y al primer retiro del envío núm. 2 se puede hacer de la siguiente manera:
Sin embargo, ten en cuenta que la cardinalidad de |
error_message |
Cadena legible que describe el error Hay una asignación 1:1 entre ESTABILIDAD: No estable: el mensaje de error asociado a un |
offending_values |
Puede contener los valores de los campos. Esta opción no siempre está disponible. No debes confiar en él y usarlo solo para la depuración manual del modelo. |
FieldReference
Especifica un contexto para el error de validación. Un FieldReference
siempre hace referencia a un campo determinado en este archivo y sigue la misma estructura jerárquica. Por ejemplo, podríamos especificar el elemento no 2 de start_time_windows
del vehículo no 5 de la siguiente manera:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Sin embargo, omitimos las entidades de nivel superior, como OptimizeToursRequest
o ShipmentModel
, para evitar que el mensaje se sature.
Campos | |
---|---|
name |
Es el nombre del campo, p. ej., "vehículos". |
sub_field |
Subcampo anidado de forma recurrente, si es necesario. |
Campo de unión
|
|
index |
Índice del campo si se repite. |
key |
Clave si el campo es un mapa. |
OutputConfig
Especifica un destino para los resultados de [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_format |
Obligatorio. El formato de los datos de salida. |
Campo de unión destination . Obligatorio. Las direcciones (destination ) solo pueden ser una de las siguientes opciones: |
|
gcs_destination |
La ubicación de Google Cloud Storage en la que se escribirá el resultado. |
RouteModifiers
Encapsula un conjunto de condiciones opcionales que se deben cumplir al calcular 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.
Campos | |
---|---|
avoid_tolls |
Especifica si se deben evitar las rutas con peaje cuando sea razonable. Se dará prioridad a las rutas que no contengan rutas con peaje. Solo se aplica a los medios de transporte motorizados. |
avoid_highways |
Especifica si se deben evitar las autopistas cuando sea razonable. Se dará prioridad a las rutas que no contengan autopistas. Solo se aplica a los modos de viaje motorizados. |
avoid_ferries |
Especifica si se deben evitar los ferris cuando sea razonable. Se dará prioridad a las rutas que no incluyan viajes en ferris. Solo se aplica a los modos de viaje motorizados. |
avoid_indoor |
Opcional. Especifica si se debe evitar la navegación en interiores cuando sea razonable. Se dará prioridad a las rutas que no contengan navegación interior. Solo se aplica al modo de viaje |
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).
Campos | |
---|---|
display_name |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es el conjunto de alternativas de retiro asociadas al envío. Si no se especifica, el vehículo solo 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. |
load_demands |
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. |
allowed_vehicle_indices[] |
Es el conjunto de vehículos que pueden realizar este envío. Si está vacía, es posible que todos los vehículos la realicen. Los vehículos se proporcionan según su índice en la lista |
costs_per_vehicle[] |
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 |
costs_per_vehicle_indices[] |
Índices de los vehículos a los que se aplica |
pickup_to_delivery_absolute_detour_limit |
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. |
pickup_to_delivery_time_limit |
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. |
shipment_type |
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 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_cost |
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. |
pickup_to_delivery_relative_detour_limit |
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. |
Cargar
Cuando se realiza una visita, se puede agregar un importe predefinido a la carga del vehículo si se trata de un retiro o se puede restar si se trata de una entrega. Este mensaje define ese importe. Consulta los load_demands
.
Campos | |
---|---|
amount |
La cantidad de carga del vehículo que realiza la visita correspondiente variará. Como se trata de un número entero, se recomienda a los usuarios que elijan una unidad adecuada para evitar la pérdida de precisión. Debe ser mayor o igual que 0. |
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).
Campos | |
---|---|
arrival_location |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta |
arrival_waypoint |
Es el punto de referencia al que llega el vehículo cuando realiza este |
departure_location |
La ubicación geográfica donde sale el vehículo después de completar este |
departure_waypoint |
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. |
time_windows[] |
Ventanas de tiempo que limitan la hora de llegada a 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 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 |
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 |
load_demands |
Cargar demandas de esta solicitud de visita. Es similar al campo |
visit_types[] |
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 |
ShipmentModel
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
Campos | |
---|---|
shipments[] |
Es el conjunto de envíos que se deben realizar en el modelo. |
vehicles[] |
Es el conjunto de vehículos que se pueden usar para realizar visitas. |
global_start_time |
Hora de inicio y finalización globales del modelo: Ninguna hora fuera de este rango puede considerarse válida. El período del modelo debe ser inferior a un año, es decir, Cuando uses campos |
global_end_time |
Si no la estableces, se usará como valor predeterminado 00:00:00 UTC, 1 de enero de 1971 (es decir, segundos: 31536000, nanos: 0). |
global_duration_cost_per_hour |
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. Este costo debe estar en la misma unidad que |
duration_distance_matrices[] |
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_distance_matrix_src_tags[] |
Etiquetas que definen las fuentes de las matrices de duración y distancia; Las etiquetas corresponden a |
duration_distance_matrix_dst_tags[] |
Etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transition_attributes[] |
Atributos de transición agregados al modelo. |
shipment_type_incompatibilities[] |
Conjuntos de opciones de envío incompatibles (consulte |
shipment_type_requirements[] |
Conjuntos de requisitos de |
precedence_rules[] |
Conjunto de reglas de precedencia que deben aplicarse en el modelo. |
max_active_vehicles |
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 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. |
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.
Campos | |
---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener tantos elementos como |
vehicle_start_tag |
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.
Campos | |
---|---|
durations[] |
Valores de duración para una fila determinada. Debe tener tantos elementos como |
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 |
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 offset_duration
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 se ignoran de otra forma.
Campos | |
---|---|
first_is_delivery |
Indica si el "primer" el evento es una entrega. |
second_is_delivery |
Indica si el "segundo" evento es una publicación. |
offset_duration |
El desplazamiento entre los "primeros" y "second" para cada evento. Puede ser negativo. |
first_index |
Índice de envío del “primer” para cada evento. Se debe especificar este campo. |
second_index |
Índice de envío del "segundo" para cada evento. Se debe especificar este campo. |
ShipmentRoute
La ruta de un vehículo puede desglosarse a lo largo del eje de tiempo de la siguiente manera (suponemos que hay n visitas):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Ten en cuenta que hacemos una diferencia entre lo siguiente:
- “eventos puntuales”, como el inicio y la finalización del vehículo, y el comienzo y la finalización de cada visita (es decir, de llegada y salida). Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre las visitas. Si bien los intervalos de tiempo a veces pueden tener una duración de cero, es decir, comienzan y terminan en el mismo segundo, a menudo tienen una duración positiva.
Invariantes:
- Si hay n visitas, hay n+1 transiciones.
- Una visita siempre está rodeada por una transición antes de ella (mismo índice) y una transición después de ella (índice + 1).
- El inicio del vehículo siempre está seguido de la transición n° 0.
- La transición #n siempre precede al final del vehículo.
Acerca la imagen. Esto es lo que sucede durante una Transition
y una Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Por último, aquí te mostramos cómo se pueden organizar los VIAJES, LOS DESCANSO, LA RETRASO y la ESPERA durante una transición.
- No se superponen.
- La demora es única y debe ser un período contiguo justo antes de la próxima visita (o la finalización del vehículo). Por lo tanto, basta con conocer la duración de la demora para conocer su hora de inicio y finalización.
- Las PAUSAS son períodos de tiempo contiguos que no se superponen. La respuesta especifica la hora de inicio y la duración de cada pausa.
- TRAVEL y WAIT son "preemptibles": se pueden interrumpir varias veces durante esta transición. Los clientes pueden suponer que el viaje se realiza "lo antes posible". y que "esperar" llena el tiempo restante.
Un ejemplo (complejo):
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Campos | |
---|---|
vehicle_index |
Vehículo que realiza la ruta, identificado por su índice en el origen |
vehicle_label |
Etiqueta del vehículo que realiza esta ruta, igual a |
vehicle_start_time |
Hora en la que el vehículo comienza su ruta. |
vehicle_end_time |
Hora a la que el vehículo finaliza su ruta. |
visits[] |
Secuencia ordenada de visitas que representa una ruta. visit[i] es la enésima visita de la ruta. Si este campo está vacío, se considerará que el vehículo no está en uso. |
transitions[] |
Es la lista ordenada de transiciones de la ruta. |
has_traffic_infeasibilities |
Cuando la opción
Es probable que la llegada a next_visit ocurra después de su período actual debido al aumento en la estimación del tiempo de viaje |
route_polyline |
Representación de polilínea codificada de la ruta. Este campo solo se propaga si se establece |
breaks[] |
Pausas programadas para el vehículo que realiza esta ruta La secuencia |
metrics |
Métricas de duración, distancia y carga de esta ruta. Los campos de |
route_costs |
Costo de la ruta, desglosado por campos de solicitudes relacionados con el costo. Las claves son rutas de proto, en relación con la entrada OptimizeToursRequest, p. ej., "model.shipments.pickups.cost", y los valores son el costo total generado por el campo de costo correspondiente, agregado en toda la ruta. En otras palabras, los costos["model.shipments.pickups.cost"] es la suma de todos los costos de retiro en la ruta. Todos los costos definidos en el modelo se informan aquí en detalle, excepto los costos relacionados con TransitionAttributes que solo se informan de forma agregada a partir de 2022/01. |
route_total_cost |
Es el costo total de la ruta. Es la suma de todos los costos en el mapa de costos. |
Receso
Son datos que representan la ejecución de una pausa.
Campos | |
---|---|
start_time |
Es la hora de inicio de un descanso. |
duration |
Duración de la pausa. |
EncodedPolyline
Representación codificada de una polilínea. Para obtener más información sobre la codificación de polilíneas, consulta la siguiente información: https://developers.google.com/maps/documentation/utilities/polylinealgorithm.https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Campos | |
---|---|
points |
Cadena que representa puntos codificados de la polilínea. |
Transición
Transición entre dos eventos en la ruta. Consulta la descripción de ShipmentRoute
.
Si el vehículo no tiene un start_location
o un end_location
, las métricas de viaje correspondientes son 0.
Campos | |
---|---|
travel_duration |
Duración del viaje durante esta transición. |
travel_distance_meters |
Distancia recorrida durante la transición. |
traffic_info_unavailable |
Cuando se solicita tráfico a través de |
delay_duration |
Suma de las duraciones de los retrasos que se aplican a esta transición. Si hubiera alguno, el retraso comienza exactamente |
break_duration |
Suma de la duración de las pausas que ocurren durante esta transición, si las hubiera. Los detalles sobre la hora de inicio y la duración de cada pausa se almacenan en |
wait_duration |
Tiempo de espera durante esta transición. La duración de la espera corresponde al tiempo inactivo y no incluye el tiempo de descanso. Además, ten en cuenta que este tiempo de espera puede dividirse en varios intervalos no contiguos. |
total_duration |
Es la duración total de la transición, proporcionada para mayor comodidad. Es igual a:
|
start_time |
Es la hora de inicio de esta transición. |
route_polyline |
Representación de polilínea codificada de la ruta seguida durante la transición. Este campo solo se propaga si se establece |
vehicle_loads |
El vehículo se carga durante esta transición para cada tipo que aparezca en el Las cargas durante la primera transición son las cargas iniciales de la ruta del vehículo. Luego, después de cada visita, se agregan o se restan los |
VehicleLoad
Informa la carga real del vehículo en algún punto de la ruta, para un tipo determinado (consulta Transition.vehicle_loads
).
Campos | |
---|---|
amount |
La cantidad de carga del vehículo para el tipo determinado. Por lo general, el tipo indica la unidad de carga. Consulta los |
Visitar
Una visita realizada durante una ruta. Esta visita corresponde a un retiro o una entrega de Shipment
.
Campos | |
---|---|
shipment_index |
Índice del campo |
is_pickup |
Si es verdadero, la visita corresponde al retiro de un |
visit_request_index |
Índice de |
start_time |
Hora a la que comienza la visita. Ten en cuenta que el vehículo puede llegar antes a la ubicación de la visita. Los horarios coinciden con el |
load_demands |
Demanda total de carga de visitas como la suma del envío y la solicitud de visita |
detour |
Tiempo de desvío adicional debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera inducido por los períodos. Si la visita corresponde a una entrega a domicilio, el desvío se calcula a partir de la visita de retiro correspondiente y es igual a lo siguiente:
De lo contrario, se calcula a partir del
|
shipment_label |
Copia del |
visit_label |
Copia del |
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 según el modo de incompatibilidad.
Campos | |
---|---|
types[] |
Es la lista de tipos incompatibles. Dos envíos con un |
incompatibility_mode |
Se aplicó el modo 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 envíos según su tipo de envío. Los detalles del requisito se definen en función del modo de requisitos.
Campos | |
---|---|
required_shipment_type_alternatives[] |
Lista de tipos de envío alternativos que requiere |
dependent_shipment_types[] |
Todos los envíos con un tipo indicado en el campo NOTA: No se permiten cadenas de requisitos de modo que un |
requirement_mode |
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 el vehículo en el momento de la entrega. |
SkippedShipment
Especifica los detalles de los envíos sin realizar en una solución. Para casos triviales o si podemos identificar la causa de la omisión, informamos el motivo aquí.
Campos | |
---|---|
index |
El índice corresponde al índice del envío en el |
label |
Copia del |
reasons[] |
Una lista de motivos que explican por qué se omitió el envío. Ver comentario arriba |
Motivo
Si podemos explicar por qué se omitió el envío, las razones se indicarán aquí. Si el motivo no es el mismo para todos los vehículos, reason
tendrá más de 1 elemento. Un envío omitido no puede tener motivos duplicados, es decir, que todos los campos sean iguales, excepto example_vehicle_index
. Ejemplo:
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
El envío omitido no es compatible con todos los vehículos. Los motivos pueden ser diferentes para todos los vehículos, pero las "manzanas" de al menos un vehículo se superará la capacidad (incluido el vehículo 1) y se superará el valor de "Peras" de al menos un vehículo se superaría la capacidad (incluido el vehículo 3) y se excedería el límite de distancia de al menos un vehículo (incluido el vehículo 1).
Campos | |
---|---|
code |
Consulta los comentarios del Código. |
example_exceeded_capacity_type |
Si el código de motivo es |
example_vehicle_index |
Si el motivo está relacionado con una incompatibilidad de envío y vehículo, este campo proporciona el índice de un vehículo relevante. |
Código
Código que identifica el tipo de motivo. En este caso, este orden no tiene sentido. En particular, no ofrece ninguna indicación sobre si un motivo determinado aparecerá antes que otro en la solución, si ambos aplican.
Enumeraciones | |
---|---|
CODE_UNSPECIFIED |
Esto nunca debe usarse. |
NO_VEHICLE |
No hay ningún vehículo en el modelo que hace que todos los envíos sean inviables. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
La demanda del envío supera la capacidad de un vehículo para algunos tipos de capacidad, uno de los cuales es de example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
La distancia mínima necesaria para realizar este envío, es decir, desde el Ten en cuenta que, para este cálculo, usamos las distancias geodésicas. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
El tiempo mínimo necesario para realizar este envío, incluidos el tiempo de viaje, el tiempo de espera y el tiempo de servicio, supera el Nota: El tiempo de viaje se calcula en el mejor de los casos, es decir, como distancia geodésica x 36 m/s (aproximadamente 130 km/hora). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual que en el ejemplo anterior, pero solo comparamos el tiempo de viaje mínimo y el travel_duration_limit del vehículo. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
El vehículo no puede realizar este envío en el mejor de los casos (consulta CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT para calcular el tiempo) si comienza en la hora de inicio más temprana: el tiempo total que el vehículo terminaría después de su última hora de finalización. |
VEHICLE_NOT_ALLOWED |
El campo allowed_vehicle_indices del envío no está vacío y este vehículo no le pertenece. |
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, start_time
y end_time
, aplican la hora más temprana y más reciente del evento, de modo que start_time <= event_time <=
end_time
. El límite inferior del período flexible, soft_start_time
, expresa una preferencia para que el evento ocurra en soft_start_time
o después de esta si incurre en un costo proporcional a cuánto tiempo antes de que ocurra el evento soft_start_time. El límite superior de la ventana de tiempo flexible, soft_end_time
, expresa una preferencia para que el evento ocurra en soft_end_time
o antes, lo que genera un costo proporcional a cuánto tiempo después de soft_end_time
ocurre el evento. start_time
, end_time
, soft_start_time
y soft_end_time
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 <= `start_time` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
Campos | |
---|---|
start_time |
La hora de inicio del período de tiempo real. Si no se especifica, se configurará como |
end_time |
Es la hora de finalización del período de tiempo real. Si no se especifica, se configurará como |
soft_start_time |
La hora de inicio suave del período. |
soft_end_time |
La hora de finalización suave del período. |
cost_per_hour_before_soft_start_time |
Es un costo por hora que se agrega a otros costos del modelo si el evento ocurre antes de soft_start_time, calculado de la siguiente manera:
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró soft_start_time. |
cost_per_hour_after_soft_end_time |
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ó |
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”).
Campos | |
---|---|
src_tag |
Son 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 |
excluded_src_tag |
Consulta los |
dst_tag |
Una visita al destino o el final del viaje coinciden si su |
excluded_dst_tag |
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. |
cost_per_kilometer |
Especifica un costo por kilómetro aplicado a la distancia recorrida durante esta transición. Suma cualquier |
distance_limit |
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 finalizar la visita a la fuente y antes de iniciar la visita al destino. |
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 start_location
y finalizará a las end_location
para este vehículo. Una ruta es una secuencia de visitas (consulta ShipmentRoute
).
Campos | |
---|---|
display_name |
El nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travel_mode |
Indica el medio de transporte que afecta las rutas que utiliza el vehículo y su velocidad. Consulta también |
route_modifiers |
Es un conjunto de condiciones que se deben cumplir y que afectan la forma en que se calculan las rutas para un vehículo determinado. |
start_location |
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 |
start_waypoint |
Punto de referencia que representa una ubicación geográfica donde comienza el vehículo antes de recoger los envíos. Si no se especifica |
end_location |
Ubicación geográfica donde finaliza el vehículo después de completar su último |
end_waypoint |
Punto de referencia que representa una ubicación geográfica en la que finaliza el vehículo después de completar su último |
start_tags[] |
Especifica las etiquetas adjuntas al inicio de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
end_tags[] |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías o duplicadas. |
start_time_windows[] |
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.
|
end_time_windows[] |
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.
|
unloading_policy |
Se aplica una política de descarga en el vehículo. |
load_limits |
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 |
cost_per_hour |
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 |
cost_per_traveled_hour |
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 |
cost_per_kilometer |
Costo por kilómetro de la ruta vehicular Este costo se aplica a la distancia informada en el |
fixed_cost |
Es el costo fijo que se aplica si se usa este vehículo para manejar un envío. |
used_if_route_is_empty |
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 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_duration_limit |
Es el límite que se aplica a la duración total de la ruta del vehículo. En un |
travel_duration_limit |
El límite se aplica a la duración del viaje de la ruta del vehículo. En un |
route_distance_limit |
El límite se aplica a la distancia total de la ruta del vehículo. En un |
extra_visit_duration_for_visit_type |
Especifica un mapa de las cadenas visit_types y 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. |
break_rule |
Describe el programa de descanso que se aplicará en este vehículo. Si está vacío, no se programarán descansos para este vehículo. |
label |
Especifica una etiqueta para este vehículo. Esta etiqueta se informa en la respuesta como el |
ignore |
Si es verdadero, Si un vehículo ignorado en Si un vehículo ignorado realiza un envío en |
travel_duration_multiple |
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 |
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.
Campos | |
---|---|
max_duration |
Un límite estricto que restringe la duración a max_duration como máximo. |
soft_max_duration |
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, |
quadratic_soft_max_duration |
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,
|
cost_per_hour_after_soft_max |
Costo por hora generado si se infringe el umbral de
El costo no debe ser negativo. |
cost_per_square_hour_after_quadratic_soft_max |
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. |
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 load_limits
.
Campos | |
---|---|
soft_max_load |
Un límite flexible de la carga Consulta los |
cost_per_unit_above_soft_max |
Si en algún momento la carga supera los |
start_load_interval |
El intervalo de carga aceptable del vehículo al comienzo de la ruta. |
end_load_interval |
El intervalo de carga aceptable del vehículo al final de la ruta. |
max_load |
La cantidad de carga máxima aceptable. |
Intervalo
Intervalo de cantidades de carga aceptables
Campos | |
---|---|
min |
Una carga mínima aceptable Debe ser ≥ 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, |
TravelMode
Son los medios de transporte que pueden usar 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 modo de transporte correspondiente a las instrucciones sobre cómo llegar 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 solo a los envíos que tengan retiro y entrega.
Los demás envíos pueden ocurrir en cualquier lugar de la ruta, independientemente de unloading_policy
.
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 al de retiro |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que los retiros |
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.
Campos | |
---|---|
side_of_road |
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. 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 “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. |
place_id |
El ID de lugar del lugar de interés asociado con el punto de referencia. |