InjectedSolutionConstraint

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

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

Envíos omitidos de la solución que se inyecta. Algunos pueden omitirse de la solución original. Consulta el campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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

object (Relaxation)

Todas las flexiones de las restricciones de visita 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 como la opción predeterminada, y relaxations se aplica a todos los vehículos que no se especificaron en otro constraintRelaxations. Puede haber un máximo de un valor predeterminado, es decir, un campo de relajación de restricciones como máximo vehicleIndices vacío. Un índice de vehículo solo se puede mostrar una vez, incluso en varias constraintRelaxations.

El índice de un vehículo 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 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 Y
  • j + 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 Y
  • relaxations(i).threshold_visit_count == 0 y la finalización del vehículo estará relajado hasta relaxations(i).level si cumple con lo siguiente:
  • 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 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 (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Campos
level

enum (Level)

El nivel de relajación de restricciones que se aplica cuando se cumplen las condiciones en thresholdTime y al menos thresholdVisitCount.

thresholdTime

string (Timestamp format)

Tiempo a partir del cual se puede aplicar la relajación level.

Una marca de tiempo en formato RFC3339 UTC “Zulú”, con 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

Cantidad de visitas en las que se puede aplicar la relajación level o después de ellas. Si thresholdVisitCount se establece en 0 (o no se establece), el level se puede aplicar directamente al inicio del vehículo.

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

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

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.