Í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 de los vehículos.
Validez de ciertos tipos de campos:
google.protobuf.Timestamp
- Las horas se expresan 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 deben establecerse en 0 o no establecerse.
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 deben establecerse en 0 o no establecerse.
google.type.LatLng
- La latitud debe estar en [-90.0, 90.0].
- La longitud 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 los vehículos para uno o más mensajes Este método es una operación de larga duración (LRO). Las entradas para la optimización (mensajes 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 para ShipmentRoute
(resp. para OptimizeToursResponse
en todos los elementos Transition
o Visit
(resp. en todos los elementos ShipmentRoute
).
Campos | |
---|---|
performed_ |
Cantidad de envíos realizados. Ten en cuenta que un par de recogida y entrega solo se cuenta una vez. |
travel_ |
Es la duración total del viaje de una ruta o una solución. |
wait_ |
Es la duración total de espera de una ruta o una solución. |
delay_ |
Es la duración total de la demora de una ruta o una solución. |
break_ |
Es la duración total de la pausa de una ruta o una solución. |
visit_ |
Es la duración total de la visita de una ruta o una solución. |
total_ |
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_ |
Es la distancia total de viaje de una ruta o una solución. |
max_ |
Carga máxima alcanzada en toda la ruta (resp., solución), para cada una de las cantidades de esta ruta (resp., solución), calculada como el máximo de todos los |
BatchOptimizeToursMetadata
Este tipo no tiene campos.
Metadatos de la operación para las llamadas a BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Solicita la optimización por lotes de 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á una región automáticamente. |
model_ |
Obligatorio. Información de entrada y salida de cada modelo de compra, como rutas de acceso a archivos y formatos de datos |
AsyncModelConfig
Información para resolver un modelo de optimización de forma asíncrona.
Campos | |
---|---|
display_ |
Opcional. Es el nombre del modelo definido por el usuario, que los usuarios pueden usar como alias para hacer un seguimiento de los modelos. |
input_ |
Obligatorio. Información sobre el modelo de entrada. |
output_ |
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 después de que se completa.
BreakRule
Son reglas para generar pausas de tiempo para un vehículo (p.ej., pausas para el almuerzo). Una pausa es un período contiguo durante el cual el vehículo permanece inactivo en su posición actual y no puede realizar ninguna visita. Puede ocurrir una pausa en los siguientes casos:
- durante el viaje entre dos visitas (que incluye el tiempo justo antes o después de una visita, pero no en medio de una visita), en cuyo caso se extiende el tiempo de tránsito correspondiente entre las visitas,
- o antes de que se encienda el vehículo (es posible que el vehículo no se encienda en medio de una pausa), en cuyo caso no afecta la hora de inicio del vehículo.
- o después de que finalice el viaje (también con la hora de finalización del viaje).
Campos | |
---|---|
break_ |
Es la secuencia de pausas. Consulta el mensaje |
frequency_ |
Es posible que se apliquen varios |
BreakRequest
Se debe conocer de antemano la secuencia de descansos (es decir, su cantidad y orden) que se aplica a cada vehículo. Los BreakRequest
repetidos definen esa secuencia, en el orden en que deben ocurrir. Sus ventanas de tiempo (earliest_start_time
/ latest_start_time
) pueden superponerse, pero deben ser compatibles con el pedido (esto se verifica).
Campos | |
---|---|
earliest_ |
Obligatorio. Límite inferior (inclusive) del inicio de la pausa. |
latest_ |
Obligatorio. Es el límite superior (inclusivo) del inicio de la pausa. |
min_ |
Obligatorio. Es la 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 mínima de pausas, como "Debe haber una pausa de al menos 1 hora cada 12 horas". Suponiendo que esto se pueda interpretar como "Dentro de cualquier período deslizante de 12 horas, debe haber al menos una pausa de una hora", ese ejemplo se traduciría en el siguiente FrequencyConstraint
:
{
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 que ya se especificaron en BreakRequest
.
En la práctica, un FrequencyConstraint
puede aplicarse a pausas no consecutivas. Por ejemplo, el siguiente programa respeta el ejemplo de "1 h cada 12 h":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Campos | |
---|---|
min_ |
Obligatorio. Es la duración mínima de la pausa para esta restricción. No negativo. Consulta la descripción de |
max_ |
Obligatorio. Es la duración máxima permitida de cualquier intervalo de tiempo en la ruta que no incluya, al menos de forma parcial, una pausa de |
DataFormat
Formatos de datos para archivos de entrada y salida.
Enumeraciones | |
---|---|
DATA_FORMAT_UNSPECIFIED |
Valor no válido, el formato no debe ser UNSPECIFIED. |
JSON |
Notación de objetos de JavaScript. |
PROTO_TEXT |
Formato de texto de Protocol Buffers. 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 duro o blando.
Si se define un límite flexible, se deben definir soft_max_meters
y cost_per_kilometer_above_soft_max
, y no deben ser negativos.
Campos | |
---|---|
max_ |
Es un límite estricto que restringe la distancia a un máximo de max_meters. El límite no debe ser negativo. |
soft_ |
Un límite flexible no aplica un límite de distancia máxima, pero cuando se incumple, genera un costo que se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, soft_max_meters debe ser inferior a max_meters y no debe ser un valor negativo. |
cost_ |
El costo por kilómetro incurrido aumenta hasta
Este costo no se admite en |
cost_ |
Se genera un costo por kilómetro si la distancia supera el límite de
El costo no debe ser negativo. |
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. 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[] |
Son las rutas de la solución que se insertarán. Es posible que se omitan algunas rutas de la solución original. Las rutas y los envíos omitidos deben satisfacer las suposiciones de validez básicas que se enumeran para |
skipped_ |
Se omitieron los envíos de la solución para insertar. Es posible que se omitan algunos de la solución original. Consulta el campo |
constraint_ |
Para cero o más grupos de vehículos, especifica cuándo y en qué medida se deben relajar las restricciones. Si este campo está vacío, todas las rutas de vehículos que no estén vacías estarán completamente restringidas. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de visitas y hasta qué nivel. Los envíos que se indican en el campo skipped_shipment
se omiten, es decir, no se pueden realizar.
Campos | |
---|---|
relaxations[] |
Todas las relajaciones de las restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en |
vehicle_ |
Especifica los índices de vehículos a los que se aplica la restricción de visita Un índice de vehículo se asigna de la misma manera que |
Relajación
Si relaxations
está vacío, la hora de inicio y la secuencia de todas las visitas en routes
están completamente restringidas y no se pueden insertar ni agregar visitas nuevas a esas rutas. Además, la hora de inicio y finalización de un vehículo en routes
está completamente restringida, a menos que el vehículo esté vacío (es decir, no tenga visitas y tenga used_if_route_is_empty
establecido como falso en el modelo).
relaxations(i).level
especifica el nivel de relajación de restricciones aplicado a una visita #j que satisface 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 a 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 se relaja arelaxations(i).level
si se 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 threshold_visit_count
O threshold_time
, agrega dos relaxations
con el mismo level
: uno con solo threshold_visit_count
establecido y el otro con solo threshold_time
establecido. Si una visita satisface las condiciones de varios relaxations
, se aplica el nivel más flexible. Como resultado, desde el inicio del vehículo hasta las visitas a la ruta hasta el final del vehículo, 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 las visitas a la ruta que no satisfacen las condiciones de umbral de ningún relaxations
están completamente restringidos y no se pueden insertar visitas en estas secuencias. Además, si el inicio o el final de un vehículo no satisface las condiciones de ninguna relajación, la hora es fija, a menos que el vehículo esté vacío.
Campos | |
---|---|
level |
Es el nivel de relajación de restricciones que se aplica cuando se cumplen las condiciones en |
threshold_ |
Es la hora en la que se puede aplicar la relajación |
threshold_ |
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 enumeración que aparece a continuación está en orden de relajación creciente.
Enumeraciones | |
---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: No se relajan las restricciones, es decir, todas las visitas están completamente restringidas. Este valor no se debe usar de forma explícita 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á respetar 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 RELAX_VISIT_TIMES_AFTER_THRESHOLD , pero la secuencia de visitas también es flexible: solo este vehículo puede realizar las visitas, pero es posible que no se realicen. |
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_ |
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_ |
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_ |
Son las coordenadas geográficas del punto de referencia. |
heading |
Es el rumbo de la brújula asociado con la dirección del flujo de tráfico. Este valor se usa para especificar el lado de la ruta que se usará para la partida y la llegada. Los valores de rumbo pueden ser de 0 a 360, en los que 0 especifica un rumbo hacia el norte, 90 especifica un rumbo hacia el este, etcétera. |
OptimizeToursRequest
Es una solicitud que se envía a un solucionador 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 transcurra el período de tiempo de espera o se alcance la fecha límite 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 para resolver. |
solving_ |
De forma predeterminada, el modo de resolución es |
search_ |
Es el modo de búsqueda que se usa para resolver la solicitud. |
injected_ |
Guía al algoritmo de optimización para que encuentre una primera solución que sea similar a una solución anterior. El modelo se ve limitado cuando se compila la primera solución. Los envíos que no se realizan en una ruta se omiten de forma implícita en la primera solución, pero se pueden realizar en soluciones sucesivas. La solución debe satisfacer algunas suposiciones básicas de validez:
Si la solución insertada no es factible, no se muestra necesariamente un error de validación, sino que se puede mostrar un error que indica que no es factible. |
injected_ |
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 se completarán, pero que no se deben modificar. Si la solución insertada no es factible, no se muestra necesariamente un error de validación, sino que se puede mostrar un error que indica que no es factible. |
refresh_ |
Si no están vacías, se actualizarán las rutas determinadas 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 noviembre de 2020, solo se propagan los polilíneas de las rutas no vacías y se requiere que Es posible que los campos Este campo no se debe usar junto con
|
interpret_ |
Si es verdadero, haz lo siguiente:
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 visitas a rutas o 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_ |
Ten en cuenta la estimación de tráfico cuando calcules los campos |
populate_ |
Si es verdadero, se propagarán los polilíneas en las |
populate_ |
Si es verdadero, los polilíneas y los tokens de ruta se propagarán en la respuesta |
allow_ |
Si se establece, la solicitud puede tener una fecha límite (consulta https://grpc.io/blog/deadlines) de hasta 60 minutos. De lo contrario, el plazo máximo es de 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_ |
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 con distancias geodésicas con una velocidad definida por |
label |
Etiqueta que se puede usar para identificar esta solicitud, que se informa en |
geodesic_ |
Cuando |
max_ |
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 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 |
Es un 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 el solucionador debe controlar 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 tantos OptimizeToursResponse.validation_errors como sea 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
Es la respuesta después de resolver un problema de optimización de recorridos que contiene las rutas que sigue cada vehículo, los envíos que se omitieron y el costo general de la solución.
Campos | |
---|---|
routes[] |
Son las rutas calculadas para cada vehículo. La ruta i corresponde al vehículo i en el modelo. |
request_ |
Es una copia de |
skipped_ |
La lista de todos los envíos omitidos |
validation_ |
Es la lista de todos los errores de validación que pudimos detectar de forma independiente. Consulta la explicación de "MULTIPLE ERRORS" para el mensaje |
metrics |
Métricas de duración, distancia y uso de esta solución. |
Métricas
Métricas generales, agregadas en todas las rutas
Campos | |
---|---|
aggregated_ |
Se agregan en las rutas. Cada métrica es la suma (o el máximo, para las cargas) de todos los campos |
skipped_ |
Cantidad de envíos obligatorios omitidos. |
used_ |
Es la cantidad de vehículos utilizados. Nota: Si la ruta de un vehículo está vacía y |
earliest_ |
Es la hora de inicio más antigua de un vehículo usado, calculada como el mínimo de todos los vehículos usados de |
latest_ |
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 |
Es el costo de la solución, desglosado por campos de solicitud 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 solución. En otras palabras, costs["model.shipments.pickups.cost"] es la suma de todos los costos de retiro de la solución. Todos los costos definidos en el modelo se registran en detalle aquí, a excepción de los costos relacionados con TransitionAttributes, que solo se registran de forma agregada a partir de 1/2022. |
total_ |
Es el costo total de la solución. Es la suma de todos los valores del mapa de costos. |
OptimizeToursValidationError
Describe un error o una advertencia que se encontró cuando se validó un OptimizeToursRequest
.
Campos | |
---|---|
code |
Un error de validación se define por el par ( Los campos que siguen a esta sección proporcionan más contexto sobre el error. MULTIPLE ERRORS: Cuando hay varios errores, el proceso de validación intenta mostrar 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 ESTABILIDAD: |
display_ |
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, para hacer referencia al vehículo n° 4 y a la primera recolección del envío n° 2, puedes hacerlo de la siguiente manera:
Sin embargo, ten en cuenta que la cardinalidad de |
error_ |
Es una cadena legible que describe el error. Hay una asignación de uno a uno entre ESTABILIDAD: No es estable: el mensaje de error asociado a un |
offending_ |
Puede contener los valores de los campos. Esta opción no siempre está disponible. No debes confiar en él y solo debes usarlo para la depuración manual de modelos. |
FieldReference
Especifica un contexto para el error de validación. Un FieldReference
siempre se refiere a un campo determinado en este archivo y sigue la misma estructura jerárquica. Por ejemplo, podemos especificar el elemento 2 de start_time_windows
del vehículo 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 esté sobrecargado.
Campos | |
---|---|
name |
Es el nombre del campo, p.ej., "vehicles". |
sub_ |
Subcampo anidado de forma recursiva, si es necesario |
Campo de unión
|
|
index |
Es el índice del campo si se repite. |
key |
Es clave si el campo es un mapa. |
OutputConfig
Especifica un destino para los resultados de [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_ |
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_ |
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 cuando se calculan las rutas de los vehículos. Esto es similar a RouteModifiers
en la API de Routes Preferred de Google Maps Platform. Consulta https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
Campos | |
---|---|
avoid_ |
Especifica si se deben evitar las rutas con peaje cuando sea razonable. Se dará preferencia a las rutas que no contengan rutas con peaje. Solo se aplica a los modos de viaje motorizados. |
avoid_ |
Especifica si se deben evitar las autopistas cuando sea razonable. Se dará preferencia a las rutas que no contengan autopistas. Solo se aplica a los modos de viaje motorizados. |
avoid_ |
Especifica si se deben evitar los ferris cuando sea razonable. Se dará preferencia a las rutas que no incluyan viajes en transbordadores. Solo se aplica a los modos de viaje motorizados. |
avoid_ |
Opcional. Especifica si se debe evitar navegar en interiores cuando sea razonable. Se dará preferencia a las rutas que no contengan navegación en interiores. Solo se aplica al modo de viaje |
Envío
Es el envío de un solo artículo, desde uno de sus puntos de retiro hasta uno de sus puntos de entrega. Para que el envío se considere realizado, un vehículo único debe visitar una de sus ubicaciones de retiro (y disminuir sus capacidades de repuestos según corresponda) y, luego, visitar una de sus ubicaciones de entrega más adelante (y, por lo tanto, volver a aumentar sus capacidades de repuestos según corresponda).
Campos | |
---|---|
display_ |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es un conjunto de alternativas de retiro asociadas al envío. Si no se especifica, el vehículo solo debe visitar una ubicación que corresponda a las entregas. |
deliveries[] |
Es el conjunto de alternativas de entrega asociadas al envío. Si no se especifica, el vehículo solo debe visitar una ubicación que corresponda a los puntos de partida. |
load_ |
Cargas del envío (por ejemplo, peso, volumen, cantidad de palés, etcétera) Las claves del mapa deben ser identificadores que describan el tipo de carga correspondiente, lo ideal es que también incluyan las unidades. Por ejemplo: "weight_kg", "volume_gallons", "pallet_count", etc. Si una clave determinada no aparece en el mapa, la carga correspondiente se considera nula. |
allowed_ |
Es el conjunto de vehículos que pueden realizar este envío. Si está vacío, todos los vehículos pueden realizarlo. Los vehículos se indican por su índice en la lista |
costs_ |
Especifica el costo que se genera cuando cada vehículo entrega este envío. Si se especifica, debe tener UNO de los siguientes elementos:
Estos costos deben estar en la misma unidad que |
costs_ |
Índices de los vehículos a los que se aplica |
pickup_ |
Especifica el tiempo máximo de desvío absoluto en comparación con la ruta más corta desde la partida hasta la entrega. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recogida y una entrega. Por ejemplo, supongamos que t es el tiempo más corto que se tarda en ir de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, la configuración de
Si se especifican los límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de recolección y entrega posibles. A partir de octubre de 2017, solo se admiten desvíos cuando las duraciones de viaje no dependen de los vehículos. |
pickup_ |
Especifica la duración máxima desde el inicio del retiro hasta el inicio de la entrega de un envío. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recolección y una entrega. Esto no depende de las alternativas seleccionadas para el retiro y la entrega ni de la velocidad del vehículo. Esto se puede especificar junto con las restricciones de desvío máximo: la solución respetará ambas especificaciones. |
shipment_ |
Es una cadena no vacía que especifica un “tipo” para este envío. Esta función se puede usar para definir incompatibilidades o requisitos entre Se diferencia de |
label |
Especifica una etiqueta para este envío. Esta etiqueta se informa en la respuesta en el |
ignore |
Si es verdadero, omite este envío, pero no apliques un Si se ignora un envío, se produce un error de validación cuando hay algún Se permite ignorar un envío que se realiza en |
penalty_ |
Si no se completa el envío, esta penalización se agrega al costo general de las rutas. Un envío se considera completado si se visita una de sus alternativas de retiro y entrega. El costo se puede expresar en la misma unidad que se usa para todos los demás campos relacionados con el costo en el modelo y debe ser positivo. IMPORTANTE: Si no se especifica esta penalización, se considera infinita, es decir, el envío debe completarse. |
pickup_ |
Especifica el tiempo máximo de desvío relativo en comparación con la ruta más corta desde la recogida hasta la entrega. Si se especifica, debe ser un número no negativo, y el envío debe contener al menos una recolección y una entrega. Por ejemplo, supongamos que t es el tiempo más corto que se tarda en ir de la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, la configuración de
Si se especifican los límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de recolección y entrega posibles. A partir de octubre de 2017, solo se admiten desvíos cuando las duraciones de viaje no dependen de los vehículos. |
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 |
Es el importe en el que variará la carga del vehículo que realiza la visita correspondiente. Dado que es un número entero, se recomienda a los usuarios que elijan una unidad adecuada para evitar la pérdida de precisión. Debe ser ≥ 0. |
VisitRequest
Es una solicitud de visita que puede realizar un vehículo: tiene una geolocalización (o dos, consulta a continuación), horarios de apertura y cierre representados por ventanas de tiempo y una duración del servicio (tiempo que pasa el vehículo una vez que llega para recoger o dejar bienes).
Campos | |
---|---|
arrival_ |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta |
arrival_ |
El punto de referencia al que llega el vehículo cuando realiza esta |
departure_ |
Es la geolocalización desde la que sale el vehículo después de completar este |
departure_ |
Es el punto de referencia desde el que sale el vehículo después de completar este |
tags[] |
Especifica las etiquetas adjuntas a la solicitud de visita. No se permiten cadenas vacías ni duplicadas. |
time_ |
Son períodos que limitan la hora de llegada en una visita. Ten en cuenta que un vehículo puede salir fuera del período de la hora de llegada, es decir, la hora de llegada y la duración no tienen que estar dentro de un período. Esto puede generar un tiempo de espera si el vehículo llega antes de La ausencia de Las ventanas de tiempo deben ser disjuntas, es decir, ninguna debe superponerse con otra ni estar adyacente a ella, y deben estar en orden creciente.
|
duration |
Es la duración de la visita, es decir, el tiempo que el vehículo pasa entre la llegada y la salida (se debe agregar al tiempo de espera posible; consulta |
cost |
Es el costo de atender esta solicitud de visita en una ruta del vehículo. Esto se puede usar para pagar diferentes costos por cada retiro o entrega alternativa de un envío. Este costo debe estar en la misma unidad que |
load_ |
Carga las demandas de esta solicitud de visita. Es similar al campo |
visit_ |
Especifica los tipos de visita. Se puede usar para asignar el tiempo adicional necesario para que un vehículo complete esta visita (consulta Un tipo solo puede aparecer una vez. |
label |
Especifica una etiqueta para este |
ShipmentModel
Un modelo de envío contiene un conjunto de envíos que debe realizar un conjunto de vehículos, a la vez que minimiza el costo general, que es la suma de lo siguiente:
- el costo de planificar las rutas de los vehículos (suma del costo por tiempo total, costo por tiempo de viaje y costo fijo de todos los vehículos)
- las penalizaciones por envíos no realizados.
- el costo de la duración global de los envíos
Campos | |
---|---|
shipments[] |
Es el conjunto de envíos que se deben realizar en el modelo. |
vehicles[] |
Es un conjunto de vehículos que se pueden usar para realizar visitas. |
global_ |
Horas de inicio y finalización globales del modelo: No se pueden considerar válidas las horas fuera de este rango. El período del modelo debe ser inferior a un año, es decir, Cuando uses campos |
global_ |
Si no se establece, se usa de forma predeterminada el valor 00:00:00 UTC del 1 de enero de 1971 (es decir, segundos: 31536000, nanos: 0). |
global_ |
La "duración global" del plan general es la diferencia entre la hora de inicio efectiva más temprana y la hora de finalización efectiva más reciente de todos los vehículos. Los usuarios pueden asignar un costo por hora a esa cantidad para intentar optimizar la finalización de la tarea lo antes posible, por ejemplo. Este costo debe estar en la misma unidad que |
duration_ |
Especifica las matrices de duración y distancia que se usan en el modelo. Si este campo está vacío, se usarán Google Maps o distancias geodésicas, según el valor del campo Ejemplos de uso:
|
duration_ |
Etiquetas que definen las fuentes de las matrices de duración y distancia. Las etiquetas corresponden a |
duration_ |
Etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transition_ |
Atributos de transición agregados al modelo. |
shipment_ |
Conjuntos de shipment_types incompatibles (consulta |
shipment_ |
Conjuntos de requisitos de |
precedence_ |
Es un conjunto de reglas de prioridad que se deben aplicar en el modelo. |
max_ |
Limita la cantidad máxima de vehículos activos. Un vehículo está activo si su ruta realiza al menos un envío. Esto se puede usar para limitar la cantidad de rutas en el caso de que haya menos conductores que vehículos y la flota de vehículos sea heterogénea. Luego, la optimización seleccionará el mejor subconjunto de vehículos para usar. Debe ser estrictamente positivo. |
DurationDistanceMatrix
Especifica una matriz de duración y distancia de las ubicaciones de inicio y finalización de la visita y del vehículo.
Campos | |
---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener tantos elementos como |
vehicle_ |
Es la etiqueta que define a qué vehículos se aplica esta matriz de duración y distancia. Si está vacía, se aplica a todos los vehículos y solo puede haber una matriz. Cada inicio de vehículo debe coincidir exactamente con una matriz, es decir, exactamente uno de sus campos Todas las matrices deben tener un |
Fila
Especifica una fila de la matriz de duración y distancia.
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, de lo contrario, se ignoran.
Campos | |
---|---|
first_ |
Indica si el evento "primero" es una publicación. |
second_ |
Indica si el "segundo" evento es una publicación. |
offset_ |
Es la compensación entre el "primer" y el "segundo" evento. Puede ser negativo. |
first_ |
Es el índice de envío del "primer" evento. Se debe especificar este campo. |
second_ |
Es el índice de envío del "segundo" evento. Se debe especificar este campo. |
ShipmentRoute
La ruta de un vehículo se puede descomponer, a lo largo del eje del tiempo, de la siguiente manera (supón 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 distinción entre los siguientes conceptos:
- "Eventos puntuales", como el inicio y el final del vehículo, y el inicio y el final de cada visita (también conocidos como llegada y salida) Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre ellas. Aunque, a veces, los intervalos de tiempo pueden tener una duración de cero, es decir, comenzar y finalizar en el mismo segundo, a menudo tienen una duración positiva.
Invariables:
- Si hay n visitas, hay n+1 transiciones.
- Una visita siempre está rodeada de una transición anterior (mismo índice) y una transición posterior (índice + 1).
- El inicio del vehículo siempre está seguido de la transición n° 0.
- El final del vehículo siempre está precedido por la transición n.
Si acercamos la imagen, esto es lo que sucede durante un Transition
y un 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í se explica cómo se pueden organizar TRAVEL, BREAKS, DELAY y WAIT durante una transición.
- No se superponen.
- El DELAY es único y debe ser un período contiguo justo antes de la próxima visita (o el final 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 descanso.
- 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 el tiempo restante se dedica a “esperar”.
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_ |
Es el vehículo que realiza la ruta, identificado por su índice en el |
vehicle_ |
Etiqueta del vehículo que realiza esta ruta, igual a |
vehicle_ |
Hora en la que el vehículo comienza su ruta. |
vehicle_ |
Hora a la que el vehículo termina su ruta. |
visits[] |
Es una secuencia ordenada de visitas que representa una ruta. visits[i] es la i-ésima visita en la ruta. Si este campo está vacío, el vehículo se considera como no utilizado. |
transitions[] |
Es la lista ordenada de transiciones de la ruta. |
has_ |
Cuando
Es probable que la llegada a next_visit se produzca más tarde que el período actual debido al aumento de la estimación del tiempo de viaje |
route_ |
Es la representación de la polilínea codificada de la ruta. Este campo solo se propaga si |
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_ |
Es el costo de la ruta, desglosado por campos de solicitud 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, costs["model.shipments.pickups.cost"] es la suma de todos los costos de retiro en la ruta. Todos los costos definidos en el modelo se registran en detalle aquí, a excepción de los costos relacionados con TransitionAttributes, que solo se registran de forma agregada a partir de 1/2022. |
route_ |
Es el costo total de la ruta. Es la suma de todos los costos del mapa de costos. |
Receso
Datos que representan la ejecución de una pausa.
Campos | |
---|---|
start_ |
Es la hora de inicio de una pausa. |
duration |
Es la duración de una pausa. |
EncodedPolyline
Es la representación codificada de una polilínea. Puedes obtener más información sobre la codificación de polilíneas aquí: 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 los 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_ |
Es la duración del viaje durante esta transición. |
travel_ |
Distancia recorrida durante la transición. |
traffic_ |
Cuando se solicita el tráfico a través de |
delay_ |
Es la suma de las duraciones de demora aplicadas a esta transición. Si hay alguna, la demora comienza exactamente |
break_ |
Es la suma de la duración de las pausas que se producen durante esta transición, si corresponde. Los detalles sobre la hora de inicio y la duración de cada pausa se almacenan en |
wait_ |
Es el tiempo que se pasó esperando 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_ |
Es la duración total de la transición, que se proporciona para mayor comodidad. Es igual a lo siguiente:
|
start_ |
Es la hora de inicio de esta transición. |
route_ |
Es la representación de polilínea codificada de la ruta que se siguió durante la transición. Este campo solo se propaga si |
route_ |
Solo salida. Es un token opaco que se puede pasar al SDK de Navigation para reconstruir la ruta durante la navegación y, en caso de que se cambie la ruta, respetar la intención original cuando se creó la ruta. Trata este token como un blob opaco. No compares su valor entre las solicitudes, ya que puede cambiar incluso si el servicio muestra exactamente la misma ruta. Este campo solo se propaga si |
vehicle_ |
Cargas de vehículos 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 |
Es la cantidad de carga del vehículo para el tipo determinado. Por lo general, el tipo indica la unidad de carga. Consulta los |
Visitar
Es una visita realizada durante una ruta. Esta visita corresponde a la recolección o entrega de un Shipment
.
Campos | |
---|---|
shipment_ |
Es el índice del campo |
is_ |
Si es verdadero, la visita corresponde a la recolección de un |
visit_ |
Índice de |
start_ |
Hora en la que comienza la visita. Ten en cuenta que el vehículo puede llegar antes a la ubicación de la visita. Los tiempos son coherentes con los de |
load_ |
Demanda total de carga 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 inducido por los períodos. Si la visita es una entrega, 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_ |
Es la copia del |
visit_ |
Es la copia del |
ShipmentTypeIncompatibility
Especifica las incompatibilidades entre los envíos según su shipment_type. 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 que tienen |
incompatibility_ |
Es el modo que se aplica a la incompatibilidad. |
IncompatibilityMode
Son modos que definen cómo se restringe la aparición de envíos incompatibles en la misma ruta.
Enumeraciones | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidad no especificado. Este valor nunca debe usarse. |
NOT_PERFORMED_BY_SAME_VEHICLE |
En este modo, dos envíos con tipos incompatibles nunca pueden compartir el mismo vehículo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Para dos envíos con tipos incompatibles con el modo de incompatibilidad
|
ShipmentTypeRequirement
Especifica los requisitos entre los envíos según su shipment_type. El modo de requisito define los detalles del requisito.
Campos | |
---|---|
required_ |
Es la lista de tipos de envío alternativos que requiere |
dependent_ |
Todos los envíos con un tipo en el campo NOTA: No se permiten cadenas de requisitos de modo que un |
requirement_ |
Es el modo aplicado al requisito. |
RequirementMode
Son modos que definen la apariencia de los envíos dependientes en una ruta.
Enumeraciones | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito no especificado. Este valor nunca debe usarse. |
PERFORMED_BY_SAME_VEHICLE |
En este modo, todos los envíos “dependientes” deben compartir el mismo vehículo que al menos uno de sus envíos “obligatorios”. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con el modo Por lo tanto, una recolección de envíos “dependiente” debe tener una de las siguientes opciones:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Igual que antes, excepto que los envíos "dependientes" deben tener un envío "obligatorio" en el vehículo en el momento de la entrega. |
SkippedShipment
Especifica los detalles de los envíos no realizados en una solución. En el caso de los 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 |
Es la copia del |
reasons[] |
Una lista de motivos que explican por qué se omitió el envío. Consulta el comentario anterior a |
Motivo
Si podemos explicar por qué se omitió el envío, los motivos 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 se superaría la capacidad de "Manzanas" de al menos un vehículo (incluido el vehículo 1), la capacidad de "Peras" de al menos un vehículo (incluido el vehículo 3) y el límite de distancia de al menos un vehículo (incluido el vehículo 1).
Campos | |
---|---|
code |
Consulta los comentarios de Code. |
example_ |
Si el código de motivo es |
example_ |
Si el motivo se relaciona con una incompatibilidad entre el envío y el vehículo, 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 ambos se aplican.
Enumeraciones | |
---|---|
CODE_UNSPECIFIED |
Esto nunca debe usarse. |
NO_VEHICLE |
No hay ningún vehículo en el modelo, por lo que todos los envíos son 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 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, incluido 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 la distancia geodésica por 36 m/s (alrededor de 130 km/h). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual que lo 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 el cálculo del tiempo) si comienza a la hora de inicio más temprana: el tiempo total haría que el vehículo finalice después de la hora de finalización más tardía. |
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 la hora de inicio y finalización de un vehículo.
Los límites de período rígidos, start_time
y end_time
, aplican la hora más temprana y la 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 en soft_start_time
o después de este, lo que genera un costo proporcional a cuánto tiempo antes de soft_start_time ocurre el evento. 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_ |
Es la hora de inicio del período de tiempo fijo. Si no se especifica, se establecerá en |
end_ |
La hora de finalización del período fijo Si no se especifica, se establecerá en |
soft_ |
Es la hora de inicio flexible del período. |
soft_ |
Es la hora de finalización flexible del período. |
cost_ |
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_ |
Es un costo por hora que se suma a otros costos del modelo si el evento ocurre después de
Este costo debe ser positivo, y el campo solo se puede establecer si se configuró |
TransitionAttributes
Especifica los atributos de las transiciones entre dos visitas consecutivas en una ruta. Es posible que se apliquen varios TransitionAttributes
a la misma transición. En ese caso, se suman todos los costos adicionales y se aplica la restricción o el límite más estricto (según la semántica natural de "Y").
Campos | |
---|---|
src_ |
Son etiquetas que definen el conjunto de transiciones (src->dst) a las que se aplican estos atributos. Una visita a la fuente o un inicio de vehículo coinciden si su |
excluded_ |
Consulta los |
dst_ |
Una visita al destino o el final del viaje coinciden si su |
excluded_ |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Se expresa en la misma unidad que todos los demás costos del modelo y no debe ser negativo. Se aplica además de todos los demás costos existentes. |
cost_ |
Especifica un costo por kilómetro aplicado a la distancia recorrida durante esta transición. Se suma a cualquier |
distance_ |
Especifica un límite para la distancia recorrida durante la realización de esta transición. A partir de junio de 2021, solo se admiten límites flexibles. |
delay |
Especifica una demora que se produce cuando se realiza esta transición. Esta demora siempre ocurre después de finalizar la visita a la fuente y antes de iniciar la visita al destino. |
Vehículo
Representa un vehículo con un problema de envío. Si resuelves un problema de envío, se creará una ruta que comenzará en start_location
y terminará en end_location
para este vehículo. Una ruta es una secuencia de visitas (consulta ShipmentRoute
).
Campos | |
---|---|
display_ |
Es el nombre visible del vehículo definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
travel_ |
El modo de viaje, que afecta las rutas que puede usar el vehículo y su velocidad. Consulta también |
route_ |
Es un conjunto de condiciones que se deben cumplir y que afectan la forma en que se calculan las rutas para el vehículo determinado. |
start_ |
Es la ubicación geográfica donde comienza el vehículo antes de recoger los envíos. Si no se especifica, el vehículo comienza en su primer punto de partida. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
start_ |
Punto de referencia que representa una ubicación geográfica donde comienza el vehículo antes de recoger los envíos. Si no se especifican |
end_ |
Es la ubicación geográfica donde finaliza el vehículo después de completar su último |
end_ |
Punto de referencia que representa una ubicación geográfica en la que finaliza el vehículo después de completar su último |
start_ |
Especifica las etiquetas adjuntas al inicio de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
end_ |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
start_ |
Son los períodos durante los cuales el vehículo puede salir de su ubicación de partida. Deben estar dentro de los límites de tiempo globales (consulta los campos Los períodos que pertenecen al mismo campo repetido deben ser disjuntos, es decir, ningún período puede superponerse con otro ni estar adyacente a otro, y deben estar en orden cronológico.
|
end_ |
Son los períodos durante los cuales el vehículo puede llegar a su ubicación de destino. Deben estar dentro de los límites de tiempo globales (consulta los campos Los períodos que pertenecen al mismo campo repetido deben ser disjuntos, es decir, ningún período puede superponerse con otro ni estar adyacente a otro, y deben estar en orden cronológico.
|
unloading_ |
Se aplicó la política de descarga en el vehículo. |
load_ |
Capacidades del vehículo (por ejemplo, peso, volumen, cantidad de palés) Las claves del mapa son los identificadores del tipo de carga, coherentes con las claves del campo |
cost_ |
Costos del vehículo: Todos los costos se suman y deben estar en la misma unidad que Es el costo por hora de la ruta del vehículo. Este costo se aplica al tiempo total que tarda la ruta y, además, incluye el tiempo de viaje, el tiempo de espera y el tiempo de visita. El uso de |
cost_ |
Es el costo por hora recorrida de la ruta del vehículo. Este costo se aplica solo al tiempo de viaje que tarda la ruta (es decir, el que se informa en |
cost_ |
Es el costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en |
fixed_ |
Es el costo fijo que se aplica si se usa este vehículo para manejar un envío. |
used_ |
Este campo solo se aplica a los vehículos cuando su ruta no entrega ningún envío. Indica si el vehículo se debe considerar usado o no en este caso. Si es verdadero, el vehículo va de su ubicación de inicio a la de destino, incluso si no entrega ningún envío, y se tienen en cuenta los costos de tiempo y distancia que resultan del viaje de inicio a destino. De lo contrario, no viaja desde su ubicación de inicio hasta la de destino, y no se programan |
route_ |
Es el límite que se aplica a la duración total de la ruta del vehículo. En un |
travel_ |
Es el límite que se aplica a la duración del viaje de la ruta del vehículo. En un |
route_ |
Es el límite que se aplica a la distancia total de la ruta del vehículo. En un |
extra_ |
Especifica un mapa de cadenas de visit_types a duraciones. La duración es el tiempo adicional a Si una solicitud de visita tiene varios tipos, se agregará una duración para cada uno de ellos en el mapa. |
break_ |
Describe el programa de descansos que se aplicará en este vehículo. Si está vacío, no se programarán descansos para este vehículo. |
label |
Especifica una etiqueta para este vehículo. Esta etiqueta se informa en la respuesta como el |
ignore |
Si es verdadero, Si un vehículo ignorado realiza un envío en Si un vehículo ignorado realiza un envío en |
travel_ |
Especifica un factor multiplicativo que se puede usar para aumentar o disminuir los tiempos de viaje de este vehículo. Por ejemplo, si se establece en 2.0, significa que este vehículo es más lento y tiene tiempos de viaje el doble de los que tienen los vehículos estándar. Este múltiplo no afecta las duraciones de las visitas. Sí afecta el costo si se especifican ADVERTENCIA: Los tiempos de viaje se redondearán al segundo más cercano después de aplicar este múltiplo, pero antes de realizar cualquier operación numérica. Por lo tanto, un múltiplo pequeño puede provocar una pérdida de precisión. Consulta también |
DurationLimit
Es un límite que define una duración máxima de la ruta de un vehículo. Puede ser duro o blando.
Cuando se define un campo de límite flexible, se deben definir juntos el umbral máximo flexible y su costo asociado.
Campos | |
---|---|
max_ |
Es un límite estricto que restringe la duración a un máximo de max_duration. |
soft_ |
Un límite flexible no aplica un límite de duración máxima, pero, cuando se incumple, hace que la ruta incurra en un costo. Este costo se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, |
quadratic_ |
Un límite flexible no aplica un límite de duración máximo, pero cuando se incumple, hace que la ruta incurra en un costo cuadrático en la duración. Este costo se suma a otros costos definidos en el modelo, con la misma unidad. Si se define,
|
cost_ |
Es el costo por hora que se genera si se incumple el límite de
El costo no debe ser negativo. |
cost_ |
Es el costo por hora cuadrada que se genera si se incumple el límite de El costo adicional es de 0 si la duración es inferior al umbral. De lo contrario, el costo depende de la duración de la siguiente manera:
El costo no debe ser negativo. |
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_ |
Es un límite flexible de la carga. Consulta los |
cost_ |
Si la carga supera |
start_ |
Es el intervalo de carga aceptable del vehículo al comienzo de la ruta. |
end_ |
Es el intervalo de carga aceptable del vehículo al final de la ruta. |
max_ |
Es la cantidad máxima de carga aceptable. |
Intervalo
Intervalo de cargas aceptables.
Campos | |
---|---|
min |
Una carga mínima aceptable Debe ser ≥ 0. Si se especifican ambos, |
max |
Una carga máxima aceptable. Debe ser ≥ 0. Si no se especifica, este mensaje no restringe la carga máxima. Si se especifican ambos, |
TravelMode
Son los medios de transporte que pueden usar los vehículos.
Estos deben ser un subconjunto de los modos de viaje de la API de Routes Preferred de Google Maps Platform. Consulta: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enumeraciones | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Es el modo de viaje no especificado, equivalente a DRIVING . |
DRIVING |
Es el modo de viaje correspondiente a las instrucciones sobre cómo llegar en automóvil (automóvil, etc.). |
WALKING |
Es el modo de transporte correspondiente a las instrucciones sobre cómo llegar a pie. |
UnloadingPolicy
Política sobre cómo se puede descargar un vehículo. Solo se aplica a los envíos que tienen un retiro y una entrega.
Los demás envíos pueden ocurrir en cualquier lugar de la ruta, independientemente de 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 a las recuperaciones |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las recogidas |
Punto de referencia
Encapsula un punto de referencia. Los puntos de referencia marcan las ubicaciones de llegada y salida de VisitRequests, y las ubicaciones de inicio y finalización de los vehículos.
Campos | |
---|---|
side_ |
Opcional. Indica que la ubicación de este punto de referencia tiene la preferencia de que el vehículo se detenga en un lado particular de la ruta. Cuando establezcas este valor, la ruta pasará por la ubicación para que el vehículo pueda detenerse en el lado de la ruta hacia el que se orienta la ubicación desde el centro de la ruta. Esta opción no funciona para el modo de viaje "CAMINAR". |
Campo de unión location_type . Son diferentes formas de representar una ubicación. Las direcciones (location_type ) solo pueden ser una de las siguientes opciones: |
|
location |
Es un punto especificado con coordenadas geográficas, incluido un encabezado opcional. |
place_ |
El ID de lugar del lugar de interés asociado con el punto de referencia. |