InjectedSolutionConstraint

Solution injectée dans la requête, y compris des informations sur les visites qui doivent être contraintes et sur la manière dont elles doivent l'être.

Représentation JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Champs
routes[]

object (ShipmentRoute)

Routes de la solution à injecter. Il est possible que certains itinéraires soient omis de la solution d'origine. Les itinéraires et les livraisons ignorées doivent respecter les hypothèses de validité de base listées pour injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Livraisons ignorées de la solution à injecter. Il est possible que certains soient omis de la solution d'origine. Consultez le champ routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Pour zéro ou plusieurs groupes de véhicules, spécifie quand et dans quelle mesure assouplir les contraintes. Si ce champ est vide, toutes les routes de véhicules non vides sont entièrement contraintes.

ConstraintRelaxation

Pour un groupe de véhicules, spécifie à quel seuil les contraintes sur les visites seront assouplies et à quel niveau. Les livraisons listées dans le champ skipped_shipment sont contraintes d'être ignorées, c'est-à-dire qu'elles ne peuvent pas être effectuées.

Représentation JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Champs
relaxations[]

object (Relaxation)

Toutes les assouplissements de contraintes de visite qui s'appliqueront aux visites sur les itinéraires avec des véhicules dans vehicleIndices.

vehicleIndices[]

integer

Spécifie les indices de véhicules auxquels s'applique la contrainte de visite relaxations. Si cette valeur est vide, elle est considérée comme la valeur par défaut et les relaxations s'appliquent à tous les véhicules qui ne sont pas spécifiés dans d'autres constraintRelaxations. Il ne peut y avoir qu'une seule valeur par défaut, c'est-à-dire qu'au maximum un champ de relaxation de contrainte peut être vide vehicleIndices. Un index de véhicule ne peut être listé qu'une seule fois, même dans plusieurs constraintRelaxations.

Un index de véhicule est mappé de la même manière que ShipmentRoute.vehicle_index, si interpretInjectedSolutionsUsingLabels est défini sur "true" (voir le commentaire fields).

Relaxation

Si relaxations est vide, l'heure de début et la séquence de toutes les visites sur routes sont entièrement contraintes, et aucune nouvelle visite ne peut être insérée ni ajoutée à ces itinéraires. De plus, l'heure de début et de fin d'un véhicule dans routes est entièrement contrainte, sauf si le véhicule est vide (c'est-à-dire qu'il n'a pas de visites et que usedIfRouteIsEmpty est défini sur "false" dans le modèle).

relaxations(i).level spécifie le niveau de relâchement des contraintes appliqué à une visite #j qui satisfait à la condition suivante :

  • route.visits(j).start_time >= relaxations(i).threshold_time ET
  • j + 1 >= relaxations(i).threshold_visit_count

De même, le démarrage du véhicule est relâché à relaxations(i).level s'il satisfait à la condition suivante :

  • vehicleStartTime >= relaxations(i).threshold_time ET
  • relaxations(i).threshold_visit_count == 0 et la fin du véhicule est relâchée à relaxations(i).level si elle satisfait :
  • vehicleEndTime >= relaxations(i).threshold_time ET
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Pour appliquer un niveau de tolérance si une visite répond à thresholdVisitCount OU à thresholdTime, ajoutez deux relaxations avec le même level : l'un avec thresholdVisitCount uniquement et l'autre avec thresholdTime uniquement. Si une visite remplit les conditions de plusieurs relaxations, le niveau le moins restrictif s'applique. Par conséquent, du début du véhicule à la fin du véhicule en passant par les visites d'itinéraire dans l'ordre, le niveau de relaxation devient plus souple : c'est-à-dire que le niveau de relaxation ne diminue pas au fur et à mesure que l'itinéraire progresse.

Le calendrier et la séquence des visites d'itinéraire qui ne satisfont pas aux conditions de seuil d'un relaxations sont entièrement contraints et aucune visite ne peut être insérée dans ces séquences. De plus, si le début ou la fin d'un véhicule ne répond à aucune condition de relaxation, l'heure est fixe, sauf si le véhicule est vide.

Représentation JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Champs
level

enum (Level)

Niveau de relâchement des contraintes qui s'applique lorsque les conditions à thresholdTime ou après ET au moins thresholdVisitCount sont remplies.

thresholdTime

string (Timestamp format)

Heure à partir de laquelle l'assouplissement level peut être appliqué.

Utilise la norme RFC 3339, où la sortie générée utilise toujours le format UTC (indiqué par "Z" pour le temps universel coordonné) avec des secondes fractionnaires de 0, 3, 6 ou 9 chiffres décimaux. Des décalages horaires autres que "Z" (UTC) sont également acceptés. Exemples : "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" ou "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

Nombre de visites à partir duquel la relaxation level peut être appliquée. Si thresholdVisitCount est défini sur 0 (ou n'est pas défini), level peut être appliqué directement au démarrage du véhicule.

Si la valeur est route.visits_size() + 1, le level ne peut être appliqué qu'à la fin du véhicule. Si elle est supérieure à route.visits_size() + 1, level n'est pas appliquée du tout pour cet itinéraire.

Niveau

Exprime les différents niveaux de relaxation des contraintes, qui sont appliqués pour une visite et celles qui suivent lorsqu'elle satisfait aux conditions de seuil.

L'énumération ci-dessous est classée par ordre de relaxation croissante.

Enums
LEVEL_UNSPECIFIED

Niveau de relaxation par défaut implicite : aucune contrainte n'est relâchée, c'est-à-dire que toutes les visites sont entièrement contraintes.

Cette valeur ne doit pas être utilisée explicitement dans level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Les heures de début des visites et les heures de début/fin des véhicules seront plus flexibles, mais chaque visite restera associée au même véhicule et l'ordre des visites devra être respecté : aucune visite ne pourra être insérée entre elles ni avant elles.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Identique à RELAX_VISIT_TIMES_AFTER_THRESHOLD, mais la séquence de visites est également assouplie : les visites ne peuvent être effectuées que par ce véhicule, mais peuvent potentiellement ne pas être effectuées.
RELAX_ALL_AFTER_THRESHOLD Identique à RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mais le véhicule est également détendu : les visites sont entièrement sans frais à partir du seuil de temps et peuvent potentiellement ne pas être effectuées.