InjectedSolutionConstraint

Solution injectée dans la demande, y compris des informations sur les visites et la façon 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 Certains itinéraires peuvent être omis de la solution d'origine. Les itinéraires et les livraisons ignorées doivent respecter les hypothèses de validité de base énumérées pour injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Envois ignorés de la solution à injecter. Certains peuvent être omis de la solution d'origine. Consultez le champ routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Pour zéro ou plusieurs groupes de véhicules, indique quand et dans quelle mesure assouplir les contraintes. Si ce champ est vide, tous les itinéraires empruntés par des véhicules sont soumis à des contraintes complètes.

ConstraintRelaxation

Pour un groupe de véhicules, indique à quel niveau les contraintes sur les visites seront assouplies et à quel niveau. Les expéditions indiquées dans le champ skipped_shipment doivent ê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)

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

vehicleIndices[]

integer

Spécifie les indices de véhicules auxquels la contrainte de visite relaxations s'applique. Si ce champ est vide, il est considéré comme défini par défaut, et le relaxations s'applique à 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'un seul champ d'assouplissement des contraintes est autorisé (vehicleIndices). Un indice de véhicule ne peut être listé qu'une seule fois, même dans plusieurs constraintRelaxations.

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

Relaxation

Si le champ relaxations est vide, l'heure de début et l'ordre des visites du routes sont totalement contraignants, et aucune nouvelle visite ne peut être insérée ni ajoutée à ces itinéraires. De plus, les heures de début et d'arrivée d'un véhicule dans routes sont totalement limitées, sauf si le véhicule est vide (c'est-à-dire qu'il n'a pas de visite et que le paramètre usedIfRouteIsEmpty est défini sur "false" dans le modèle).

relaxations(i).level spécifie le niveau d'assouplissement de la contrainte appliqué à une visite #j qui satisfait aux conditions suivantes:

  • 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 détendu sur relaxations(i).level si les conditions suivantes sont respectées:

  • vehicleStartTime >= relaxations(i).threshold_time ET
  • relaxations(i).threshold_visit_count == 0 et l'extrémité du véhicule est flexible sur relaxations(i).level si les conditions suivantes sont respectées:
  • vehicleEndTime >= relaxations(i).threshold_time ET
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Pour appliquer un niveau d'assouplissement si une visite répond aux thresholdVisitCount OU les thresholdTime, ajoutez deux relaxations avec le même level: l'un avec seulement thresholdVisitCount défini et l'autre avec seulement thresholdTime défini. Si une visite remplit les conditions de plusieurs relaxations, le niveau le plus souple s'applique. Ainsi, entre le départ du véhicule et l'arrêt du véhicule, le niveau de relaxation devient plus détendu: le niveau de relaxation ne diminue pas, à mesure que l'itinéraire progresse.

La chronologie et la séquence des visites d'itinéraire qui ne remplissent pas les conditions de seuil des relaxations sont totalement soumises à des contraintes, et aucune visite ne peut être insérée dans ces séquences. De plus, si le départ ou la fin d'un véhicule ne remplit pas les conditions d'un assouplissement, 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 d'assouplissement de la contrainte qui s'applique lorsque les conditions égales ou supérieures à thresholdTime ET au moins thresholdVisitCount sont remplies.

thresholdTime

string (Timestamp format)

Heure à laquelle l'assouplissement level peut être appliqué, ou après cette date.

Code temporel au format RFC3339 UTC "Zulu", avec une résolution à la nanoseconde et jusqu'à neuf chiffres après la virgule. Exemples: "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Nombre de visites après lesquelles l'assouplissement level peut être appliqué. Si thresholdVisitCount est défini sur 0 (ou n'est pas défini), le level peut être appliqué directement au démarrage du véhicule.

Si elle est définie sur route.visits_size() + 1, la valeur level ne peut être appliquée qu'à l'extrémité du véhicule. Si elle est supérieure à route.visits_size() + 1, la valeur level n'est pas du tout appliquée à cette route.

Niveau

Exprime les différents niveaux d'assouplissement des contraintes, qui sont appliqués pour une visite et ceux qui suivent lorsque les conditions de seuil sont remplies.

L'énumération ci-dessous permet d'augmenter la relaxation.

Enums
LEVEL_UNSPECIFIED

Niveau d'assouplissement implicite par défaut: aucune contrainte n'est assouplie, c'est-à-dire que toutes les visites sont entièrement soumises à des 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 du véhicule seront assouplies, mais chaque visite reste liée au même véhicule et la séquence des visites doit être respectée: aucune visite ne peut être insérée entre elles ou avant.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Identique à RELAX_VISIT_TIMES_AFTER_THRESHOLD, mais la séquence des visites est également souple: les visites restent simplement liées au véhicule.
RELAX_ALL_AFTER_THRESHOLD Identique à RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mais le véhicule est également assoupli: les visites sont entièrement sans frais à un certain moment après le seuil défini, et elles peuvent ne pas être effectuées.