Solución insertada en la solicitud, incluida información sobre qué visitas se deben restringir y cómo se deben restringir
| Representación JSON | 
|---|
| { "routes": [ { object ( | 
| Campos | |
|---|---|
| routes[] | 
 Son las rutas de la solución que se insertarán. Es posible que se omitan algunas rutas de la solución original. Las rutas y los envíos omitidos deben satisfacer las suposiciones de validez básicas que se enumeran para  | 
| skippedShipments[] | 
 Se omitieron los envíos de la solución para insertar. Es posible que se omitan algunos de la solución original. Consulta el campo  | 
| constraintRelaxations[] | 
 Para cero o más grupos de vehículos, especifica cuándo y en qué medida se deben relajar las restricciones. Si este campo está vacío, todas las rutas de vehículos que no estén vacías estarán completamente restringidas. | 
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de visitas y hasta qué nivel. Los envíos que se indican en el campo skipped_shipment se omiten, es decir, no se pueden realizar.
| Representación JSON | 
|---|
| {
  "relaxations": [
    {
      object ( | 
| Campos | |
|---|---|
| relaxations[] | 
 Todas las relajaciones de las restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en  | 
| vehicleIndices[] | 
 Especifica los índices de vehículos a los que se aplica la restricción de visita  Un índice de vehículo se asigna de la misma manera que  | 
Relajación
Si relaxations está vacío, la hora de inicio y la secuencia de todas las visitas en routes están completamente restringidas y no se pueden insertar ni agregar visitas nuevas a esas rutas. Además, la hora de inicio y finalización de un vehículo en routes está completamente restringida, a menos que el vehículo esté vacío (es decir, no tenga visitas y tenga usedIfRouteIsEmpty establecido como falso en el modelo).
relaxations(i).level especifica el nivel de relajación de restricciones aplicado a una visita #j que satisface lo siguiente:
- route.visits(j).start_time >= relaxations(i).threshold_timeY
- j + 1 >= relaxations(i).threshold_visit_count
De manera similar, el inicio del vehículo se relaja a relaxations(i).level si cumple con lo siguiente:
- vehicleStartTime >= relaxations(i).threshold_timeY
- relaxations(i).threshold_visit_count == 0y el extremo del vehículo se relaja a- relaxations(i).levelsi se cumple con lo siguiente:
- vehicleEndTime >= relaxations(i).threshold_timeY
- route.visits_size() + 1 >= relaxations(i).threshold_visit_count
Para aplicar un nivel de relajación si una visita cumple con thresholdVisitCount O thresholdTime, agrega dos relaxations con el mismo level: uno con solo thresholdVisitCount establecido y el otro con solo thresholdTime establecido. Si una visita satisface las condiciones de varios relaxations, se aplica el nivel más flexible. Como resultado, desde el inicio del vehículo hasta las visitas a la ruta hasta el final del vehículo, el nivel de relajación se vuelve más relajado, es decir, el nivel de relajación no disminuye a medida que avanza la ruta.
El tiempo y la secuencia de las visitas a la ruta que no satisfacen las condiciones de umbral de ningún relaxations están completamente restringidos y no se pueden insertar visitas en estas secuencias. Además, si el inicio o el final de un vehículo no satisface las condiciones de ninguna relajación, la hora es fija, a menos que el vehículo esté vacío.
| Representación JSON | 
|---|
| {
  "level": enum ( | 
| Campos | |
|---|---|
| level | 
 Es el nivel de relajación de restricciones que se aplica cuando se cumplen las condiciones en  | 
| thresholdTime | 
 Es el momento en el que se puede aplicar la relajación  Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos:  | 
| thresholdVisitCount | 
 Es la cantidad de visitas en las que se puede aplicar la relajación  Si es  | 
Nivel
Expresa los diferentes niveles de relajación de restricciones, que se aplican para una visita y los que siguen cuando se satisfacen las condiciones del umbral.
La enumeración que aparece a continuación está en orden de relajación creciente.
| Enumeraciones | |
|---|---|
| LEVEL_UNSPECIFIED | Nivel de relajación predeterminado implícito: No se relajan las restricciones, es decir, todas las visitas están completamente restringidas. Este valor no se debe usar de forma explícita en  | 
| RELAX_VISIT_TIMES_AFTER_THRESHOLD | Se flexibilizarán las horas de inicio y finalización de las visitas y de los vehículos, pero cada visita seguirá vinculada al mismo vehículo y se deberá respetar la secuencia de visitas: no se puede insertar ninguna visita entre ellas ni antes de ellas. | 
| RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD | Igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD, pero la secuencia de visitas también es flexible: solo este vehículo puede realizar las visitas, pero es posible que no se realicen. | 
| RELAX_ALL_AFTER_THRESHOLD | Igual que RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, pero el vehículo también está relajado: las visitas son completamente gratuitas en el momento del umbral o después de este, y es posible que no se realicen. |