Es la solución insertada en la solicitud, que incluye 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á. 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 |
skippedShipments[] |
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 |
constraintRelaxations[] |
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.
| Representación JSON |
|---|
{
"relaxations": [
{
object ( |
| Campos | |
|---|---|
relaxations[] |
Son todas las relajaciones de restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en |
vehicleIndices[] |
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 usedIfRouteIsEmpty 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:
vehicleStartTime >= relaxations(i).threshold_timeYrelaxations(i).threshold_visit_count == 0y el extremo del vehículo se relaja arelaxations(i).levelsi satisface 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 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.
| Representación JSON |
|---|
{
"level": enum ( |
| Campos | |
|---|---|
level |
Es el nivel de relajación de la restricción que se aplica cuando se cumplen las condiciones en |
thresholdTime |
Fecha y hora en la que se puede aplicar la relajación Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: |
thresholdVisitCount |
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. |