InjectedSolutionConstraint

Solution injectée dans la requête, y compris des informations sur les visites qui doivent être limitées et comment elles doivent l'être.

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

object (ShipmentRoute)

Itinéraires de la solution à injecter. Il est possible que certains itinéraires soient omis de la solution d'origine. Les itinéraires et les envois ignorés doivent respecter les hypothèses de validité de base indiqué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, spécifie quand et dans quelle mesure assouplir les contraintes. Si ce champ est vide, toutes les routes de véhicule non vides sont entièrement contraintes.

ConstraintRelaxation

Pour un groupe de véhicules, spécifie à partir de quel ou quels seuils les contraintes liées aux visites seront assouplies et à quel niveau. Les envois listés dans le champ skipped_shipment doivent être ignorés, c'est-à-dire qu'ils ne peuvent pas être effectués.

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

vehicleIndices[]

integer

Spécifie les indices de véhicule auxquels la contrainte de visite relaxations s'applique. Si ce champ est vide, il est considéré 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'un seul paramètre par défaut, c'est-à-dire qu'un seul champ de relaxation des contraintes est autorisé à être vide (vehicleIndices). Un indice de véhicule ne peut être listé qu'une seule fois, même dans 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 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, les heures de début et de fin d'un véhicule dans routes sont entièrement contraintes, 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 de la contrainte appliqué à une visite #j qui répond 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 limité à 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 elle répond aux conditions suivantes:
  • vehicleEndTime >= relaxations(i).threshold_time ET
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Pour appliquer un niveau de relaxation si une visite répond aux critères thresholdVisitCount OU thresholdTime, ajoutez deux relaxations avec le même level: l'un avec uniquement thresholdVisitCount défini et l'autre avec uniquement thresholdTime défini. Si une visite remplit les conditions de plusieurs relaxations, le niveau le plus souple s'applique. Par conséquent, du début du trajet du véhicule jusqu'à la fin, le niveau de relaxation augmente, c'est-à-dire qu'il ne diminue pas au fur et à mesure du trajet.

Le calendrier et la séquence des visites de l'itinéraire qui ne répondent pas aux conditions de seuil de n'importe quel 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 remplit pas les conditions 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 à partir de thresholdTime ET d'au moins thresholdVisitCount sont remplies.

thresholdTime

string (Timestamp format)

Heure à laquelle la relaxation level peut être appliquée ou après laquelle.

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 à partir duquel la relaxation level peut être appliquée. Si thresholdVisitCount est défini sur 0 (ou non défini), level peut être appliqué directement au démarrage du véhicule.

S'il s'agit de route.visits_size() + 1, level ne peut être appliqué qu'à l'extrémité 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

Indique les différents niveaux de relâchement des contraintes appliqués à une visite et aux suivantes lorsqu'elle répond aux conditions de seuil.

L'énumération ci-dessous est organisée par ordre d'apaisement croissant.

Enums
LEVEL_UNSPECIFIED

Niveau de relaxation par défaut implicite: aucune contrainte n'est levé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 et de fin des visites et des véhicules seront moins strictes, mais chaque visite reste associé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 elles.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Comme pour RELAX_VISIT_TIMES_AFTER_THRESHOLD, mais la séquence de visite 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 Comme RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mais le véhicule est également détendu: les visites sont totalement sans frais à partir de l'heure limite et peuvent potentiellement ne pas être effectuées.