InjectedSolutionConstraint

Solución insertada en la solicitud, incluida la información sobre qué visitas deben y cómo deben restringirse.

Representación JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Campos
routes[]

object (ShipmentRoute)

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 injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Se omitieron los envíos de la solución para inyectar. Algunos se pueden omitir de la solución original. Observa el campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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 (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Campos
relaxations[]

object (Relaxation)

Todas las flexibilizaciones de las restricciones de visitas que se aplicarán a las visitas en rutas con vehículos en vehicleIndices.

vehicleIndices[]

integer

Especifica los índices de vehículos a los que se aplica la restricción de visita relaxations. Si está vacío, se considera el valor predeterminado, y relaxations se aplica a todos los vehículos que no se especifican en otros constraintRelaxations. Puede haber como máximo un campo predeterminado, es decir, un campo de relajación de restricciones como máximo puede estar vacío vehicleIndices. Un índice de vehículos solo se puede mostrar una vez, incluso dentro de varios constraintRelaxations.

Un índice de vehículos se asigna de la misma manera que ShipmentRoute.vehicle_index, si interpretInjectedSolutionsUsingLabels es verdadero (consulta el comentario fields).

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 Y
  • j + 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 Y
  • relaxations(i).threshold_visit_count == 0 y el extremo del vehículo está relajado en relaxations(i).level si cumple con los siguientes requisitos:
  • vehicleEndTime >= relaxations(i).threshold_time Y
  • route.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 (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Campos
level

enum (Level)

El nivel de relajación de la restricción que se aplica cuando se cumplen las condiciones en thresholdTime o posteriores, Y al menos thresholdVisitCount.

thresholdTime

string (Timestamp format)

Hora en la que se puede aplicar la relajación level o después.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: "2014-10-02T15:01:23Z" y "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Es la cantidad de visitas en las que se puede aplicar la relajación level o después. Si thresholdVisitCount es 0 (o no se establece), level se puede aplicar directamente cuando se enciende el vehículo.

Si es route.visits_size() + 1, el level solo se puede aplicar al extremo del vehículo. Si es superior a route.visits_size() + 1, level no se aplica en absoluto a esa ruta.

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 level.

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.