Périodes

Les périodes sont présentes dans "ShipmentModel", dans "Shipment" dans les objets de collecte et de livraison, et dans "Vehicle".

Les périodes spécifient la planification des événements sur un itinéraire. Ces événements peuvent inclure le début et la fin de l'itinéraire d'un chauffeur, les heures de retrait et de livraison planifiées, ou la durée d'un itinéraire complet.

Les périodes peuvent prendre en charge des objectifs tels que :

  • Prioriser les retraits et les livraisons dans des délais spécifiés.
  • Planifier des itinéraires pour qu'ils s'inscrivent dans les horaires d'ouverture globaux.
  • S'assurer que les véhicules commencent et terminent leurs itinéraires dans des délais spécifiés.

Structure

Comme le montre le diagramme, les périodes sont structurées comme suit :

Checklist des éléments essentiels

La checklist suivante décrit les connaissances essentielles qui permettent d'éviter les erreurs potentielles liées aux périodes. Cette liste peut vous aider à valider votre requête et à résoudre les problèmes liés à votre réponse.

Propriétés

Le tableau suivant décrit les propriétés de la période globale.

Propriété Format Description
globalStartTime Timestamp Heure la plus tôt pour un événement.
globalEndTime Timestamp Heure la plus tardive pour un événement.

Le tableau suivant décrit les propriétés de la période dans les livraisons et les véhicules.

Parent Propriété Format Description
Shipment.pickups timeWindows Tableau de TimeWindow types de messages. Spécifie les intervalles de temps pour le retrait d'une livraison.
Shipment.deliveries timeWindows Spécifie les intervalles de temps pour la livraison d'une livraison.
Vehicle startTimeWindows Spécifie l'heure de début de la programmation de fonctionnement d'un véhicule.
endTimeWindows Spécifie l'heure de fin de la programmation de fonctionnement d'un véhicule.

Le tableau suivant décrit les propriétés d'un TimeWindow message type.

Propriété Format Description
startTime Chaîne (format RFC3339 UTC "Zulu") Début d'une période.
endTime Chaîne (format RFC3339 UTC "Zulu") Fin d'une période.

Exemples

Cette section couvre trois types d'exemples :

Exemples de code

Les sections suivantes présentent des exemples de code de différents types de périodes.

Périodes globales

L'exemple de code suivant montre la structure des périodes globales :

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

Périodes de retrait et de livraison

L'exemple de code suivant montre la structure des périodes de retrait et de livraison d'une livraison :

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [ ... ]
  }
}

Périodes de véhicule

L'exemple de code suivant montre la structure des périodes d'un véhicule :

{
  "model": {
    "shipments": [ ... ],
    "vehicles": [
      {
        "startTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ]
      }
    ]
  }
}

Exemple de scénario

Cette section utilise un scénario d'entreprise de garderie pour chiens. L'exemple optimise les itinéraires pour le retrait et le dépôt de chiens dans deux foyers différents, et les propriétaires ont les mêmes périodes de retrait et de dépôt. L'optimiseur doit respecter les horaires d'ouverture de la garderie, les périodes de retrait et de dépôt spécifiques pour les clients, ainsi que les heures de travail du chauffeur.

Dans cet exemple, les valeurs de propriété de la requête sont les suivantes :

Parent Propriété Valeur Scénario
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Représente l'heure d'ouverture de votre garderie pour chiens. Aucun retrait ni aucune livraison ne peut avoir lieu avant cette heure.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Représente l'heure de fermeture de votre garderie pour chiens. Tous les retraits et toutes les livraisons doivent être effectués avant cette heure.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Définit la période acceptable pour le retrait d'un chien au domicile d'un client. Dans cet exemple, vous avez demandé aux deux clients d'être disponibles pour le retrait entre 7h30 et 9h.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Définit la période acceptable pour le dépôt d'un chien au domicile d'un client. Dans cet exemple, vous avez indiqué aux deux clients que leurs chiens seraient déposés entre 17h et 18h30.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Définit la période acceptable pour le début (7h à 7h15) et la fin (17h à 17h15) de l'itinéraire du véhicule.
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Le schéma suivant illustre les périodes qui affectent cet itinéraire.

Plusieurs chronologies représentent la période globale, les périodes de retrait et de livraison, les périodes de début et de fin du véhicule, ainsi que les heures de travail du véhicule.

Dans ce scénario, comme illustré dans le diagramme, les périodes fonctionnent comme suit :

  • La période globale représente les heures d'ouverture de la garderie pour chiens, et toutes les autres périodes doivent s'inscrire dans cette période.
  • Les retraits et les livraisons ont leurs propres timeWindows au début et à la fin de la journée, respectivement.
  • Les startTimeWindows du véhicule indiquent à l'opérateur du véhicule une période pendant laquelle il doit commencer à travailler, et les endTimeWindows fournissent une autre période pendant laquelle il doit terminer sa journée.
  • L'heure de début de la première startTimeWindow et l'heure de fin de la dernière endTimeWindow définissent les horaires d'ouverture du véhicule, qui, dans ce cas, sont les mêmes que la période globale.

Exemple de requête

L'exemple suivant montre la structure d'une optimizeTours requête intégrant les valeurs de période de l'exemple de scénario.

{
  "model": {
    "globalStartTime": "2023-01-13T07:00:00Z",
    "globalEndTime": "2023-01-13T19:00:00Z",
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2023-01-13T07:00:00Z",
            "endTime": "2023-01-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2023-01-13T18:45:00Z",
            "endTime": "2023-01-13T19:00:00Z"
          }
        ]
      }
    ]
  }
}

Périodes flexibles

Les périodes peuvent être utilisées comme des contraintes flexibles en définissant softStartTime et softEndTime dans un type de message TimeWindow. Cela permet à l'optimiseur de s'écarter de la période spécifiée à un coût spécifié, en privilégiant l'optimisation globale par rapport au strict respect des délais lorsque cela est avantageux.

Les périodes flexibles sont soumises aux limites d'utilisation suivantes :

Propriétés

Le tableau suivant décrit les propriétés de contrainte flexible pour les périodes.

Nom de propriété Format Description de la propriété
softStartTime Code temporel Spécifie le début de la période flexible. Si un événement se produit avant cette heure, des frais sont facturés.
softEndTime Code temporel Spécifie la fin de la période flexible. Si un événement se produit après cette heure, des frais sont facturés.
costPerHourBeforeSoftStartTime nombre Coût par heure facturé lorsqu'un événement commence avant le softStartTime. Cette propriété est obligatoire lorsque vous utilisez softStartTime. Pour en savoir plus sur l'implémentation des coûts, consultez le concept clé du modèle de coûts.
costPerHourAfterSoftEndTime nombre Coût par heure facturé lorsqu'un événement se termine après le softEndTime. Cette propriété est obligatoire lorsque vous utilisez softEndTime. Pour en savoir plus sur l'implémentation des coûts, consultez le concept clé du modèle de coûts.

Exemple de code

L'exemple suivant montre la structure des propriétés de contrainte flexible d'un TimeWindow type de message :

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }