Í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)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
- Las horas están en tiempo Unix: segundos desde 1970-01-01T00:00:00+00:00.
- los segundos deben estar en [0, 253402300799], es decir, en [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- los nanosegundos no se deben configurar o se deben establecer en 0.
google.protobuf.Duration
- los segundos deben estar en [0, 253402300799], es decir, en [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- los nanosegundos no se deben configurar o se deben establecer en 0.
google.type.LatLng
- la latitud debe ser de [-90.0, 90.0].
- la longitud debe estar en [-180.0, 180.0].
- al menos uno de los valores de latitud y longitud no debe ser cero.
BatchOptimizeTours |
---|
Optimiza los recorridos en 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 (mensajes
|
OptimizeTours |
---|
Envía un Un modelo El objetivo es proporcionar una asignación de
|
AggregatedMetrics
Métricas agregadas de ShipmentRoute
(resp. de OptimizeToursResponse
en todos los elementos Transition
o Visit
[respetuos de todos los ShipmentRoute
]).
Campos | |
---|---|
performed_shipment_count |
Cantidad de envíos realizados Ten en cuenta que un par de retiros y entregas solo se cuenta una vez. |
travel_duration |
Es la duración total del viaje de una ruta o solución. |
wait_duration |
Es la duración total de espera para una ruta o solución. |
delay_duration |
Es la duración total del retraso de una ruta o solución. |
break_duration |
Duración total de la pausa para una ruta o solución. |
visit_duration |
Es la duración total de la visita para 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 total de viaje de una ruta o solución. |
max_loads |
Carga máxima alcanzada en toda la ruta (solución de respuesta), para cada una de las cantidades en esta ruta (solución de respuesta), que se calcula como el máximo sobre todos los |
BatchOptimizeToursMetadata
Este tipo no tiene campos.
Metadatos de operación para llamadas a BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Solicita optimizar los recorridos por lotes 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á una automáticamente. |
model_configs[] |
Obligatorio. Información de entrada y salida en cada modelo de compra, como rutas de archivos y formatos de datos |
AsyncModelConfig
Información para resolver un modelo de optimización de forma asíncrona.
Campos | |
---|---|
display_name |
Opcional. 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 la ubicación de salida deseada. |
BatchOptimizeToursResponse
Este tipo no tiene campos.
Respuesta a un BatchOptimizeToursRequest
. Se muestra en la operación de larga duración una vez que se completa la operación.
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).
Campos | |
---|---|
break_requests[] |
La secuencia de las pausas. Revisa el mensaje |
frequency_constraints[] |
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 (earliest_start_time
/ latest_start_time
) pueden superponerse, pero deben ser compatibles con el pedido (esto está verificado).
Campos | |
---|---|
earliest_start_time |
Obligatorio. Límite inferior (inclusivo) al comienzo del descanso. |
latest_start_time |
Obligatorio. Límite superior (inclusivo) al comienzo del descanso. |
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 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
:
{
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, 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
Campos | |
---|---|
min_break_duration |
Obligatorio. Duración mínima de la pausa para esta restricción. No negativo. Consulta la descripción de |
max_inter_break_duration |
Obligatorio. El intervalo máximo permitido de cualquier intervalo de tiempo de la ruta que no incluya, al menos, una pausa de |
DataFormat
Formatos de datos para archivos de entrada y salida.
Enumeradores | |
---|---|
DATA_FORMAT_UNSPECIFIED |
El valor no es válido. El formato no debe ser UNSPECIFIED. |
JSON |
JavaScript Object Notation (Notación de objetos de JavaScript). |
PROTO_TEXT |
Formato de texto de los búferes de protocolo Consulta https://protobuf.dev/reference/protobuf/textformat-spec/. |
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 soft_max_meters
como cost_per_kilometer_above_soft_max
, y estos no deben ser negativos.
Campos | |
---|---|
max_meters |
Un límite estricto que restringe la distancia a max_meters como máximo El límite no debe ser negativo. |
soft_max_meters |
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 los soft_max_meters están definidos, deben ser inferiores a max_meters y no deben ser negativos. |
cost_per_kilometer_above_soft_max |
Costo por kilómetro acumulado 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. 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. El URI de un objeto de Google Cloud Storage con el formato |
InjectedSolutionConstraint
Solución insertada en la solicitud, incluida la información sobre qué visitas y cómo deben hacerlo.
Campos | |
---|---|
routes[] |
Rutas de la solución que se inyectará. Algunas rutas pueden omitirse en la solución original. Las rutas y los envíos omitidos deben cumplir con las suposiciones de validez básicas indicadas para |
skipped_shipments[] |
Envíos omitidos de la solución que se inyecta. Algunos pueden omitirse de la solución original. Consulta el campo |
constraint_relaxations[] |
Especifica cuándo y cuánto debe flexibilizar las restricciones para cero o más grupos de vehículos. Si este campo está vacío, todas las rutas no vacías para vehículos tienen todas las limitaciones. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de las visitas y en qué nivel. Los envíos que aparecen en el campo skipped_shipment
solo se pueden omitir; es decir, no se pueden realizar.
Campos | |
---|---|
relaxations[] |
Todas las flexiones de las restricciones de visita 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 El índice de un vehículo 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 totalmente limitadas, y no se podrán insertar ni agregar visitas nuevas a esas rutas. Además, las horas de inicio y finalización de un vehículo en routes
tienen limitaciones totales, a menos que el vehículo esté vacío (es decir, no tiene visitas y se configuró used_if_route_is_empty
como falso en el modelo).
relaxations(i).level
especifica el nivel de relajación de restricciones aplicado a una visita #j que cumple con lo siguiente:
route.visits(j).start_time >= relaxations(i).threshold_time
Yj + 1 >= relaxations(i).threshold_visit_count
De manera similar, el inicio del vehículo se relaja hasta relaxations(i).level
si cumple con lo siguiente:
vehicle_start_time >= relaxations(i).threshold_time
Yrelaxations(i).threshold_visit_count == 0
y la finalización del vehículo estará relajado hastarelaxations(i).level
si cumple con lo siguiente: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 con el threshold_time
, agrega dos relaxations
con el mismo level
: uno solo con threshold_visit_count
establecido y el otro solo con threshold_time
. Si una visita satisface 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 y hasta su finalización, 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 tiempo y la secuencia de visitas a la ruta que no cumplen con las condiciones de umbral de cualquier relaxations
están completamente limitados, y no se pueden insertar visitas en estas secuencias. Además, si el arranque o la finalización de un vehículo no cumplen con las condiciones de relajación, el tiempo será fijo, a menos que el vehículo esté vacío.
Campos | |
---|---|
level |
El nivel de relajación de restricciones que se aplica cuando se cumplen las condiciones en |
threshold_time |
Tiempo a partir del cual se puede aplicar la relajación |
threshold_visit_count |
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 se producen cuando esta satisface las condiciones de umbral.
La siguiente enumeración ordena el aumento de la relajación.
Enumeradores | |
---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: no hay restricciones de relajación, es decir, todas las visitas están totalmente limitadas. Este valor no se debe usar explícitamente en |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Las horas de inicio y finalización del vehículo y las de inicio y finalización del vehículo serán relajadas, pero cada visita permanece vinculada al mismo vehículo y se debe respetar la secuencia de visitas: no se puede insertar ninguna visita entre ellos ni antes. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD , pero la secuencia de visitas también es relajada: las visitas permanecen vinculadas simplemente al vehículo. |
RELAX_ALL_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , pero el vehículo también está tranquilo: las visitas son completamente gratuitas a la hora límite o después de ella, 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 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 un encabezado opcional).
Campos | |
---|---|
lat_lng |
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. |
OptimizeToursRequest
Solicitud para que se le presente a un solucionador de problemas de optimización de recorridos que define el modelo de envío que se debe resolver y los parámetros de optimización.
Campos | |
---|---|
parent |
Obligatorio. Proyecto de destino o ubicación para hacer una llamada. Formato: * Si no se especifica una ubicación, se elegirá una automáticamente. |
timeout |
Si se establece este tiempo de espera, el servidor mostrará una respuesta antes de que finalice el tiempo de espera o de que se alcance el plazo del servidor para las solicitudes síncronas, lo que ocurra primero. Para las solicitudes asíncronas, el servidor generará una solución (si es posible) antes de que haya transcurrido el tiempo de espera. |
model |
Modelo de envío a resolver. |
solving_mode |
De forma predeterminada, el modo de resolución es |
search_mode |
Modo de búsqueda que se usa para resolver la solicitud. |
injected_first_solution_routes[] |
Guiar al algoritmo de optimización para que encuentre una primera solución similar a una anterior El modelo se ve limitado cuando se compila la primera solución. Cualquier envío que no se realice en una ruta se omitirá implícitamente en la primera solución, pero se podrán 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 necesariamente se devuelve un error de validación y, en su lugar, se puede mostrar un error que indica inviabilidad. |
injected_solution_constraint |
Restringir 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 se deben completar, pero que no se deben modificar. Si la solución inyectada no es factible, no necesariamente se devuelve un error de validación y, en su lugar, se puede mostrar un error que indica inviabilidad. |
refresh_details_routes[] |
Si este campo no está vacío, se actualizarán las rutas proporcionadas, sin modificar su secuencia subyacente de visitas o 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 a rutas o rutas completas de una solución inyectada puede afectar 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 |
Considera la estimación del tráfico para calcular los campos |
populate_polylines |
Si es verdadero, las polilíneas se propagarán en |
populate_transition_polylines |
Si es verdadero, las polilíneas se propagarán en la respuesta |
allow_large_deadline_despite_interruption_risk |
Si se configura, 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 de 30 minutos. Ten en cuenta que las solicitudes de larga duración tienen un riesgo de interrupción significativamente mayor (pero aún pequeño). |
use_geodesic_distances |
Si es verdadero, 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 usando distancias geodésicas con una velocidad definida por |
label |
Etiqueta que puede usarse 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_ATTRIBUTE como detalle de error de BadRequest (https://cloud.google.com/apis/design/errors#error_details), a menos que resolviendo_mode=VALIDATE_ONLY: consulte el campo |
SearchMode
Modo que define el comportamiento de la búsqueda, sacrificando latencia de la calidad de la solución. En todos los modos, se aplica el plazo límite de solicitud global.
Enumeradores | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Modo de búsqueda sin especificar, equivalente a RETURN_FAST . |
RETURN_FAST |
Detén la búsqueda después de encontrar la primera buena solución. |
CONSUME_ALL_AVAILABLE_TIME |
Dedica todo el tiempo disponible a buscar mejores soluciones. |
SolvingMode
Define la manera en que el solucionador 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.
Enumeradores | |
---|---|
DEFAULT_SOLVE |
Resuelve el modelo. |
VALIDATE_ONLY |
Solo valida el modelo sin resolverlo: propaga tantos OptimizeToursResponse.validation_errors como sea posible. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Solo propaga IMPORTANTE: Aquí no se devuelven todos los envíos inviables, sino solo los que se detecten 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 general 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[] |
La lista de todos los envíos omitidos. |
validation_errors[] |
Lista de todos los errores de validación que pudimos detectar de forma independiente. Consulta la explicación de "VARIOS ERRORES" para el 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 |
Son datos agregados sobre las rutas. Cada métrica es la suma (o el máximo, para las cargas) en 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 |
earliest_vehicle_start_time |
La hora de inicio más temprana de un vehículo usado, que se calcula como el mínimo de todos los vehículos usados de |
latest_vehicle_end_time |
Es la hora de finalización más reciente de un vehículo usado, que se calcula como el máximo de |
costs |
Costo de la solución, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de acceso proto, relacionadas 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 solución. En otras palabras, costes["model.shipments.pickups.cost"] es la suma de todos los costos de retiro durante la solución. Todos los costos definidos en el modelo se informan en detalle aquí, a excepción de los costos relacionados con TransitionAttributes que solo se informan de manera agregada a partir del 2022/01. |
total_cost |
Es el costo total de la solución. Es la suma de todos los valores del mapa de costos. |
OptimizeToursValidationError
Describe un error que se encontró al validar un OptimizeToursRequest
.
Campos | |
---|---|
code |
Un error de validación se define mediante el par ( En otros campos (a continuación), se proporciona 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 son “fatales”, lo que significa que detienen todo el proceso de validación. Este es el caso de los errores ESTABILIDAD: REFERENCIA: 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° 4 y al primer retiro del envío n° 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 STABILITY: No es estable: el mensaje de error asociado a un |
offending_values |
Puede contener los valores de los campos. 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 de este archivo y sigue la misma estructura jerárquica. Por ejemplo, podemos especificar el elemento n.o 2 de start_time_windows
del vehículo n.o 5 usando lo siguiente:
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 amontonar el mensaje.
Campos | |
---|---|
name |
Nombre del campo, p.ej., "vehículos". |
sub_field |
Subcampo anidado de forma recursiva, 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. Es 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. |
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).
Campos | |
---|---|
display_name |
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. |
load_demands |
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. |
allowed_vehicle_indices[] |
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 |
costs_per_vehicle[] |
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 |
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 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. |
pickup_to_delivery_time_limit |
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. |
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 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 |
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 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. |
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 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. |
Carga
Cuando se realiza una visita, se puede agregar un importe predefinido a la carga del vehículo si se trata de un lugar de encuentro o restar si se trata de una entrega. Este mensaje define dicho importe. Consulta los load_demands
.
Campos | |
---|---|
amount |
Puede variar la cantidad de carga del vehículo que realiza la visita correspondiente. Dado que 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
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).
Campos | |
---|---|
arrival_location |
Es la ubicación geográfica a la que llega el vehículo cuando se realiza este |
arrival_waypoint |
El punto de referencia al que llega el vehículo cuando realiza esta |
departure_location |
Es la ubicación geográfica donde sale el vehículo después de completar este |
departure_waypoint |
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. |
time_windows[] |
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 |
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 |
load_demands |
Carga las demandas de esta solicitud de visita. Es similar al campo |
visit_types[] |
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 |
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 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
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. |
global_start_time |
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 |
global_end_time |
Si no se establece, se usa 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 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 |
duration_distance_matrices[] |
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:
|
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 shipping_types incompatibles (consulta |
shipment_type_requirements[] |
Conjuntos de requisitos de |
precedence_rules[] |
Conjunto de reglas de prioridad que se deben aplicar 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 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. |
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.
Campos | |
---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener tantos elementos como |
vehicle_start_tag |
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.
Campos | |
---|---|
durations[] |
Valores de duración de una fila determinada. Debe tener tantos elementos como |
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 |
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 offset_duration
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.
Campos | |
---|---|
first_is_delivery |
Indica si el "primer" evento es una entrega. |
second_is_delivery |
Indica si el "segundo" evento es una entrega. |
offset_duration |
El desplazamiento entre el "primer" y el "segundo" evento Puede ser negativo. |
first_index |
Índice de envío del "primer" evento. Se debe especificar este campo. |
second_index |
Índice de envío del evento "segundo". Se debe especificar este campo. |
ShipmentRoute
La ruta de un vehículo se puede descomponer, 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 marcamos la diferencia entre los siguientes puntos:
- "eventos puntuales", como el inicio y la finalización del vehículo, y el inicio y la finalización de cada visita (también conocidas como la llegada y la salida) Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre visitas. Aunque 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, se trata de transiciones n + 1.
- Una visita siempre está rodeada por una transición anterior (mismo índice) y una transición posterior (índice + 1).
- Al inicio del vehículo, siempre le sigue la transición n° 0.
- La transición n.o n precedida siempre por la finalización del vehículo.
Acercando 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, a continuación te explicamos cómo se pueden organizar los VIAJES, LAS PAUSAS, LOS RETRASOS y LA ESPERA durante una transición.
- No se superponen.
- El RETRASO es único y debe ser un período continuo justo antes de la próxima visita (o la finalización del vehículo). Por lo tanto, es suficiente conocer la duración del retraso para conocer su hora de inicio y finalización.
- Las RUTAS son períodos de tiempo contiguos y no superpuestos. La respuesta especifica la hora de inicio y la duración de cada pausa.
- TRAVEL y WAIT son “interrumpibles”: pueden interrumpirse varias veces durante esta transición. Los clientes pueden suponer que los viajes se realizan "lo antes posible" y que "esperar" ocupa 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 |
El vehículo que realiza la ruta, identificado por su índice en el origen |
vehicle_label |
Etiqueta del vehículo que realiza esta ruta, que equivale a |
vehicle_start_time |
Hora a la que el vehículo comienza su recorrido. |
vehicle_end_time |
Hora a la que el vehículo finaliza su recorrido. |
visits[] |
Secuencia ordenada de visitas que representan una ruta. Visits[i] es la i-ésima visita de la ruta. Si este campo está vacío, se considera que el vehículo no está en uso. |
transitions[] |
Lista ordenada de transiciones para la ruta. |
has_traffic_infeasibilities |
Cuando el valor de
Es probable que la llegada a next_visit sea posterior a su período actual debido a la mayor estimación del tiempo de viaje |
route_polyline |
Representación de polilínea codificada de la ruta. Este campo solo se propaga si se configura |
breaks[] |
Hay descansos programados para el vehículo que realiza esta ruta. La secuencia |
metrics |
Métricas de duración, distancia y carga para esta ruta. Los campos de |
route_costs |
Costo de la ruta, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de acceso proto, relacionadas 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, costos["model.shipments.pickups.cost"] es la suma de todos los costos de retiro a lo largo de la ruta. Todos los costos definidos en el modelo se informan en detalle aquí, a excepción de los costos relacionados con TransitionAttributes que solo se informan de manera agregada a partir del 2022/01. |
route_total_cost |
Costo total de la ruta. Es la suma de todos los costos en el mapa de costos. |
Receso
Datos que representan la ejecución de un salto.
Campos | |
---|---|
start_time |
Hora de inicio del descanso. |
duration |
Es la duración de la pausa. |
EncodedPolyline
Es la 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 |
Es una cadena que representa puntos codificados de la polilínea. |
Transición
Realizar la transición entre dos eventos de la ruta Consulta la descripción de ShipmentRoute
.
Si el vehículo no tiene start_location
ni 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 aplicadas a esta transición. Si corresponde, el retraso comienza exactamente |
break_duration |
Es la 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 espera corresponde al tiempo de inactividad 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, que se proporciona para tu comodidad. Equivale a lo siguiente:
|
start_time |
Es la hora de inicio de esta transición. |
route_polyline |
Representación codificada de polilínea de la ruta seguida durante la transición. Este campo solo se propaga si se configura |
vehicle_loads |
Los vehículos se cargan durante esta transición para cada tipo que aparece en la Las cargas de 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 |
Es la cantidad de carga en el 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 un Shipment
.
Campos | |
---|---|
shipment_index |
Índice del campo |
is_pickup |
Si es verdadero, la visita corresponde a una partida 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 de esa fecha a la ubicación de la visita. Los horarios coinciden con |
load_demands |
La demanda de carga total de visitas como la suma del envío y la solicitud de visita |
detour |
Tiempo adicional de desvío debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera que inducen los períodos. Si la visita es una entrega, el desvío se calcula a partir de la visita de retiro correspondiente y equivale a lo siguiente:
De lo contrario, se calcula a partir del vehículo
|
shipment_label |
Copia del |
visit_label |
Copia del |
ShipmentTypeIncompatibility
Especifica las incompatibilidades entre 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.
Campos | |
---|---|
types[] |
Lista de tipos incompatibles. Dos envíos con |
incompatibility_mode |
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 según su tipo de envío. El modo de requisitos define los detalles del requisito.
Campos | |
---|---|
required_shipment_type_alternatives[] |
Lista de tipos de envío alternativos que requiere la |
dependent_shipment_types[] |
Todos los envíos con un tipo en el campo NOTA: No se permiten cadenas de requisitos en las que un |
requirement_mode |
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. |
SkippedShipment
Especifica los detalles de los envíos no realizados en una solución. En 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 los motivos que explican por qué se omitió el envío. Consulta el comentario de más arriba |
Motivo
Aquí se indicarán los motivos por los que se omitió el envío. 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, todos los campos son 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 se superaría la capacidad de las “Manzanas” de al menos un vehículo (incluido el vehículo 1), se superaría la capacidad “Peras” de al menos un vehículo (incluido el vehículo 3) y se superaría el límite de distancia de al menos un vehículo (incluido el vehículo 1).
Campos | |
---|---|
code |
Consulta los comentarios de Code. |
example_exceeded_capacity_type |
Si el código de motivo es |
example_vehicle_index |
Si el motivo está relacionado con una incompatibilidad de un vehículo de envío, este campo proporciona el índice de un vehículo relevante. |
Código
Código que identifica el tipo de motivo El orden aquí no tiene sentido. En particular, no indica si un motivo determinado aparecerá antes que otro en la solución, si se aplican ambos.
Enumeradores | |
---|---|
CODE_UNSPECIFIED |
Nunca debe usarse. Si no podemos comprender por qué se omitió un envío, simplemente te devolvemos un conjunto vacío de motivos. |
NO_VEHICLE |
No hay ningún vehículo en el modelo que haga 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 la 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 los Nota: El tiempo de viaje se calcula en el mejor de los casos, es decir, como una distancia geodésica x 36 m/s (aproximadamente 130 km/hora). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual que lo anterior, pero solo comparamos la duración mínima de viaje y el travel_duration_limit del vehículo. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
En el mejor de los casos, el vehículo no puede realizar este envío (consulta CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT para obtener el cálculo del tiempo) si comienza la hora de inicio más temprana. En este caso, el tiempo total provocaría que el vehículo finalice después de la ú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
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, 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 de la ventana de tiempo flexible, soft_start_time
, expresa una preferencia para que el evento ocurra a partir de soft_start_time
, ya que incurre en un costo proporcional al tiempo antes de soft_start_time que ocurra el evento. El límite superior de la ventana de tiempo flexible, soft_end_time
, expresa una preferencia para que el evento ocurra a partir del soft_end_time
o antes, ya que incurre en un costo proporcional al tiempo después de que ocurre el evento soft_end_time
. 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` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Campos | |
---|---|
start_time |
La hora de inicio del período de tiempo difícil. Si no se especifica, se establecerá en |
end_time |
La hora de finalización del período difícil Si no se especifica, se establecerá en |
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 |
Un costo por hora agregado a otros costos en el modelo si el evento ocurre antes de soft_start_time, que se calcula de la siguiente manera:
Este costo debe ser positivo y el campo solo se puede configurar si se configuró soft_start_time. |
cost_per_hour_after_soft_end_time |
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ó |
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”).
Campos | |
---|---|
src_tag |
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 |
excluded_src_tag |
Consulta los |
dst_tag |
Una visita a destino o un final de vehículo coincide si su |
excluded_dst_tag |
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. |
cost_per_kilometer |
Especifica un costo por kilómetro aplicado a la distancia recorrida durante esta transición. Suma a cualquier |
distance_limit |
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. |
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 start_location
y finaliza en end_location
. Una ruta es una secuencia de visitas (consulta ShipmentRoute
).
Campos | |
---|---|
display_name |
Es el nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travel_mode |
El medio de transporte que afecta las rutas utilizables por el vehículo y su velocidad. Consulta también |
start_location |
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 |
start_waypoint |
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 |
end_location |
Es la ubicación geográfica donde termina el vehículo después de completar su último |
end_waypoint |
Punto de referencia que representa una ubicación geográfica donde termina el vehículo después de completar su último |
start_tags[] |
Especifica las etiquetas adjuntas al comienzo de la ruta del vehículo. No se permiten cadenas vacías o 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 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.
|
end_time_windows[] |
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.
|
unloading_policy |
Se aplicó una política de descarga en el vehículo. |
load_limits |
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 |
cost_per_hour |
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 |
cost_per_traveled_hour |
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 |
cost_per_kilometer |
Costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en |
fixed_cost |
Se aplica un costo fijo si se usa este vehículo para realizar un envío. |
used_if_route_is_empty |
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 |
route_duration_limit |
El límite 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 objeto |
extra_visit_duration_for_visit_type |
Especifica un mapa de las cadenas visit_types a las 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. |
break_rule |
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 |
travel_duration_multiple |
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 |
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.
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 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,
|
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 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. |
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 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 máxima de carga aceptable. |
Intervalo
Intervalo de cantidades de carga aceptables
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, |
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 unloading_policy
.
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 |
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.
Campos | |
---|---|
side_of_road |
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. |
place_id |
Es el ID de lugar del lugar de interés asociado con el punto de referencia. |