Í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)OptimizeToursLongRunningMetadata(mensaje)OptimizeToursRequest(mensaje)OptimizeToursRequest.SearchMode(enumeración)OptimizeToursRequest.SolvingMode(enumeración)OptimizeToursResponse(mensaje)OptimizeToursResponse.Metrics(mensaje)OptimizeToursUriMetadata(mensaje)OptimizeToursUriRequest(mensaje)OptimizeToursUriResponse(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.Objective(mensaje)ShipmentModel.Objective.Type(enumeración)ShipmentModel.PrecedenceRule(mensaje)ShipmentRoute(mensaje)ShipmentRoute.Break(mensaje)ShipmentRoute.EncodedPolyline(mensaje)ShipmentRoute.Transition(mensaje)ShipmentRoute.VehicleLoad(mensaje)ShipmentRoute.Visit(mensaje)ShipmentRoute.Visit.VisitType(enumeración)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)Uri(mensaje)Vehicle(mensaje)Vehicle.DurationLimit(mensaje)Vehicle.LoadLimit(mensaje)Vehicle.LoadLimit.Interval(mensaje)Vehicle.LoadLimit.LoadCost(mensaje)Vehicle.TravelMode(enumeración)Vehicle.UnloadingPolicy(enumeración)VehicleFullness(mensaje)Waypoint(mensaje)
RouteOptimization
Es un servicio para optimizar los recorridos de los vehículos.
Validez de ciertos tipos de campos:
google.protobuf.Timestamp- Los tiempos 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 estar sin configurar o configurados 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 deben estar sin configurar o configurados en 0.
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 de El objetivo es proporcionar una asignación de
|
| OptimizeToursLongRunning |
|---|
|
Esta es una variante del método El
|
| OptimizeToursUri |
|---|
|
Esta es una variante del método El cliente especifica el URI del Este método se debe preferir por sobre el método El
|
AggregatedMetrics
Métricas agregadas para ShipmentRoute (resp. para OptimizeToursResponse) en todos los elementos Transition o Visit (resp. en todos los elementos ShipmentRoute).
| Campos | |
|---|---|
performed_shipment_count |
Es la cantidad de envíos realizados. Ten en cuenta que un par de retiro y entrega solo se cuenta una vez. |
travel_duration |
Es la duración total del viaje para una ruta o una solución. |
wait_duration |
Es la duración total de la espera para una ruta o una solución. |
delay_duration |
Es la duración total de la demora de una ruta o una solución. |
break_duration |
Es la duración total de la pausa de una ruta o una solución. |
visit_duration |
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 |
Es la distancia total de viaje de una ruta o una solución. |
max_loads |
Carga máxima alcanzada en toda la ruta (resp. solución), para cada una de las cantidades en esta ruta (resp. solución), calculada como el máximo de todos los |
performed_mandatory_shipment_count |
Es la cantidad de envíos obligatorios que se realizaron. Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
performed_shipment_penalty_cost_sum |
Es la suma de los Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
BatchOptimizeToursMetadata
Este tipo no tiene campos.
Metadatos de la operación para las llamadas a BatchOptimizeToursRequest.
BatchOptimizeToursRequest
Solicita optimizar 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:
No se admiten los valores regionales de |
model_configs[] |
Obligatorio. Información de entrada y salida de cada modelo de compra, como las rutas de acceso de los archivos y los formatos de datos |
AsyncModelConfig
Información para resolver un modelo de optimización de forma asíncrona.
| Campos | |
|---|---|
display_name |
Opcional. Es el nombre del modelo definido por el usuario, que los usuarios pueden usar como alias para hacer un seguimiento de los modelos. |
input_config |
Obligatorio. Es la información sobre el modelo de entrada. |
output_config |
Obligatorio. Es la información de ubicación de salida deseada. |
BatchOptimizeToursResponse
Este tipo no tiene campos.
Respuesta a un BatchOptimizeToursRequest. Esto se devuelve en la operación de larga duración después de que se completa la operación.
BreakRule
Son reglas para generar pausas de tiempo para un vehículo (p.ej., pausas para el almuerzo). Un descanso 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 ocurrir una pausa en los siguientes casos:
- Durante el viaje entre dos visitas (lo que incluye el tiempo justo antes o después de una visita, pero no en medio de una visita), en cuyo caso extiende el tiempo en tránsito correspondiente entre las visitas
- o antes de que comience el vehículo (es posible que el vehículo no comience en medio de un descanso), en cuyo caso no afecta la hora de inicio del vehículo.
- o después de la finalización del vehículo (lo mismo, con la hora de finalización del vehículo).
| Campos | |
|---|---|
break_requests[] |
Es una secuencia de pausas. Consulta el mensaje |
frequency_constraints[] |
Es posible que se apliquen varios |
BreakRequest
La secuencia de descansos (es decir, su cantidad y orden) que se aplican a cada vehículo se debe conocer de antemano. Los 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 se verifica).
| Campos | |
|---|---|
earliest_start_time |
Obligatorio. Límite inferior (inclusive) del inicio del descanso. |
latest_start_time |
Obligatorio. Límite superior (inclusive) del inicio de la pausa. |
min_duration |
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 puede interpretar como "Dentro de cualquier período continuo de 12 h, debe haber al menos un descanso de al menos 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 momento 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 especificados en el 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_break_duration |
Obligatorio. Es la duración mínima de la pausa para esta restricción. No negativo. Consulta la descripción de |
max_inter_break_duration |
Obligatorio. Es el intervalo máximo permitido de cualquier intervalo de tiempo en la ruta que no incluya, al menos parcialmente, un descanso de |
DataFormat
Formatos de datos para los archivos de entrada y salida.
| Enums | |
|---|---|
DATA_FORMAT_UNSPECIFIED |
El valor no es válido, el formato no debe ser UNSPECIFIED. |
JSON |
Notación de objetos de JavaScript. |
PROTO_TEXT |
Formato de texto de búferes de protocolo. Consulta https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Es un límite que define una distancia máxima que se puede recorrer. Puede ser de hardware o de software.
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_meters |
Es un límite estricto que restringe la distancia para que sea de max_meters como máximo. El límite no debe ser negativo. |
soft_max_meters |
Es un límite flexible que no aplica un límite de distancia máxima, pero, cuando se incumple, genera un costo que se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, soft_max_meters debe ser menor que max_meters y no debe ser negativo. |
cost_per_kilometer_below_soft_max |
Costo por kilómetro incurrido, que aumenta hasta Este costo no se admite en |
cost_per_kilometer_above_soft_max |
Es el costo por kilómetro en el que se incurre 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. Es el URI de Google Cloud Storage. |
GcsSource
La ubicación de Google Cloud Storage desde la que se leerá el archivo de entrada.
| Campos | |
|---|---|
uri |
Obligatorio. Es el URI de un objeto de Google Cloud Storage con el formato |
InjectedSolutionConstraint
Es la solución que se inserta en la solicitud, incluida la 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á. 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 indican para |
skipped_shipments[] |
Son los envíos omitidos de la solución que se insertará. Es posible que algunos se omitan de la solución original. Consulta el campo |
constraint_relaxations[] |
Para cero o más grupos de vehículos, especifica cuándo y cuánto se deben flexibilizar las restricciones. Si este campo está vacío, todas las rutas de vehículos no vacías están completamente restringidas. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se flexibilizarán las restricciones de las visitas y en qué nivel. Los envíos que se indican en el campo skipped_shipment se omiten de forma obligatoria, es decir, no se pueden realizar.
| Campos | |
|---|---|
relaxations[] |
Todas las flexibilizaciones de las restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en |
vehicle_indices[] |
Especifica los índices de vehículos a los que se aplica la restricción de visita Un índice de vehículo se asigna de la misma manera que |
Relaxation
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 la restricción que se aplica a una visita j que cumple con lo siguiente:
route.visits(j).start_time >= relaxations(i).threshold_timeYj + 1 >= relaxations(i).threshold_visit_count
Del mismo modo, el inicio del vehículo se flexibiliza a relaxations(i).level si cumple con lo siguiente:
vehicle_start_time >= relaxations(i).threshold_timeYrelaxations(i).threshold_visit_count == 0y el final del vehículo se relaja arelaxations(i).levelsi cumple con lo siguiente:vehicle_end_time >= relaxations(i).threshold_timeYroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Para aplicar un nivel de relajación si una visita cumple con el threshold_visit_count O el threshold_time, agrega dos relaxations con el mismo level: uno con solo threshold_visit_count establecido y el otro con solo threshold_time establecido. Si una visita cumple con las condiciones de varios relaxations, se aplica el nivel más flexible. Como resultado, desde el inicio del vehículo hasta las visitas de la ruta para llegar al 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 de ruta que no cumplen con 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 cumple con las condiciones de ninguna flexibilización, el tiempo se fija, a menos que el vehículo esté vacío.
| Campos | |
|---|---|
level |
Es el nivel de flexibilización de la restricción que se aplica cuando se cumplen las condiciones en |
threshold_time |
Es la hora en la que se puede aplicar la flexibilización |
threshold_visit_count |
Es la cantidad de visitas en las que se puede aplicar la relajación Si es |
Nivel
Expresa los diferentes niveles de relajación de restricciones, que se aplican para una visita y las que siguen cuando cumple con las condiciones de umbral.
La siguiente enumeración se encuentra en orden de relajación creciente.
| Enums | |
|---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación implícito predeterminado: no se relaja ninguna restricción, 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 de las visitas y las horas de inicio y finalización de los vehículos, pero cada visita seguirá vinculada al mismo vehículo y se deberá respetar la secuencia de visitas: no se podrá insertar ninguna visita entre ellas ni antes de ellas. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD, pero la secuencia de visitas también se flexibiliza: solo este vehículo puede realizar las visitas, pero es posible que no se realicen. |
RELAX_ALL_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, pero el vehículo también se relaja: las visitas son completamente gratuitas en el momento del umbral o después de este, y es posible que no se realicen. |
InputConfig
Especifica una entrada para [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
| Campos | |
|---|---|
data_format |
Obligatorio. Es el formato de los datos de entrada. |
Campo de unión source. Obligatorio. source puede ser solo uno de los parámetros siguientes: |
|
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 rumbo opcional).
| Campos | |
|---|---|
lat_lng |
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 debe usar para el retiro y la llegada. Los valores de rumbo pueden ser de 0 a 360, donde 0 especifica un rumbo hacia el norte, 90 especifica un rumbo hacia el este, etc. |
OptimizeToursLongRunningMetadata
Este tipo no tiene campos.
Metadatos de la operación para las llamadas a OptimizeToursLongRunning.
OptimizeToursRequest
Es la solicitud que se enviará a un solucionador de optimización de recorridos que define el modelo de envío que se resolverá, así como los parámetros de optimización.
| Campos | |
|---|---|
parent |
Obligatorio. Es el proyecto o la ubicación de destino para realizar una llamada. Formato:
No se admiten los valores regionales de |
timeout |
Si se establece este tiempo de espera, el servidor devuelve una respuesta antes de que transcurra el período de tiempo de espera o se alcance el plazo del servidor para las solicitudes síncronas, lo que ocurra primero. En el caso de las solicitudes asíncronas, el servidor generará una solución (si es posible) antes de que transcurra el tiempo de espera. |
model |
Es el modelo de envío que se resolverá. |
solving_mode |
De forma predeterminada, el modo de resolución es |
search_mode |
Es el modo de búsqueda que se usó para resolver la solicitud. |
injected_first_solution_routes[] |
Guía el algoritmo de optimización para encontrar una primera solución que sea similar a una solución anterior. El modelo se restringe cuando se compila la primera solución. Los envíos que no se realicen 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 de validez básicas:
Si la solución insertada no es factible, no necesariamente se devuelve un error de validación, sino que se puede devolver un error que indique que no es factible. |
injected_solution_constraint |
Restringe el algoritmo de optimización para encontrar una solución final similar a una solución anterior. Por ejemplo, esto se puede usar para congelar partes de rutas que ya se completaron o que se deben completar, pero no se deben modificar. Si la solución insertada no es factible, no necesariamente se devuelve un error de validación, sino que se puede devolver un error que indique que no es factible. |
refresh_details_routes[] |
Si no está vacío, se actualizarán las rutas dadas, sin modificar su secuencia subyacente de visitas o duraciones de viaje: solo se actualizarán otros detalles. Esto no resuelve el modelo. A partir de noviembre de 2020, solo se completan las polilíneas de las rutas no vacías y se requiere 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 visitas de ruta o rutas completas de una solución insertada puede tener un efecto en las restricciones implícitas, lo que puede provocar un cambio en la solución, errores de validación o inviabilidad. NOTA: El emisor debe asegurarse de que cada |
consider_road_traffic |
Considera la estimación de tráfico para calcular los campos |
populate_polylines |
Si es verdadero, se propagarán polilíneas en los |
populate_transition_polylines |
Si es verdadero, las polilíneas y los tokens de ruta se propagarán en la respuesta |
allow_large_deadline_despite_interruption_risk |
Si se establece, la solicitud puede tener un plazo (consulta https://grpc.io/blog/deadlines) de hasta 60 minutos. De lo contrario, el plazo máximo es de solo 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 la duración del viaje se calculará con distancias geodésicas con una velocidad definida por |
label |
Es la etiqueta que se puede usar para identificar esta solicitud, que se informa en |
geodesic_meters_per_second |
Cuando |
max_validation_errors |
Trunca la cantidad de errores de validación que se devuelven. 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, que equilibra la latencia con la calidad de la solución. En todos los modos, se aplica la fecha límite de solicitud global.
| Enums | |
|---|---|
SEARCH_MODE_UNSPECIFIED |
Modo de búsqueda sin especificar, equivalente a RETURN_FAST. |
RETURN_FAST |
Detener la búsqueda después de encontrar la primera solución buena |
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 devuelven.
| Enums | |
|---|---|
DEFAULT_SOLVE |
Resuelve el modelo. Se pueden emitir advertencias en [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY |
Solo valida el modelo sin resolverlo: propaga la mayor cantidad posible de OptimizeToursResponse.validation_errors. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Solo propaga IMPORTANTE: No todos los envíos inviables se devuelven aquí, sino solo los que se detectan como inviables durante el procesamiento previo. |
TRANSFORM_AND_RETURN_REQUEST |
Este modo solo funciona si Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles. |
OptimizeToursResponse
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 i-ésima ruta corresponde al i-ésimo vehículo del modelo. |
request_label |
Copia de |
skipped_shipments[] |
Es la lista de todos los envíos omitidos. |
validation_errors[] |
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 |
processed_request |
En algunos casos, modificamos la solicitud entrante antes de resolverla, p.ej., agregando costos. Si solving_mode == TRANSFORM_AND_RETURN_REQUEST, la solicitud modificada se devuelve aquí. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles. |
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 |
Se agrega en las rutas. Cada métrica es la suma (o el máximo, para las cargas) de todos los campos |
skipped_mandatory_shipment_count |
Es la cantidad de envíos obligatorios que se omitieron. |
used_vehicle_count |
Es la cantidad de vehículos utilizados. Nota: Si una ruta de vehículo está vacía y |
earliest_vehicle_start_time |
Es la hora de inicio más temprana para un vehículo usado, calculada como el mínimo de todos los vehículos usados de |
latest_vehicle_end_time |
Es la hora de finalización más tardía para un vehículo usado, calculada como el máximo de |
costs |
Es el costo de la solución, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de proto, relativas a la OptimizeToursRequest de entrada, 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 informan en detalle aquí, con la excepción de los costos relacionados con TransitionAttributes, que solo se informan de forma agregada a partir de enero de 2022. |
total_cost |
Costo total de la solución Es la suma de todos los valores del mapa de costos. |
OptimizeToursUriMetadata
Este tipo no tiene campos.
Metadatos de la operación para las llamadas a OptimizeToursUri.
OptimizeToursUriRequest
Es una solicitud que usa el método OptimizeToursUri.
| Campos | |
|---|---|
parent |
Obligatorio. Es el proyecto o la ubicación de destino para realizar una llamada. Formato:
No se admiten los valores regionales de |
input |
Obligatorio. El URI del objeto de Cloud Storage que contiene el |
output |
Obligatorio. Es el URI del objeto de Cloud Storage que contendrá el |
OptimizeToursUriResponse
Es una respuesta que devuelve el método OptimizeToursUri.
| Campos | |
|---|---|
output |
Opcional. Es el URI del objeto de Cloud Storage que contiene el El |
OptimizeToursValidationError
Describe un error o una advertencia que se produjo 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. MÚLTIPLES ERRORES: 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 "fatales", lo que significa que detendrán todo el proceso de validación. Este es el caso de los errores ESTABILIDAD: |
display_name |
Es el nombre visible del error. |
fields[] |
Un contexto de error puede involucrar 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 hacer lo siguiente: Sin embargo, ten en cuenta que la cardinalidad de |
error_message |
Es una cadena legible por humanos que describe el error. Hay una asignación 1:1 entre ESTABILIDAD: No es estable. El mensaje de error asociado a un |
offending_values |
Puede contener los valores de los campos. Esta opción no siempre está disponible. No debes confiar en él de ninguna manera y solo debes usarlo 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° 2 de start_time_windows del vehículo n° 5 con 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 que el mensaje se sature.
| Campos | |
|---|---|
name |
Es el nombre del campo, p.ej., "vehicles". |
sub_field |
Es un subcampo anidado de forma recurrente, si es necesario. |
Campo de unión
|
|
index |
Es el índice del campo si se repite. |
key |
Es la 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. destination puede ser solo uno de los parámetros siguientes: |
|
gcs_destination |
Es 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_tolls |
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 medios de transporte motorizados. |
avoid_highways |
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 medios de transporte motorizados. |
avoid_ferries |
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 medios de transporte motorizados. |
avoid_indoor |
Opcional. Especifica si se debe evitar la navegación 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 reserva según corresponda) y, luego, visitar una de sus ubicaciones de entrega (y, por lo tanto, volver a aumentar sus capacidades de reserva según corresponda).
| Campos | |
|---|---|
display_name |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es el conjunto de alternativas de retiro asociadas con el envío. Si no se especifica, el vehículo solo necesita visitar una ubicación correspondiente 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 correspondiente a las recogidas. |
load_demands |
Son las demandas de carga del envío (por ejemplo, peso, volumen, cantidad de palés, etcétera). Las claves del mapa deben ser identificadores que describan el tipo de carga correspondiente y, de ser posible, 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 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_per_vehicle[] |
Especifica el costo que se genera 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[] |
Son los índices de los vehículos a los que se aplica |
pickup_to_delivery_absolute_detour_limit |
Especifica el tiempo máximo absoluto de desvío en comparación con la ruta más corta desde el retiro hasta la entrega. Si se especifica, debe ser 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, si configuras Si se especifican límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de retiro y entrega posible. A partir de octubre de 2017, los desvíos solo se admiten cuando las duraciones de los viajes no dependen de los vehículos. |
pickup_to_delivery_time_limit |
Especifica la duración máxima desde el inicio de la recolección hasta el inicio de la entrega de un envío. Si se especifica, debe ser no negativo, y el envío debe contener al menos una recolección y una entrega. Esto no depende de las alternativas que se seleccionen para la recolección y la entrega, ni de la velocidad del vehículo. Esto se puede especificar junto con las restricciones de desvío máximo: la solución respetará ambas especificaciones. |
shipment_type |
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, se omite este envío, pero no se aplica un Ignorar un envío genera un error de validación cuando hay algún Se permite ignorar un envío que se realiza en |
penalty_cost |
Si no se completa el envío, esta penalización se agrega al costo general de las rutas. Un envío se considera completado si se visita una de sus alternativas de retiro y entrega. El costo se puede expresar en la misma unidad que se usa para todos los demás campos relacionados con el costo en el modelo y debe ser positivo. IMPORTANTE: Si no se especifica esta penalización, se considera infinita, es decir, se debe completar el envío. |
pickup_to_delivery_relative_detour_limit |
Especifica el tiempo máximo de desvío relativo en comparación con la ruta más corta desde el retiro hasta la entrega. Si se especifica, debe ser 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, si configuras Si se especifican límites relativos y absolutos en el mismo envío, se usa el límite más restrictivo para cada par de retiro y entrega posible. A partir de octubre de 2017, los desvíos solo se admiten cuando las duraciones de los viajes no dependen de los vehículos. |
Carga
Cuando se realiza una visita, se puede agregar una cantidad predefinida a la carga del vehículo si se trata de un retiro, o bien restarla si se trata de una entrega. Este mensaje define ese importe. Consulta los load_demands.
| Campos | |
|---|---|
amount |
Es la cantidad en la que variará la carga del vehículo que realiza la visita correspondiente. Como 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 ubicación geográfica (o dos, consulta más abajo), 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 retirar o entregar mercancías).
| Campos | |
|---|---|
arrival_location |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta |
arrival_waypoint |
Es el punto de referencia al que llega el vehículo cuando realiza este |
departure_location |
Es la ubicación geográfica desde la que sale el vehículo después de completar este |
departure_waypoint |
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_windows[] |
Son los períodos 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, la hora de llegada y la duración no necesitan 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 ventana de tiempo debe superponerse con otra ni ser adyacente a ella, y deben estar en orden ascendente.
|
duration |
Es la duración de la visita, es decir, el tiempo que pasa el vehículo entre la llegada y la salida (se agregará al tiempo de espera posible; consulta |
cost |
Es el costo de entregar esta solicitud de visita en una ruta de vehículo. Esto se puede usar para pagar costos diferentes por cada retiro o entrega alternativos de un envío. Este costo debe estar en la misma unidad que |
load_demands |
Son las demandas de carga de esta solicitud de visita. Es igual que el campo |
visit_types[] |
Especifica los tipos de visita. Esto se puede usar para asignar el tiempo adicional que necesita un vehículo para completar esta visita (consulta Un tipo solo puede aparecer una vez. |
label |
Especifica una etiqueta para este |
avoid_u_turns |
Especifica si se deben evitar los giros en U en las rutas de conducción en esta ubicación. La evasión de giros en U se realiza de la mejor manera posible, pero no se garantiza que se eviten por completo. Esta es una función experimental y su comportamiento está sujeto a cambios. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request para obtener más detalles. |
ShipmentModel
Un modelo de envío contiene un conjunto de envíos que debe realizar un conjunto de vehículos, a la vez que se minimiza el costo general, que es la suma de lo siguiente:
- el costo de enrutar los vehículos (suma del costo por tiempo total, el costo por duración del viaje y el 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 el conjunto de vehículos que se pueden usar para realizar visitas. |
objectives[] |
Es el conjunto de objetivos de este modelo, que transformaremos en costos. Si no está vacío, el modelo de entrada debe ser sin costo. Para obtener la solicitud modificada, usa Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles. |
global_start_time |
Hora de inicio y finalización global del modelo: no se puede considerar válida ninguna hora fuera de este rango. El intervalo de tiempo del modelo debe ser inferior a un año, es decir, el Cuando uses campos |
global_end_time |
Si no se establece, se usa como valor predeterminado el 1 de enero de 1971 a las 00:00:00 UTC (es decir, segundos: 31536000, nanosegundos: 0). |
global_duration_cost_per_hour |
La "duración global" del plan general es la diferencia entre la hora de inicio efectiva más temprana y la hora de finalización efectiva más tardía de todos los vehículos. Los usuarios pueden asignar un costo por hora a esa cantidad para intentar optimizar la finalización más temprana del trabajo, por ejemplo. Este costo debe estar en la misma unidad que |
duration_distance_matrices[] |
Especifica las matrices de duración y distancia que se usan en el modelo. Si este campo está vacío, se usarán las distancias geodésicas o de Google Maps, según el valor del campo Ejemplos de uso:
|
duration_distance_matrix_src_tags[] |
Son etiquetas que definen las fuentes de las matrices de duración y distancia. Las etiquetas corresponden a |
duration_distance_matrix_dst_tags[] |
Son etiquetas que definen los destinos de las matrices de duración y distancia; Las etiquetas corresponden a |
transition_attributes[] |
Se agregaron atributos de transición al modelo. |
shipment_type_incompatibilities[] |
Conjuntos de shipment_types incompatibles (consulta |
shipment_type_requirements[] |
Conjuntos de requisitos de |
precedence_rules[] |
Es el conjunto de reglas de precedencia que se deben aplicar en el modelo. IMPORTANTE: El uso de reglas de precedencia limita el tamaño del problema que se puede optimizar. Es posible que se rechacen las solicitudes que usen reglas de precedencia que incluyan muchos envíos. |
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 usar 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 usar. Debe ser estrictamente positivo. |
DurationDistanceMatrix
Especifica una matriz de duración y distancia desde las ubicaciones de inicio de las visitas y los vehículos hasta las ubicaciones de finalización de las visitas y los 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 inicio de vehículo debe coincidir con exactamente 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[] |
Son los valores de duración de una fila determinada. Debe tener tantos elementos como |
meters[] |
Son los valores de distancia para una fila determinada. Si ningún costo o restricción hace referencia a las distancias en el modelo, este campo se puede dejar vacío; de lo contrario, debe tener tantos elementos como |
Objetivo
Los objetivos reemplazan por completo el modelo de costos y, por lo tanto, son incompatibles con los costos preexistentes. Cada objetivo se asigna a una cantidad de costos predefinidos para, por ejemplo, vehículos, envíos o atributos de transición.
Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles.
| Campos | |
|---|---|
type |
Es el tipo de objetivo. |
weight |
Cuánto debe contar este objetivo en relación con los demás. Puede ser cualquier número no negativo, y no es necesario que la suma de los pesos sea 1. Los pesos se establecen de forma predeterminada en 1.0. |
Tipo
Es el tipo de objetivo que se asignará a un conjunto de costos.
| Enums | |
|---|---|
DEFAULT |
Se usará un conjunto predeterminado de costos para garantizar una solución razonable. Nota: Este objetivo se puede usar por sí solo, pero también se agregará siempre con un peso de 1.0, como referencia, a los objetivos especificados por el usuario, si aún no está presente. |
MIN_DISTANCE |
Objetivos "MIN". Minimizar la distancia total recorrida |
MIN_WORKING_TIME |
Minimizar el tiempo de trabajo total, sumado para todos los vehículos |
MIN_TRAVEL_TIME |
Igual que lo anterior, pero enfocándose solo en la duración del viaje. |
MIN_NUM_VEHICLES |
Minimizar la cantidad de vehículos utilizados |
PrecedenceRule
Es una regla de precedencia 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 haya comenzado el "primero".
Varias precedencias pueden hacer referencia a los mismos eventos (o relacionados), p.ej., "la recogida de B ocurre después de la entrega de A" y "la recogida de C ocurre después de la recogida de B".
Además, las precedencias solo se aplican cuando se realizan ambos envíos y, de lo contrario, 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 |
Es la compensación entre el "primer" y el "segundo" evento. Puede ser negativo. |
first_index |
Es el índice de envío del "primer" evento. Se debe especificar este campo. |
second_index |
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 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 distinguimos 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 los intervalos de tiempo a veces pueden tener una duración de cero, es decir, comenzar y terminar en el mismo segundo, suelen tener una duración positiva.
Invariantes:
- Si hay n visitas, hay n+1 transiciones.
- Una visita siempre está rodeada por una transición antes de ella (mismo índice) y una transición después de ella (índice + 1).
- La salida del vehículo siempre va seguida de la transición n° 0.
- El final del vehículo siempre está precedido por la transición n.
Si nos acercamos, 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, así es como se pueden organizar los estados TRAVEL, BREAKS, DELAY y WAIT durante una transición.
- No se superponen.
- La DEMORA es única y debe ser un período continuo justo antes de la siguiente visita (o el final del vehículo). Por lo tanto, basta con conocer la duración del retraso para saber su hora de inicio y de finalización.
- Los BREAKS 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 "interrumpibles": se pueden interrumpir varias veces durante esta transición. Los clientes pueden suponer que el viaje se realiza "lo antes posible" y que la "espera" 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 |
Es el vehículo que realiza la ruta, identificado por su índice en el |
vehicle_label |
Es la etiqueta del vehículo que realiza esta ruta, igual a |
vehicle_start_time |
Es la hora a la que el vehículo inicia su ruta. |
vehicle_end_time |
Es la hora en la que el vehículo finaliza su ruta. |
visits[] |
Es la secuencia ordenada de visitas que representa 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 se usa. |
transitions[] |
Es la lista ordenada de transiciones para la ruta. |
has_traffic_infeasibilities |
Cuando Es probable que la llegada a next_visit se produzca después de su ventana de tiempo actual debido al aumento de la estimación de la duración del viaje |
route_polyline |
Es la representación de la polilínea codificada de la ruta. Este campo solo se propaga si |
breaks[] |
Son los descansos programados 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 |
vehicle_fullness |
Campo Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
route_costs |
Es el costo de la ruta, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de proto, relativas a la OptimizeToursRequest de entrada, 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 informan en detalle aquí, con la excepción de los costos relacionados con TransitionAttributes, que solo se informan de forma agregada a partir de enero de 2022. |
route_total_cost |
Es el costo total de la ruta. Es la suma de todos los costos en el mapa de costos. |
Receso
Son datos que representan la ejecución de una pausa.
| Campos | |
|---|---|
start_time |
Es la hora de inicio de un descanso. |
duration |
Es la duración de una pausa. |
EncodedPolyline
Es la representación codificada de una polilínea. Puedes encontrar 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
Es la transición entre dos eventos de la ruta. Consulta la descripción de ShipmentRoute.
Si el vehículo no tiene un start_location o un end_location, las métricas de viaje correspondientes son 0.
| Campos | |
|---|---|
travel_duration |
Duración del viaje durante esta transición. |
travel_distance_meters |
Es la distancia recorrida durante la transición. |
traffic_info_unavailable |
Cuando se solicita información sobre el tráfico a través de |
delay_duration |
Es la suma de las duraciones de los retrasos aplicados a esta transición. Si hay alguna, la demora comienza exactamente |
break_duration |
Es la suma de la duración de las pausas que se producen durante esta transición, si las hay. Los detalles sobre la hora de inicio y la duración de cada pausa se almacenan en |
wait_duration |
Es el tiempo que se pasa esperando durante esta transición. La duración de la espera corresponde al tiempo de inactividad y no incluye el tiempo de descanso. 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 por conveniencia. Es igual a lo siguiente:
|
start_time |
Es la hora de inicio de esta transición. |
route_polyline |
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_token |
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 vuelva a trazar la ruta, respetar la intención original cuando se creó la ruta. Trata este token como un BLOB opaco. No compares su valor entre solicitudes, ya que puede cambiar incluso si el servicio devuelve exactamente la misma ruta. Este campo solo se propaga si |
vehicle_loads |
Cargas del vehículo durante esta transición, para cada tipo que aparece 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 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. La unidad de carga suele indicarse con el tipo. Consulta los |
Visitar
Es una visita que se realiza durante una ruta. Esta visita corresponde a un retiro o una entrega de un Shipment.
| Campos | |
|---|---|
shipment_index |
Es el índice del campo |
is_pickup |
Si es verdadero, la visita corresponde a la recogida de un |
visit_request_index |
Es el índice de |
start_time |
Es la hora a la que comienza la visita. Ten en cuenta que el vehículo puede llegar antes de esta hora a la ubicación de la visita. Los períodos son coherentes con el |
load_demands |
La demanda total de carga de visitas como la suma del envío y la solicitud de visita |
detour |
Es el tiempo de desvío adicional debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera inducido por los períodos. Si la visita 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_label |
Copia del |
visit_label |
Copia del |
visit_type |
Opcional. Especifica el tipo de visita. Anula el campo |
injected_solution_location_token |
Es un token opaco que representa información sobre una ubicación de visita. Este campo se puede propagar en las visitas de las rutas de resultados cuando Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request para obtener más detalles. |
VisitType
Indica si la visita es para retirar o entregar un pedido, o bien si se trata de una visita a un Stop. Las visitas a una parada solo se usan cuando se habilita la optimización multimodal.
| Enums | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
Tipo de visita no especificado. |
PICKUP_SHIPMENT |
La visita corresponde a la recolección de un envío. |
DELIVER_SHIPMENT |
La visita corresponde a la entrega de un envío. |
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[] |
Lista de tipos incompatibles. Dos envíos que tienen diferentes |
incompatibility_mode |
Es el modo que se aplica a la incompatibilidad. |
IncompatibilityMode
Son los modos que definen cómo se restringe la aparición de envíos incompatibles en la misma ruta.
| Enums | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidad sin especificar. 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 |
En este modo, dos envíos con tipos incompatibles nunca pueden estar en el mismo vehículo al mismo tiempo:
|
ShipmentTypeRequirement
Especifica los requisitos entre los envíos según su shipment_type. Los detalles del requisito se definen según el modo de requisito.
| Campos | |
|---|---|
required_shipment_type_alternatives[] |
Es la lista de tipos de envío alternativos que requiere el |
dependent_shipment_types[] |
Todos los envíos con un tipo en el campo NOTA: No se permiten las cadenas de requisitos en las que un |
requirement_mode |
Es el modo que se aplica al requisito. |
RequirementMode
Son los modos que definen la apariencia de los envíos dependientes en una ruta.
| Enums | |
|---|---|
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ío "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 su vehículo en el momento de la entrega. |
SkippedShipment
Especifica los detalles de los envíos no realizados en una solución. En los casos triviales o si podemos identificar el motivo de la omisión, lo informamos aquí.
| Campos | |
|---|---|
index |
El índice corresponde al índice del envío en el |
label |
Copia del |
reasons[] |
Es una lista de motivos que explican por qué se omitió el envío. Consulta el comentario anterior |
penalty_cost |
Esta es una copia de Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
estimated_incompatible_vehicle_ratio |
Es la proporción estimada de vehículos que no pueden realizar este envío por, al menos, uno de los motivos que se indican a continuación. Nota: Esto solo se completa cuando los motivos involucran un vehículo. Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
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, en los 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 ningún vehículo. 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), se superaría la capacidad de "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 del código. |
example_vehicle_indices[] |
Es igual que Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
example_exceeded_capacity_type |
Si el código de motivo es |
example_vehicle_index |
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
Es el 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.
| Enums | |
|---|---|
CODE_UNSPECIFIED |
Nunca se debe usar. |
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 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 la duración del viaje, el tiempo de espera y el tiempo de servicio, supera el Nota: La duración del viaje se calcula en el mejor de los casos, es decir, como la distancia geodésica × 36 m/s (aproximadamente 130 km/h). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual que lo anterior, pero solo comparamos la duración mínima del viaje 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 ver el cálculo del tiempo) si comienza en su hora de inicio más temprana: el tiempo total haría que el vehículo termine después de su 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 pertenece a él. |
VEHICLE_IGNORED |
El campo Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
SHIPMENT_IGNORED |
El campo Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT |
El envío se omite en el Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED |
La flexibilización de la ruta del vehículo especificada en Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
ZERO_PENALTY_COST |
El envío tiene un costo de penalización de cero. Si bien esto puede ser útil como una opción de modelado avanzada, también puede explicar a posteriori por qué se omitió un envío. Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
TimeWindow
Las ventanas de tiempo 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 estrictos del período, start_time y end_time, aplican la hora más temprana y más tardía 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 ese momento, lo que genera un costo proporcional al tiempo que transcurre antes de soft_start_time. El límite superior de la ventana de tiempo flexible, soft_end_time, expresa una preferencia para que el evento ocurra en soft_end_time o antes de esa hora, lo que genera un costo proporcional al tiempo que transcurre después de 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` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
| Campos | |
|---|---|
start_time |
Es la hora de inicio del período estricto. Si no se especifica, se establecerá en |
end_time |
Es la hora de finalización del período estricto. Si no se especifica, se establecerá en |
soft_start_time |
Es la hora de inicio flexible del período. |
soft_end_time |
Es la hora de finalización flexible del período. |
cost_per_hour_before_soft_start_time |
Es un costo por hora que se agrega a otros costos del modelo si el evento ocurre antes de soft_start_time, que se calcula de la siguiente manera: Este costo debe ser positivo, y el campo solo se puede establecer si se estableció soft_start_time. |
cost_per_hour_after_soft_end_time |
Es un costo por hora que se agrega 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 estableció |
TransitionAttributes
Especifica los atributos de las transiciones entre dos visitas consecutivas en una ruta. Se pueden aplicar 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 (siguiendo la semántica natural "Y").
| Campos | |
|---|---|
src_tag |
Son etiquetas que definen el conjunto de transiciones (src->dst) a las que se aplican estos atributos. Una visita de origen o un inicio de vehículo coinciden si su |
excluded_src_tag |
Consulta los |
dst_tag |
Una visita de destino o un final de vehículo coinciden si su |
excluded_dst_tag |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Este valor 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_per_kilometer |
Especifica un costo por kilómetro que se aplica a la distancia recorrida mientras se realiza esta transición. Se suma a cualquier |
distance_limit |
Especifica un límite para la distancia recorrida mientras se realiza esta transición. A partir de junio de 2021, solo se admiten los límites flexibles. |
delay |
Especifica una demora que se produce cuando se realiza esta transición. Esta demora siempre se produce después de finalizar la visita de origen y antes de comenzar la visita de destino. |
URI
Es un identificador de recursos universal que apunta a un recurso que la API de Route Optimization puede leer y escribir.
| Campos | |
|---|---|
uri |
Es el URI del recurso. Es posible que el recurso aún no exista. El contenido del recurso se codifica como JSON o textproto. Solo se admiten recursos de Google Cloud Storage. Si el recurso está codificado como JSON, el nombre del recurso debe tener el sufijo |
Vehículo
Modela un vehículo en un problema de envío. Resolver un problema de envío 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_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 |
Es el medio de transporte, que afecta las rutas que puede usar el vehículo y su velocidad. Consulta también |
route_modifiers |
Es un conjunto de condiciones que se deben cumplir y que afectan la forma en que se calculan las rutas para el vehículo determinado. |
start_location |
Es la ubicación geográfica en la que comienza el vehículo antes de recoger cualquier envío. Si no se especifica, el vehículo comienza en su primera recogida. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
start_waypoint |
Es el punto de referencia que representa una ubicación geográfica en la que el vehículo comienza antes de retirar cualquier envío. Si no se especifica |
end_location |
Es la ubicación geográfica en la que termina el vehículo después de completar su último |
end_waypoint |
Es el punto de referencia que representa una ubicación geográfica en la que termina el vehículo después de completar su último |
start_tags[] |
Especifica las etiquetas adjuntas al inicio de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
end_tags[] |
Especifica las etiquetas adjuntas al final de la ruta del vehículo. No se permiten cadenas vacías ni duplicadas. |
start_time_windows[] |
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 Las ventanas de tiempo que pertenecen al mismo campo repetido deben ser disjuntas, es decir, ninguna ventana de tiempo puede superponerse con otra ni ser adyacente a ella, y deben estar en orden cronológico.
|
end_time_windows[] |
Son los períodos durante los cuales el vehículo puede llegar a su ubicación final. Deben estar dentro de los límites de tiempo globales (consulta los campos Las ventanas de tiempo que pertenecen al mismo campo repetido deben ser disjuntas, es decir, ninguna ventana de tiempo puede superponerse con otra ni ser adyacente a ella, y deben estar en orden cronológico.
|
unloading_policy |
Es la política de descarga que se aplica al vehículo. |
load_limits |
Capacidades del vehículo (peso, volumen, cantidad de palés, por ejemplo). Las claves del mapa son los identificadores del tipo de carga, que coinciden 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 Es el costo por hora de la ruta del vehículo. Este costo se aplica al tiempo total que toma la ruta y, además, incluye la duración del viaje, el tiempo de espera y el tiempo de visita. Usar |
cost_per_traveled_hour |
Es el costo por hora recorrida de la ruta del vehículo. Este costo se aplica solo a la duración del viaje que toma la ruta (es decir, la que se informa en |
cost_per_kilometer |
Es el costo por kilómetro de la ruta del vehículo. Este costo se aplica a la distancia informada en el |
fixed_cost |
Es el costo fijo que se aplica si este vehículo se usa para administrar un envío. |
used_if_route_is_empty |
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 como usado o no en este caso. Si es verdadero, el vehículo va desde su ubicación de inicio hasta la de finalización, incluso si no entrega ningún envío, y se tienen en cuenta los costos de tiempo y distancia que resultan de su viaje de inicio a fin. De lo contrario, no se desplaza desde su ubicación de inicio hasta la de finalización, y no se programan |
route_duration_limit |
Es el límite que se aplica a la duración total de la ruta del vehículo. En un |
travel_duration_limit |
Es el límite que se aplica a la duración del viaje de la ruta del vehículo. En un |
route_distance_limit |
Es el límite que se aplica a la distancia total de la ruta del vehículo. En una |
extra_visit_duration_for_visit_type |
Especifica una asignación 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 tipo en el mapa. |
break_rule |
Describe el programa de descansos que se aplicará a 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 envío lo realiza un vehículo ignorado en |
travel_duration_multiple |
Especifica un factor multiplicativo que se puede usar para aumentar o disminuir la duración del viaje de este vehículo. Por ejemplo, si se establece en 2.0, significa que este vehículo es más lento y tiene duraciones de viaje que duplican las de los vehículos estándar. Este múltiplo no afecta la duración de las visitas. Sí afecta el costo si se especifican ADVERTENCIA: Las duraciones del 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 provocar 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 de hardware o de software.
Cuando se define un campo de límite flexible, se deben definir juntos el umbral máximo flexible y su costo asociado.
| Campos | |
|---|---|
max_duration |
Es un límite estricto que restringe la duración para que sea, como máximo, max_duration. |
soft_max_duration |
Es un límite flexible que no aplica un límite de duración máxima, pero, cuando se incumple, hace que la ruta genere un costo. Este costo se suma a otros costos definidos en el modelo, con la misma unidad. Si se define, |
quadratic_soft_max_duration |
Es un límite flexible que 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 establece
|
cost_per_hour_after_soft_max |
Es el costo por hora en el que se incurre si se incumple el umbral de El costo no debe ser negativo. |
cost_per_square_hour_after_quadratic_soft_max |
Es el costo por hora al cuadrado en el que se incurre si se infringe el umbral de El costo adicional es 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_max_load |
Es un límite flexible de la carga. Consulta los |
cost_per_unit_above_soft_max |
Si la carga supera |
start_load_interval |
Es el intervalo de carga aceptable del vehículo al comienzo de la ruta. |
end_load_interval |
Es el intervalo de carga aceptable del vehículo al final de la ruta. |
max_load |
Es la cantidad máxima aceptable de carga. |
cost_per_kilometer |
Es el costo de mover una unidad de carga a lo largo de un kilómetro para este vehículo. Esto se puede usar como un proxy para el consumo de combustible: si la carga es un peso (en Newtons), entonces carga*kilómetro tiene la dimensión de una energía. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles. |
cost_per_traveled_hour |
Es el costo de viajar con una unidad de carga durante una hora para este vehículo. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles. |
Intervalo
Es el intervalo de cantidades de carga 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, |
LoadCost
Es el costo de mover una unidad de carga durante un Transition. Para una carga determinada, el costo es la suma de dos partes:
- min(load,
load_threshold) *cost_per_unit_below_threshold - max(0, load -
load_threshold) *cost_per_unit_above_threshold
Con este costo, las soluciones prefieren entregar primero las demandas altas o, de manera equivalente, recoger las demandas altas al final. Por ejemplo, si un vehículo tiene
load_limit {
key: "weight"
value {
cost_per_kilometer {
load_threshold: 15
cost_per_unit_below_threshold: 2.0
cost_per_unit_above_threshold: 10.0
}
}
}
y su ruta es inicio,retiro,retiro,entrega,entrega,fin con las siguientes transiciones:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
entonces el costo en el que incurre este LoadCost es (cost_below * load_below * kilómetros + cost_above * load_above * kms)
- transición 0: 0.0
- transición 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- transición 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 4: 0.0
Por lo tanto, el LoadCost de la ruta es 120.0.
Sin embargo, si la ruta es inicio,retiro,entrega,retiro,entrega,finalización con transiciones:
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travel_distance_meters: 1000.0 }
entonces el costo en el que incurre este LoadCost es
- transición 0: 0.0
- transición 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 2: 0.0
- transición 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transición 4: 0.0
Aquí, el LoadCost sobre la ruta es 40.0.
LoadCost hace que las soluciones con transiciones de carga pesada sean más costosas.
Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para obtener más detalles.
| Campos | |
|---|---|
load_threshold |
Es la cantidad de carga por encima de la cual el costo de mover una unidad de carga cambia de cost_per_unit_below_threshold a cost_per_unit_above_threshold. Debe ser >= 0. |
cost_per_unit_below_threshold |
Es el costo de mover una unidad de carga, para cada unidad entre 0 y el umbral. Debe ser un valor finito y >= 0. |
cost_per_unit_above_threshold |
Es el costo de mover una unidad de carga por cada unidad que supere el umbral. En el caso especial de que el umbral sea 0, se trata de un costo fijo por unidad. Debe ser un valor finito y >= 0. |
TravelMode
Son los modos de viaje que pueden usar los vehículos.
Estos deben ser un subconjunto de los modos de viaje de la API de Routes de Google Maps Platform. Consulta https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.
Nota: Las rutas de WALKING están en versión beta y, a veces, es posible que no incluyan veredas o rutas peatonales claras. Debes mostrar esta advertencia al usuario para todas las rutas a pie que muestres en tu app.
| Enums | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Es el medio de transporte no especificado, equivalente a DRIVING. |
DRIVING |
Es el modo de viaje correspondiente a las instrucciones sobre cómo llegar (en automóvil, etcétera). |
WALKING |
Es el medio de transporte correspondiente a las instrucciones sobre cómo llegar a pie. |
UnloadingPolicy
Es la política sobre cómo se puede descargar un vehículo. Se aplica solo a los envíos que tienen un retiro y una entrega.
Otros envíos pueden realizarse en cualquier lugar de la ruta, independientemente de unloading_policy.
| Enums | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada; las entregas solo deben realizarse después de sus retiros correspondientes. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en el orden inverso al de las retiradas |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las recogidas |
VehicleFullness
VehicleFullness es una métrica que calcula qué tan lleno está un vehículo. Cada campo VehicleFullness está entre 0 y 1, y se calcula como la proporción entre un campo de métrica limitado (p.ej., AggregatedMetrics.travel_distance_meters) y su límite de vehículo relacionado (p.ej., Vehicle.route_distance_limit), si existe. De lo contrario, la proporción de llenado no se establece. Si el límite es 0, el campo se establece en 1. Nota: Cuando una ruta está sujeta a inviabilidades de tráfico, algunas proporciones de ocupación sin procesar pueden superar 1.0, p.ej., el vehículo puede superar su límite de distancia. En estos casos, limitamos los valores de plenitud a 1.0.
| Campos | |
|---|---|
max_fullness |
Máximo de todos los demás campos de este mensaje. |
distance |
Es la proporción entre |
travel_duration |
Es la proporción entre [AggregatedMetrics.travel_duration_seconds][] y |
active_duration |
Es la proporción entre [AggregatedMetrics.total_duration_seconds][] y |
max_load |
Es la proporción máxima entre todos los tipos de [AggregatedMetrics.max_load][] y sus respectivos |
active_span |
La proporción (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) para un vehículo determinado. Si el denominador no está presente, se usa ( |
Punto de referencia
Encapsula un punto de referencia. Los puntos de referencia marcan las ubicaciones de llegada y salida de las VisitRequests, y las ubicaciones de inicio y finalización de los Vehicles.
| Campos | |
|---|---|
side_of_road |
Opcional. Indica que la ubicación de este punto de referencia tiene como objetivo que el vehículo se detenga en un lado específico de la ruta. Cuando estableces este valor, la ruta pasa por la ubicación para que el vehículo pueda detenerse en el lado de la ruta hacia el que se sesga la ubicación desde el centro de la ruta. Esta opción no funciona para el modo de viaje "WALKING". |
vehicle_stopover |
Indica que el punto de referencia está destinado a que los vehículos se detengan, ya sea para recoger o dejar pasajeros. Esta opción solo funciona para el modo de viaje "DRIVING" y cuando el "location_type" es "location". Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
Campo de unión location_type. Diferentes formas de representar una ubicación location_type puede ser solo uno de los parámetros siguientes: |
|
location |
Es un punto especificado con coordenadas geográficas, incluido un encabezado opcional. |
place_id |
Es el ID de lugar del PDI asociado con el punto de referencia. Cuando uses un ID de lugar para especificar la ubicación de llegada o salida de una VisitRequest, usa un ID de lugar que sea lo suficientemente específico como para determinar una ubicación LatLng para la navegación al lugar. Por ejemplo, un ID de lugar que representa un edificio es adecuado, pero no se recomienda un ID de lugar que representa una ruta. |