InjectedSolutionConstraint

Solution injectée dans la requête, y compris des informations sur les visites qui doivent être limitées 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. Certaines routes peuvent être omises 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)

Envois de la solution à injecter ignorés. Certaines peuvent être omises 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 de véhicules non vides sont entièrement contraints.

ConstraintRelaxation

Pour un groupe de véhicules, indique à quel seuil les contraintes liées aux visites seront assouplies et à quel niveau. Les livraisons indiquées dans le champ skipped_shipment ne peuvent pas ê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 des contraintes de visite qui s'appliqueront aux visites sur les itinéraires avec des véhicules dans le pays suivant : vehicleIndices.

vehicleIndices[]

integer

Spécifie les index de véhicule auxquels la contrainte de visite relaxations s'applique. Si ce champ est vide, il s'agit de 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'un seul champ d'assouplissement des contraintes 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 entre plusieurs constraintRelaxations.

Un indice 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 le champ relaxations est vide, cela signifie que l'heure de début et la séquence de toutes les visites du routes sont limitées. Aucune nouvelle visite ne peut donc être insérée ni ajoutée à ces itinéraires. De plus, les heures de début et de fin d'un véhicule en routes sont entièrement limitées, sauf si le véhicule est vide (c'est-à-dire qu'il n'a pas de visites et que la valeur usedIfRouteIsEmpty est définie sur "false" dans le modèle).

relaxations(i).level spécifie le niveau d'assouplissement de la contrainte appliqué à une visite #j qui répond aux critères suivants:

  • 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é sur relaxations(i).level s'il répond aux conditions suivantes:

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

Pour appliquer un niveau d'assouplissement si une visite respecte le thresholdVisitCount OU l'thresholdTime, ajoutez deux relaxations avec le même level: l'un avec uniquement 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. Par conséquent, entre le début du véhicule et les visites de l'itinéraire jusqu'à la fin 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 durée et la séquence des visites d'itinéraires qui ne satisfont pas aux conditions de seuil d'un relaxations sont totalement limitées, 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 remplit pas les conditions d'un assouplissement, la durée 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 postérieures à thresholdTime ET au moins à thresholdVisitCount sont remplies.

thresholdTime

string (Timestamp format)

Moment auquel ou après lequel l'assouplissement level peut être appliqué.

Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : "2014-10-02T15:01:23Z" et "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Nombre de visites avant ou après lequel 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 la valeur est route.visits_size() + 1, l'level ne peut être appliqué qu'au côté du véhicule. Si la valeur est supérieure à route.visits_size() + 1, la valeur level n'est pas du tout appliquée à cet itinéraire.

Niveau

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

L'énumération ci-dessous permet d'effectuer un assouplissement croissant.

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 limitées.

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

RELAX_VISIT_TIMES_AFTER_THRESHOLD Les heures de début et de fin des visites sont 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 ni avant.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Identique à RELAX_VISIT_TIMES_AFTER_THRESHOLD, mais la séquence des visites est également assouplie: 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 à l'heure seuil ou après, et peuvent potentiellement ne pas être réalisées.