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_timeYj + 1 >= relaxations(i).threshold_visit_count
De manera similar, el inicio del vehículo se relaja a relaxations(i).level si cumple con los siguientes requisitos:
vehicleStartTime >= relaxations(i).threshold_timeYrelaxations(i).threshold_visit_count == 0y el extremo del vehículo se relaja arelaxations(i).levelsi se cumple con lo siguiente:vehicleEndTime >= relaxations(i).threshold_timeYroute.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 Usa RFC 3339, en el que el resultado generado siempre se normalizará en Z y usará 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan compensaciones distintas de "Z". 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á observar 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. |