Solución insertada en la solicitud, incluida la información sobre qué visitas deben y cómo deben restringirse.
Representación JSON |
---|
{ "routes": [ { object ( |
Campos | |
---|---|
routes[] |
Rutas de la solución para inyectar Algunas rutas pueden omitirse de la solución original. Las rutas y los envíos omitidos deben cumplir con las suposiciones de validez básicas que se indican para |
skippedShipments[] |
Se omitieron los envíos de la solución para inyectar. Algunos se pueden omitir de la solución original. Observa el campo |
constraintRelaxations[] |
Para cero o más grupos de vehículos, especifica cuándo y en qué medida flexibilizar las restricciones. Si este campo está vacío, todas las rutas no vacías para vehículos tendrán restricciones completas. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de las visitas y en qué nivel. Solo se pueden omitir los envíos que se indican en el campo skipped_shipment
. es decir, no se pueden ejecutar.
Representación JSON |
---|
{
"relaxations": [
{
object ( |
Campos | |
---|---|
relaxations[] |
Todas las flexibilizaciones 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ículos se asigna de la misma manera que |
Relajación
Si el campo relaxations
está vacío, la hora de inicio y la secuencia de todas las visitas del routes
estarán completamente restringidas y no se podrán insertar ni agregar visitas nuevas a esas rutas. Además, la hora de inicio y finalización de un vehículo en routes
tiene restricciones completas, a menos que el vehículo esté vacío (es decir, no tenga visitas y tenga el valor usedIfRouteIsEmpty
configurado como falso en el modelo).
relaxations(i).level
especifica el nivel de flexibilización de restricciones aplicado a una visita #j que cumple con los siguientes requisitos:
route.visits(j).start_time >= relaxations(i).threshold_time
Yj + 1 >= relaxations(i).threshold_visit_count
De manera similar, el arranque del vehículo se relaja en relaxations(i).level
si cumple con los siguientes requisitos:
vehicleStartTime >= relaxations(i).threshold_time
Yrelaxations(i).threshold_visit_count == 0
y el extremo del vehículo está relajado enrelaxations(i).level
si cumple con los siguientes requisitos:vehicleEndTime >= relaxations(i).threshold_time
Yroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Para aplicar un nivel de relajación si una visita cumple con el thresholdVisitCount
O el thresholdTime
, agrega dos relaxations
con el mismo level
: uno con solo el thresholdVisitCount
establecido y el otro con solo thresholdTime
configurado. Si una visita satisface las condiciones de varios relaxations
, se aplica el nivel más relajado. Como resultado, desde el inicio del vehículo hasta las visitas a la ruta hasta el final, 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 horario y la secuencia de las visitas de ruta que no cumplen con las condiciones límite de ninguna relaxations
están completamente limitadas y no se puede insertar ninguna visita en estas secuencias. Además, si el inicio o la finalización de un vehículo no cumplen con las condiciones de relajación, el tiempo es fijo, a menos que el vehículo esté vacío.
Representación JSON |
---|
{
"level": enum ( |
Campos | |
---|---|
level |
El nivel de relajación de la restricción que se aplica cuando se cumplen las condiciones en |
thresholdTime |
Hora en la 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 flexibilización de las restricciones, que se aplican a una visita y los siguientes, cuando cumple con las condiciones límite.
La siguiente enumeración está en orden de relajación creciente.
Enumeraciones | |
---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: Ninguna restricción es relajada, es decir, todas las visitas están completamente restringidas. Este valor no se debe usar explícitamente en |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Las horas de inicio de las visitas y las horas de inicio y finalización del vehículo serán tranquilas, pero cada visita se mantendrá vinculada al mismo vehículo y se debe respetar la secuencia de visita: no se puede insertar ninguna visita entre ellas ni antes. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD , pero la secuencia de visitas también es relajada: las visitas permanecen simplemente vinculadas al vehículo. |
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 límite o después de esta, y es posible que no se rindan. |