Solución insertada en la solicitud, incluida la información sobre qué visitas y cómo deben hacerlo.
Representación JSON |
---|
{ "routes": [ { object ( |
Campos | |
---|---|
routes[] |
Rutas de la solución que se inyectará. Algunas rutas pueden omitirse en la solución original. Las rutas y los envíos omitidos deben cumplir con las suposiciones de validez básicas indicadas para |
skippedShipments[] |
Envíos omitidos de la solución que se inyecta. Algunos pueden omitirse de la solución original. Consulta el campo |
constraintRelaxations[] |
Especifica cuándo y cuánto debe flexibilizar las restricciones para cero o más grupos de vehículos. Si este campo está vacío, todas las rutas no vacías para vehículos tienen todas las limitaciones. |
ConstraintRelaxation
Para un grupo de vehículos, especifica en qué umbrales se relajarán las restricciones de las visitas y en qué nivel. Los envíos que aparecen en el campo skipped_shipment
solo se pueden omitir; es decir, no se pueden realizar.
Representación JSON |
---|
{
"relaxations": [
{
object ( |
Campos | |
---|---|
relaxations[] |
Todas las flexiones de las restricciones de visita 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 El índice de un vehículo 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 totalmente limitadas, y no se podrán insertar ni agregar visitas nuevas a esas rutas. Además, las horas de inicio y finalización de un vehículo en routes
tienen limitaciones totales, a menos que el vehículo esté vacío (es decir, no tiene visitas y se configuró usedIfRouteIsEmpty
como falso en el modelo).
relaxations(i).level
especifica el nivel de relajación de restricciones aplicado a una visita #j que cumple con lo siguiente:
route.visits(j).start_time >= relaxations(i).threshold_time
Yj + 1 >= relaxations(i).threshold_visit_count
De manera similar, el inicio del vehículo se relaja hasta relaxations(i).level
si cumple con lo siguiente:
vehicleStartTime >= relaxations(i).threshold_time
Yrelaxations(i).threshold_visit_count == 0
y la finalización del vehículo estará relajado hastarelaxations(i).level
si cumple con lo siguiente: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 con el thresholdTime
, agrega dos relaxations
con el mismo level
: uno solo con thresholdVisitCount
establecido y el otro solo con thresholdTime
. 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 y hasta su finalización, 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 visitas a la ruta que no cumplen con las condiciones de umbral de cualquier relaxations
están completamente limitados, y no se pueden insertar visitas en estas secuencias. Además, si el arranque o la finalización de un vehículo no cumplen con las condiciones de relajación, el tiempo será fijo, a menos que el vehículo esté vacío.
Representación JSON |
---|
{
"level": enum ( |
Campos | |
---|---|
level |
El nivel de relajación de restricciones que se aplica cuando se cumplen las condiciones en |
thresholdTime |
Tiempo a partir del cual se puede aplicar la relajación Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
thresholdVisitCount |
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 se producen cuando esta satisface las condiciones de umbral.
La siguiente enumeración ordena el aumento de la relajación.
Enumeradores | |
---|---|
LEVEL_UNSPECIFIED |
Nivel de relajación predeterminado implícito: no hay restricciones de relajación, es decir, todas las visitas están totalmente limitadas. Este valor no se debe usar explícitamente en |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Las horas de inicio y finalización del vehículo y las de inicio y finalización del vehículo serán relajadas, pero cada visita permanece vinculada al mismo vehículo y se debe respetar la secuencia de visitas: no se puede insertar ninguna visita entre ellos ni antes. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AFTER_THRESHOLD , pero la secuencia de visitas también es relajada: las visitas permanecen vinculadas simplemente al vehículo. |
RELAX_ALL_AFTER_THRESHOLD |
Es igual que RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , pero el vehículo también está tranquilo: las visitas son completamente gratuitas a la hora límite o después de ella, y es posible que no se realicen. |