Í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)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
Servicio para optimizar los recorridos de 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 el rango de [0, 253402300799], es decir, en el rango de [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- Los nanosegundos deben estar sin configurar o establecidos en 0.
google.protobuf.Duration- Los segundos deben estar en el rango de [0, 253402300799], es decir, en el rango de [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- Los nanosegundos deben estar sin configurar o establecidos en 0.
google.type.LatLng- La latitud debe estar en el rango [-90.0, 90.0].
- La longitud debe estar en el rango [-180.0, 180.0].
- Al menos una de las coordenadas de latitud y longitud debe ser distinta de cero.
| BatchOptimizeTours |
|---|
|
Optimiza los recorridos de vehículos para uno o más mensajes de Este método es una operación de larga duración (LRO). Las entradas (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 Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request para obtener más detalles.
|
| OptimizeToursUri |
|---|
|
Esta es una variante del método El cliente especifica el URI del Este método se debe preferir al método El Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request para obtener más detalles.
|
AggregatedMetrics
Son las métricas agregadas para ShipmentRoute (respectivamente, para OptimizeToursResponse en todos los elementos de Transition o Visit [respectivamente, en todos los elementos de ShipmentRoute]).
| Campos | |
|---|---|
performed_shipment_count |
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 espera para una ruta o una solución. |
delay_duration |
Es la duración total del retraso de una ruta o una solución. |
break_duration |
Es la duración total de las pausas para 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 para una ruta o una solución. |
max_loads |
Carga máxima alcanzada en toda la ruta (o solución), para cada una de las cantidades en esta ruta (o solución), calculada como el máximo en todos los |
performed_mandatory_shipment_count |
Cantidad de envíos obligatorios realizados. Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
performed_shipment_penalty_cost_sum |
Es la suma del Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
BatchOptimizeToursMetadata
Este tipo no tiene campos.
Son los metadatos de la operación para las llamadas a BatchOptimizeToursRequest.
BatchOptimizeToursRequest
Solicita la optimización por lotes de 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_configs[] |
Obligatorio. Información de entrada y salida de cada modelo de compra, como rutas de acceso a archivos y formatos de datos |
AsyncModelConfig
Es la 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 y se puede usar como alias para hacer un seguimiento de los modelos. |
input_config |
Obligatorio. Es 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. Este valor se devuelve en la operación de larga duración después de que se completa la operación.
BreakRule
Son reglas para generar interrupciones de tiempo para un vehículo (p.ej., descansos para el almuerzo). Una pausa es un período de tiempo contiguo durante el cual el vehículo permanece inactivo en su posición actual y no puede realizar ninguna visita. Puede ocurrir una interrupción en los siguientes casos:
- durante el viaje entre dos visitas (lo que incluye el tiempo inmediatamente anterior o posterior a una visita, pero no en el medio de una visita), en cuyo caso extiende el tiempo de tránsito correspondiente entre las visitas
- o antes del arranque del vehículo (es posible que el vehículo no arranque en medio de una pausa), en cuyo caso no afecta la hora de arranque del vehículo.
- o después del final del vehículo (ídem, con la hora de finalización del vehículo).
| Campos | |
|---|---|
break_requests[] |
Es la secuencia de interrupciones. Ver el mensaje |
frequency_constraints[] |
Se pueden aplicar varios |
BreakRequest
La secuencia de descansos (es decir, su cantidad y orden) que se aplican a cada vehículo debe conocerse 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 orden (esto se verifica).
| Campos | |
|---|---|
earliest_start_time |
Obligatorio. Límite inferior (inclusive) del inicio del receso. |
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
También 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 de 12 h, debe haber al menos un descanso de al menos una hora", ese ejemplo se traduciría al siguiente FrequencyConstraint:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Los tiempos 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 BreakRequest.
En la práctica, un FrequencyConstraint puede aplicarse a interrupciones no consecutivas. Por ejemplo, la siguiente programación respeta el ejemplo "1h cada 12h":
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 este parámetro de restricción. No negativo. Consulta la descripción de |
max_inter_break_duration |
Obligatorio. Es el lapso máximo permitido de cualquier intervalo de tiempo en la ruta que no incluye, al menos de forma parcial, una interrupción de |
DataFormat
Formatos de datos para archivos de entrada y salida
| Enums | |
|---|---|
DATA_FORMAT_UNSPECIFIED |
Valor no válido. El formato no debe ser UNSPECIFIED. |
JSON |
Es la notación de objetos de JavaScript. |
PROTO_TEXT |
Es el 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 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 ambos deben ser no negativos.
| Campos | |
|---|---|
max_meters |
Es un límite estricto que restringe la distancia a un máximo de max_meters. El límite no debe ser negativo. |
soft_max_meters |
Es un límite flexible que no aplica un límite de distancia máximo, 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
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
Ubicación de Google Cloud Storage desde la que se leerá el archivo de entrada.
| Campos | |
|---|---|
uri |
Obligatorio. URI de un objeto de Google Cloud Storage con el formato |
InjectedSolutionConstraint
Es la solución insertada en la solicitud, que incluye 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 algunas rutas se omitan de la solución original. Las rutas y los envíos omitidos deben satisfacer las suposiciones básicas de validez que se indican para |
skipped_shipments[] |
Son los envíos omitidos de la solución que se insertará. Es posible que algunos se omitan en la solución original. Observa el campo |
constraint_relaxations[] |
Para cero o más grupos de vehículos, especifica cuándo y en qué medida 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 relajarán las restricciones sobre las visitas y hasta qué nivel. Los envíos que se indican en el campo skipped_shipment están restringidos para que se omitan, es decir, no se pueden realizar.
| Campos | |
|---|---|
relaxations[] |
Son todas las relajaciones de restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en |
vehicle_indices[] |
Especifica los índices de los 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 la restricción que se aplica a una visita #j que satisface 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 relaja a relaxations(i).level si satisface lo siguiente:
vehicle_start_time >= relaxations(i).threshold_timeYrelaxations(i).threshold_visit_count == 0y el extremo del vehículo se relaja arelaxations(i).levelsi satisface 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 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 el final, pasando por las visitas a la ruta en orden, 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 momento 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 satisfacen las condiciones de ninguna relajación, la hora se fija, a menos que el vehículo esté vacío.
| Campos | |
|---|---|
level |
Es el nivel de relajación de la restricción que se aplica cuando se cumplen las condiciones en |
threshold_time |
Fecha y hora en la que se puede aplicar la relajación |
threshold_visit_count |
Cantidad de visitas a partir de la cual 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 se satisfacen las condiciones del umbral.
La siguiente enumeración se presenta en orden de relajación creciente.
| Enums | |
|---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: 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 los horarios de inicio de las visitas y los horarios de inicio y finalización de los vehículos, pero cada visita seguirá vinculada al mismo vehículo y se deberá observar la secuencia de visitas: no se puede insertar ninguna visita entre ellas ni antes de ellas. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD, pero la secuencia de visitas también es flexible: solo este vehículo puede realizar visitas, pero estas pueden no realizarse. |
RELAX_ALL_AFTER_THRESHOLD |
Es 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 pueden dejar de realizarse. |
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. Las direcciones (source) solo pueden ser una de las siguientes opciones: |
|
gcs_source |
Es una ubicación de Google Cloud Storage. Debe ser un solo objeto (archivo). |
Ubicación
Encapsula una ubicación (un punto geográfico y un encabezado opcional).
| Campos | |
|---|---|
lat_lng |
Son las coordenadas geográficas de la parada. |
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 recogida y la entrega. Los valores de dirección pueden ser de 0 a 360, donde 0 especifica una dirección hacia el norte, 90 especifica una dirección hacia el este, etcétera. |
OptimizeToursLongRunningMetadata
Este tipo no tiene campos.
Son los metadatos de la operación para las llamadas a OptimizeToursLongRunning.
OptimizeToursRequest
Es la solicitud que se le envía a un solucionador de optimización de recorridos y 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 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 se agote el tiempo de espera. |
model |
Es el modelo de envío que se debe resolver. |
solving_mode |
De forma predeterminada, el modo de solución es |
search_mode |
Es el modo de búsqueda que se usa para resolver la solicitud. |
injected_first_solution_routes[] |
Guía el algoritmo de optimización para encontrar una primera solución similar a una solución anterior. El modelo se restringe cuando se crea 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 necesariamente se muestra un error de validación, sino que se puede mostrar un error que indique que no es factible. |
injected_solution_constraint |
Restringe el algoritmo de optimización para encontrar una solución final que sea similar a una solución anterior. Por ejemplo, se puede usar para inmovilizar partes de rutas que ya se completaron o que se deben completar, pero no se deben modificar. Si la solución insertada no es factible, no necesariamente se muestra un error de validación, sino que se puede mostrar un error que indique que no es factible. |
refresh_details_routes[] |
Si no está vacío, se actualizarán las rutas proporcionadas sin modificar su secuencia subyacente de visitas ni los tiempos de viaje: solo se actualizarán otros detalles. Esto no resuelve el modelo. Desde el 2020/11, esto solo completa las polilíneas de las rutas no vacías y requiere que Los campos Este campo no se debe usar junto con
|
interpret_injected_solutions_using_labels |
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 afectar las restricciones implícitas, lo que puede generar cambios en la solución, errores de validación o inviabilidad. NOTA: El llamador debe asegurarse de que cada |
consider_road_traffic |
Considera la estimación del tráfico para calcular los campos |
populate_polylines |
Si es verdadero, se completarán las polilíneas en las respuestas de |
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 configura este parámetro, 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 (aunque sigue siendo pequeño). |
use_geodesic_distances |
Si es verdadero, las distancias de viaje se calcularán con distancias geodésicas en lugar de distancias de Google Maps, y los tiempos de viaje se calcularán con distancias geodésicas y una velocidad definida por |
label |
Es la etiqueta que se puede usar para identificar esta solicitud y que se devuelve en |
geodesic_meters_per_second |
Cuando |
max_validation_errors |
Trunca la cantidad de errores de validación que se muestran. Por lo general, estos errores se adjuntan a una carga útil de error INVALID_ARGUMENT como un detalle de error 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 equilibra la latencia con la calidad de la solución. En todos los modos, se aplica el plazo global de la solicitud.
| Enums | |
|---|---|
SEARCH_MODE_UNSPECIFIED |
Modo de búsqueda sin especificar, equivalente a RETURN_FAST. |
RETURN_FAST |
Detén la búsqueda después de encontrar la primera 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 en 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. 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: completa tantos OptimizeToursResponse.validation_errors como sea posible. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Solo completa IMPORTANTE: Aquí no se muestran todos los envíos no factibles, sino solo los que se detectan como no factibles durante el preprocesamiento. |
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
Es la respuesta después de resolver un problema de optimización de rutas que contiene las rutas que siguió 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-ésima corresponde al i-ésimo vehículo del modelo. |
request_label |
Copia del |
skipped_shipments[] |
Es la lista de todos los envíos que se omitieron. |
validation_errors[] |
Es la lista de todos los errores de validación que pudimos detectar de forma independiente. Consulta la explicación de "VARIOS ERRORES" para el mensaje |
processed_request |
En algunos casos, modificamos la solicitud entrante antes de resolverla, es decir, agregamos costos. Si solving_mode == TRANSFORM_AND_RETURN_REQUEST, aquí se devuelve la solicitud modificada. Experimental: Consulta https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para obtener más detalles. |
metrics |
Son las métricas de duración, distancia y uso de esta solución. |
Métricas
Son las métricas generales, agregadas en todas las rutas.
| Campos | |
|---|---|
aggregated_route_metrics |
Se agregan en todas las rutas. Cada métrica es la suma (o el máximo, en el caso de las cargas) de todos los campos |
skipped_mandatory_shipment_count |
Es la cantidad de envíos obligatorios que se omitieron. |
used_vehicle_count |
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 |
latest_vehicle_end_time |
Es la hora de finalización más reciente para un vehículo usado, calculada como el máximo de |
costs |
Costo de la solución, desglosado por los campos de solicitud relacionados con el costo. Las claves son rutas de acceso a .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 registran aquí en detalle, con la excepción de los costos relacionados con TransitionAttributes, que solo se registran de forma agregada a partir del 2022/01. |
total_cost |
Costo total de la solución Es la suma de todos los valores en el mapa de costos. |
OptimizeToursUriMetadata
Este tipo no tiene campos.
Son los metadatos de la operación para las llamadas a OptimizeToursUri.
OptimizeToursUriRequest
Es una solicitud que usa el método OptimizeToursUri.
| 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. |
input |
Obligatorio. URI del objeto de Cloud Storage que contiene el |
output |
Obligatorio. 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 encontró durante la validación de 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 generar 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 de 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, puedes referirte a la primera recolección del vehículo núm. 4 y el envío núm. 2 de la siguiente manera: Sin embargo, ten en cuenta que la cardinalidad de |
error_message |
Es una cadena legible 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 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 en 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 de la siguiente manera:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Sin embargo, omitimos las entidades de nivel superior, como OptimizeToursRequest o ShipmentModel, para evitar que el mensaje se vea sobrecargado.
| Campos | |
|---|---|
name |
Nombre del campo, p.ej., "vehicles". |
sub_field |
Es un subcampo anidado de forma recursiva, si es necesario. |
Campo de unión
|
|
index |
Í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 datos de salida. |
Campo de unión destination. Obligatorio. Las direcciones (destination) solo pueden ser una de las siguientes opciones: |
|
gcs_destination |
Ubicación de Google Cloud Storage en la que se escribirá el resultado. |
RouteModifiers
Encapsula un conjunto de condiciones opcionales que se deben satisfacer cuando se calculan rutas de vehículos. 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 incluyan rutas con peaje. Solo se aplica a los modos de viaje 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 modos de viaje motorizados. |
avoid_ferries |
Especifica si se deben evitar los ferris cuando sea razonable. Se dará preferencia a las rutas que no incluyan viajes en transbordador. Solo se aplica a los modos de viaje motorizados. |
avoid_indoor |
Opcional. Especifica si se debe evitar la navegación en interiores cuando sea razonable. Se dará 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 una de sus recolecciones hasta una de sus entregas. Para que el envío se considere realizado, un vehículo único debe visitar una de sus ubicaciones de retiro (y disminuir sus capacidades de repuesto en consecuencia) y, luego, visitar una de sus ubicaciones de entrega (y, por lo tanto, volver a aumentar sus capacidades de repuesto en consecuencia).
| Campos | |
|---|---|
display_name |
Es el nombre visible del envío definido por el usuario. Puede tener hasta 63 caracteres y puede usar caracteres UTF-8. |
pickups[] |
Es el conjunto de alternativas de retiro asociadas al envío. Si no se especifica, el vehículo solo 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 las paradas. |
load_demands |
Demandas de carga del envío (por ejemplo, peso, volumen, cantidad de palets, 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étera. 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 realizarla. Los vehículos se indican por su índice en la lista |
costs_per_vehicle[] |
Especifica el costo en el que se incurre cuando cada vehículo entrega este envío. Si se especifica, debe tener ALGUNA 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 la partida hasta el destino. Si se especifica, debe ser no negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, sea t el tiempo más corto que se tarda en ir desde la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, el parámetro de configuración Si se especifican límites relativos y absolutos en el mismo envío, se usará el límite más restrictivo para cada par posible de retiro o entrega. Desde el 10/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 un retiro 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áximas: 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 campo |
ignore |
Si es verdadero, se omite este envío, pero no se aplica un Si se ignora un envío, se produce un error de validación cuando hay algún Se permite ignorar un envío que se realiza en |
penalty_cost |
Si no se completa el envío, esta penalización se agrega al costo general de las rutas. Un envío se considera completado si se visita una de sus alternativas de retiro y entrega. El costo se puede expresar en la misma unidad que se usa para todos los demás campos relacionados con 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_to_delivery_relative_detour_limit |
Especifica el tiempo máximo de desvío relativo en comparación con la ruta más corta desde la partida hasta el destino. Si se especifica, debe ser no negativo, y el envío debe contener al menos un retiro y una entrega. Por ejemplo, sea t el tiempo más corto que se tarda en ir desde la alternativa de retiro seleccionada directamente a la alternativa de entrega seleccionada. Luego, el parámetro de configuración Si se especifican límites relativos y absolutos en el mismo envío, se usará el límite más restrictivo para cada par posible de retiro o entrega. Desde el 10/2017, los desvíos solo se admiten cuando las duraciones de los viajes no dependen de los vehículos. |
Cargar
Cuando se realiza una visita, se puede agregar una cantidad predefinida a la carga del vehículo si se trata de un retiro o 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. 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
Solicitud de una visita que se puede realizar en vehículo: tiene una ubicación geográfica (o dos, consulta a continuación), horarios de apertura y cierre representados por ventanas de tiempo, y un tiempo de duración del servicio (tiempo que pasa el vehículo una vez que llega para recoger o dejar mercancías).
| Campos | |
|---|---|
arrival_location |
Es la ubicación geográfica a la que llega el vehículo cuando realiza esta acción de |
arrival_waypoint |
Es el punto de ruta al que llega el vehículo cuando realiza este |
departure_location |
Es la ubicación geográfica desde la que el vehículo sale después de completar este |
departure_waypoint |
Es la parada en la que el vehículo sale 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 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 hora de llegada, es decir, la hora de llegada y la duración no tienen que estar dentro de un período. Esto puede generar tiempo de espera si el vehículo llega antes de La ausencia de Los períodos no deben superponerse ni ser adyacentes, y deben estar en orden ascendente.
|
duration |
Duración de la visita, es decir, el tiempo que el vehículo pasa entre la llegada y la salida (se debe agregar al posible tiempo de espera; consulta |
cost |
Es el costo de atender esta solicitud de visita en una ruta de vehículo. Se puede usar para pagar diferentes costos por cada alternativa de retiro o entrega 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. 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 función para evitar giros en U es el mejor esfuerzo y 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 deben realizarse con un conjunto de vehículos, y minimiza el costo general, que es la suma de los siguientes elementos:
- El costo de la planificación de rutas de los vehículos (suma del costo por tiempo total, el costo por tiempo de viaje y el costo fijo en 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 no debe tener 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 período del modelo debe ser inferior a un año, es decir, Cuando uses campos de |
global_end_time |
Si no se establece, se usa la hora predeterminada 00:00:00 UTC del 1 de enero de 1971 (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 del trabajo lo antes posible, 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[] |
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 usan reglas de precedencia que incluyen 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 la visita y del vehículo hasta las ubicaciones de finalización de la visita y del vehículo.
| Campos | |
|---|---|
rows[] |
Especifica las filas de la matriz de duración y distancia. Debe tener la misma cantidad de elementos que |
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 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[] |
Son los valores de duración para una fila determinada. Debe tener la misma cantidad de elementos que |
meters[] |
Son los valores de distancia para una fila determinada. Si no hay costos ni restricciones que hagan 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, p.ej., 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 |
Es el valor que se le debe asignar a este objetivo en relación con los demás. Puede ser cualquier número no negativo, y los pesos no tienen que sumar 1. Los pesos tienen un valor predeterminado de 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 total de trabajo, sumado para todos los vehículos |
MIN_TRAVEL_TIME |
Igual que el anterior, pero enfocándose solo en el tiempo de viaje. |
MIN_NUM_VEHICLES |
Minimiza la cantidad de vehículos que se usan. |
PrecedenceRule
Es una regla de precedencia entre dos eventos (cada evento es el retiro o la entrega de un envío): El evento "segundo" debe comenzar al menos offset_duration después de que haya comenzado el evento "primero".
Varias precedencias pueden hacer referencia a los mismos eventos (o eventos relacionados), p.ej.: "El retiro de B se realiza después de la entrega de A" y "El retiro de C se realiza después del retiro 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 evento "first" es una entrega. |
second_is_delivery |
Indica si el evento "segundo" es una entrega. |
offset_duration |
Es el desplazamiento entre el evento "primero" y el "segundo". Puede ser negativo. |
first_index |
Índice de envío del evento "primero". Se debe especificar este campo. |
second_index |
Índice de envío del evento "second". Se debe especificar este campo. |
ShipmentRoute
La ruta de un vehículo se puede descomponer a lo largo del eje temporal 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 tipos de datos:
- "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 partida). Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre visitas. Si bien los intervalos de tiempo a veces pueden tener una duración cero, es decir, comenzar y finalizar en el mismo segundo, a menudo tienen una duración positiva.
Invariantes:
- Si hay n visitas, hay n+1 transiciones.
- Una visita siempre está rodeada por una transición antes (mismo índice) y una transición después (índice + 1).
- El inicio del vehículo siempre está seguido de la transición núm. 0.
- El final del vehículo siempre está precedido por la transición núm.
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, así es como se pueden organizar los estados TRAVEL, BREAKS, DELAY y WAIT durante una transición.
- No se superponen.
- El DELAY es único y debe ser un período contiguo inmediatamente anterior a la próxima visita (o al final del viaje del vehículo). Por lo tanto, basta con conocer la duración de la demora para saber su hora de inicio y finalización.
- Los BREAKS son períodos de tiempo contiguos y no superpuestos. La respuesta especifica la hora de inicio y la duración de cada interrupción.
- 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 el "tiempo de 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 |
Vehículo que realiza la ruta, identificado por su índice en el |
vehicle_label |
Etiqueta del vehículo que realiza esta ruta, igual a |
vehicle_start_time |
Hora en la que el vehículo comienza su ruta. |
vehicle_end_time |
Fecha y hora en que el vehículo finaliza su ruta. |
visits[] |
Es la secuencia ordenada de visitas que representa una ruta. visits[i] es la visita i-ésima en la ruta. Si este campo está vacío, se considera que el vehículo no se usa. |
transitions[] |
Lista ordenada de transiciones para la ruta. |
has_traffic_infeasibilities |
Cuando Es probable que la llegada a next_visit se produzca más tarde que su intervalo actual debido al aumento de la estimación del tiempo de viaje |
route_polyline |
Es la representación de la ruta en forma de polilínea codificada. Este campo solo se propaga si |
breaks[] |
Son los descansos programados para el vehículo que realiza esta ruta. La secuencia |
metrics |
Son las métricas de duración, distancia y carga para esta ruta. Los campos de |
vehicle_fullness |
Campo Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
route_costs |
Costo de la ruta, desglosado por los campos de la solicitud relacionados con el costo. Las claves son rutas de acceso a .proto, relativas al 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 a lo largo de la ruta. Todos los costos definidos en el modelo se registran aquí en detalle, con la excepción de los costos relacionados con TransitionAttributes, que solo se registran de forma agregada a partir del 2022/01. |
route_total_cost |
Es el costo total de la ruta. Es la suma de todos los costos en el mapa de costos. |
Receso
Son datos que representan la ejecución de una pausa.
| Campos | |
|---|---|
start_time |
Es la hora de inicio de un descanso. |
duration |
Es la duración de un descanso. |
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
Transición entre dos eventos en la ruta. Consulta la descripción de ShipmentRoute.
Si el vehículo no tiene start_location o end_location, las métricas de viaje correspondientes son 0.
| Campos | |
|---|---|
travel_duration |
Duración del viaje durante esta transición. |
travel_distance_meters |
Distancia recorrida durante la transición. |
traffic_info_unavailable |
Cuando se solicita el tráfico a través de |
delay_duration |
Es la suma de las duraciones de la demora aplicadas a esta transición. Si hay alguna, la demora comienza exactamente |
break_duration |
Suma de la duración de los descansos que se producen durante esta transición, si corresponde. Los detalles sobre la hora de inicio y la duración de cada interrupción se almacenan en |
wait_duration |
Tiempo de espera durante esta transición. La duración de espera corresponde al tiempo de inactividad y no incluye el tiempo de descanso. También ten en cuenta que este tiempo de espera se puede dividir en varios intervalos no contiguos. |
total_duration |
Es la duración total de la transición, que se proporciona para mayor comodidad. 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 cambio de 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 la misma ruta. Este campo solo se propaga si |
vehicle_loads |
Cargas de vehículos 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, 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 |
Índice del campo |
is_pickup |
Si es verdadero, la visita corresponde a un retiro de un |
visit_request_index |
Índice de |
start_time |
Fecha y hora en que comienza la visita. Ten en cuenta que es posible que el vehículo llegue antes a la ubicación de la visita. Los períodos coinciden con los de |
load_demands |
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_label |
Copia del |
visit_label |
Copia del |
injected_solution_location_token |
Es un token opaco que representa información sobre la ubicación de una 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. |
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 diferentes |
incompatibility_mode |
Es el modo que se aplica a la incompatibilidad. |
IncompatibilityMode
Son los modos que definen cómo se restringe la apariencia de los 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 cadenas de requisitos en las que un |
requirement_mode |
Es el modo aplicado 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 sin especificar. Este valor nunca debe usarse. |
PERFORMED_BY_SAME_VEHICLE |
En este modo, todos los envíos "dependientes" deben compartir el mismo vehículo que al menos uno de sus envíos "obligatorios". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con el modo Por lo tanto, el retiro de un envío "dependiente" debe 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 la causa de la omisión, informamos el motivo aquí.
| Campos | |
|---|---|
index |
El índice corresponde al índice del envío en el |
label |
Copia del |
reasons[] |
Es una lista de motivos que explican por qué se omitió el envío. Consulta el comentario anterior |
penalty_cost |
Esta es una copia del 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 siguientes motivos. Nota: Este campo 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 enumerará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 son iguales, excepto example_vehicle_index. Ejemplo:
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
El envío omitido es incompatible con todos los vehículos. Los motivos pueden ser diferentes para todos los vehículos, pero se excedería la capacidad de "Manzanas" de al menos un vehículo (incluido el vehículo 1), se excedería la capacidad de "Peras" de al menos un vehículo (incluido el vehículo 3) y se excedería el límite de distancia de al menos un vehículo (incluido el vehículo 1).
| Campos | |
|---|---|
code |
Consulta los comentarios del código. |
example_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 está relacionado con una incompatibilidad entre el vehículo y el envío, este campo proporciona el índice de un vehículo pertinente. |
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 que haga que todos los envíos sean inviables. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
La demanda del envío supera la capacidad de un vehículo para algunos tipos de capacidad, uno de los cuales es 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, 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 distancia geodésica x 36 m/s (aproximadamente 130 km/h). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual que antes, 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 en su hora de inicio más temprana: el tiempo total haría que el vehículo finalice 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 Experimental: El comportamiento o la existencia de este campo pueden cambiar en el futuro. |
VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED |
La relajació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 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
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 la ventana temporal estricta, start_time y end_time, imponen 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 temporal flexible, soft_start_time, expresa una preferencia para que el evento ocurra en soft_start_time o después de esa fecha, ya que genera un costo proporcional al tiempo que transcurre antes de soft_start_time. El límite superior de la ventana temporal flexible, soft_end_time, expresa una preferencia para que el evento ocurra en soft_end_time o antes, ya que incurre en un costo proporcional al tiempo que transcurre después de soft_end_time hasta que 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 cumplir con 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 de tiempo fijo. Si no se especifica, se establecerá en |
end_time |
Es la hora de finalización del período fijo. 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. Se calcula de la siguiente manera: Este costo debe ser positivo y el campo solo se puede establecer si se configuró soft_start_time. |
cost_per_hour_after_soft_end_time |
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 configurar 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, todos los costos adicionales se suman y se aplica la restricción o el límite más estricto (siguiendo la semántica natural "Y").
| Campos | |
|---|---|
src_tag |
Son las 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 al destino o un final de viaje del vehículo coinciden si su |
excluded_dst_tag |
Consulta los |
cost |
Especifica un costo para realizar esta transición. Esta unidad es la misma que la de todos los demás costos del modelo y no debe ser negativa. 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 durante esta transición. Se suma a cualquier |
distance_limit |
Especifica un límite en la distancia recorrida durante esta transición. Desde el 2021/06, solo se admiten límites flexibles. |
delay |
Especifica una demora que se produce cuando se realiza esta transición. Este retraso siempre se produce después de finalizar la visita de origen y antes de comenzar la visita de destino. |
URI
Es un identificador universal de recursos 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 los 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 comienza en start_location y termina 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 modo de viaje 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 |
Ubicación geográfica en la que se encuentra el vehículo antes de recoger cualquier envío. Si no se especifica, el vehículo comienza en su primera parada. Si el modelo de envío tiene matrices de duración y distancia, no se debe especificar |
start_waypoint |
Es un punto de referencia que representa una ubicación geográfica en la que el vehículo se detiene antes de recoger cualquier envío. Si no se especifican |
end_location |
Ubicación geográfica en la que se detiene el vehículo después de completar su último |
end_waypoint |
Es un punto de ruta que representa una ubicación geográfica en la que el vehículo se detiene 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[] |
Períodos durante los cuales el vehículo puede salir de su ubicación de inicio. 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 ser adyacente a él, 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 Los períodos que pertenecen al mismo campo repetido deben ser disjuntos, es decir, ningún período puede superponerse con otro ni ser adyacente a él, y deben estar en orden cronológico.
|
unloading_policy |
Se aplica la política de descarga en el vehículo. |
load_limits |
Capacidades del vehículo (peso, volumen, cantidad de palets, por ejemplo) Las claves del mapa son los identificadores del tipo de carga, coherentes con las claves del campo |
cost_per_hour |
Costos del vehículo: Todos los costos se suman y deben estar en la misma unidad que Es el costo por hora de la ruta del vehículo. Este costo se aplica al tiempo total que tarda la ruta y comprende el tiempo de viaje, el tiempo de espera y el tiempo de visita. Usar |
cost_per_traveled_hour |
Es el costo por hora de viaje de la ruta del vehículo. Este costo solo se aplica al tiempo de viaje que toma la ruta (es decir, el 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 |
fixed_cost |
Es el costo fijo que se aplica si se usa este vehículo para transportar un envío. |
used_if_route_is_empty |
Este campo solo se aplica a los vehículos cuando su ruta no incluye 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 su ubicación final, incluso si no realiza 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 su ubicación final, y no se programa ningún |
route_duration_limit |
Es el límite aplicado a la duración total de la ruta del vehículo. En un |
travel_duration_limit |
Es el límite aplicado a la duración del viaje de la ruta del vehículo. En un |
route_distance_limit |
Es el límite aplicado a la distancia total de la ruta del vehículo. En un |
extra_visit_duration_for_visit_type |
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 tipo en el mapa. |
break_rule |
Describe el programa de descanso que se aplicará en este vehículo. Si está vacío, no se programarán descansos para este vehículo. |
label |
Especifica una etiqueta para este vehículo. Esta etiqueta se informa en la respuesta como el |
ignore |
Si es verdadero, Si un vehículo ignorado en Si un envío se realiza con un vehículo ignorado en |
travel_duration_multiple |
Especifica un factor multiplicativo que se puede usar para aumentar o disminuir los tiempos de viaje de este vehículo. Por ejemplo, si se establece en 2.0, significa que este vehículo es más lento y tiene tiempos de viaje que son el doble de los de los vehículos estándar. Este múltiplo no afecta las duraciones de las visitas. Afecta el costo si se especifican ADVERTENCIA: Los tiempos de viaje se redondearán al segundo más cercano después de aplicar este múltiplo, pero antes de realizar cualquier operación numérica. Por lo tanto, un múltiplo pequeño puede generar 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 a un máximo de max_duration. |
soft_max_duration |
Es un límite flexible que no aplica un límite de duración máximo, pero, cuando se incumple, la ruta incurre en 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, la ruta incurre 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_per_hour_after_soft_max |
Es el costo por hora que se genera 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 cuadrada en el que se incurre si se incumple 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 alguna vez supera |
start_load_interval |
Es el intervalo de carga aceptable del vehículo al inicio 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 |
Costo de transportar una unidad de carga durante un kilómetro para este vehículo. Esto se puede usar como 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 |
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
Intervalo de importes 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
Costo de mover una unidad de carga durante un Transition. Para una carga determinada, el costo es la suma de dos partes:
- min(carga,
load_threshold) *cost_per_unit_below_threshold - máx.(0, carga -
load_threshold) *cost_per_unit_above_threshold
Con este costo, las soluciones prefieren satisfacer primero las demandas altas o, de manera equivalente, satisfacer 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 start,pickup,pickup,delivery,delivery,end 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: 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 incurrido por este LoadCost es (cost_below * load_below * kilometers + 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 en la ruta es de 120.0.
Sin embargo, si la ruta es start,pickup,delivery,pickup,delivery,end con transiciones, sucede lo siguiente:
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 que genera 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 en la ruta es 40.0.
LoadCost hace que las soluciones con transiciones cargadas 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 |
Costo de mover una unidad de carga, para cada unidad entre 0 y el umbral. Debe ser un valor finito y mayor o igual que 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 igual a 0, se trata de un costo fijo por unidad. Debe ser un valor finito y mayor o igual que 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 |
Modo de viaje sin especificar, equivalente a DRIVING. |
DRIVING |
Modo de viaje correspondiente a las instrucciones sobre cómo llegar en automóvil (coche, …). |
WALKING |
Modo de viaje correspondiente a las indicaciones para llegar a pie. |
UnloadingPolicy
Política sobre cómo se puede descargar un vehículo. Solo se aplica a los envíos que tienen tanto un retiro como una entrega.
Los demás envíos pueden ocurrir en cualquier lugar de la ruta, independientemente de unloading_policy.
| Enums | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarga no especificada; las entregas solo deben ocurrir después de sus correspondientes retiros. |
LAST_IN_FIRST_OUT |
Las entregas deben realizarse en el orden inverso al de las recolecciones |
FIRST_IN_FIRST_OUT |
Las entregas deben realizarse en el mismo orden que las recolecciones |
VehicleFullness
VehicleFullness es una métrica que calcula qué tan lleno está un vehículo. Cada campo VehicleFullness se encuentra entre 0 y 1, y se calcula como la proporción entre un campo de métrica con límite (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 plenitud permanece sin establecer. Si el límite es 0, el campo se establece en 1. Nota: Cuando una ruta está sujeta a problemas de factibilidad de tráfico, algunos índices de ocupación sin procesar pueden superar el 1.0, p.ej., el vehículo puede exceder su límite de distancia. En estos casos, limitamos los valores de plenitud a 1.0.
| Campos | |
|---|---|
max_fullness |
Es el valor 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 |
Es 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 ruta. Los puntos de referencia marcan las ubicaciones de llegada y salida de los VisitRequests, y las ubicaciones de inicio y finalización de los vehículos.
| Campos | |
|---|---|
side_of_road |
Opcional. Indica que la ubicación de este punto de referencia está destinada a que el vehículo se detenga en un lado específico de la ruta. Cuando configuras este valor, la ruta pasará por la ubicación para que el vehículo pueda detenerse al costado de la ruta hacia el que se inclina la ubicación desde el centro de la ruta. Esta opción no funciona para el modo de viaje "A PIE". |
vehicle_stopover |
Indica que el punto de referencia está destinado a que los vehículos se detengan, con la intención de recoger o dejar pasajeros. Esta opción solo funciona para el modo de viaje "DRIVING" y cuando "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. Las direcciones (location_type) solo pueden ser una de las siguientes opciones: |
|
location |
Es un punto especificado con coordenadas geográficas, que incluye un rumbo opcional. |
place_id |
Es el ID de lugar del PDI asociado con el punto de ruta. Cuando uses un ID de lugar para especificar la ubicación de llegada o salida de un VisitRequest, usa un ID de lugar que sea lo suficientemente específico como para determinar una ubicación de 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. |