Périodes

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

Les périodes spécifient le moment où les événements se produisent sur un itinéraire. Ces événements peuvent inclure le début et la fin de l'itinéraire d'un conducteur, les heures de prise en charge et de livraison prévues, ou la durée d'un itinéraire complet.

Les fenêtres temporelles peuvent répondre à des objectifs tels que :

  • Donnez la priorité aux retraits et aux livraisons dans les délais spécifiés.
  • Planifiez des itinéraires pour respecter les horaires d'ouverture globaux.
  • Assurez-vous que les véhicules commencent et terminent leurs itinéraires dans les délais spécifiés.

Structure

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

Checklist Essentials

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 de début de l'événement le plus ancien.
globalEndTime Timestamp Heure la plus tardive pour un événement.

Le tableau suivant décrit les propriétés des créneaux horaires dans les envois et les véhicules.

Parent Propriété Format Description
Shipment.pickups timeWindows Tableau de types de messages TimeWindow. Spécifie les intervalles de temps pour l'enlèvement d'un envoi.
Shipment.deliveries timeWindows Spécifie les intervalles de temps pour la livraison d'un envoi.
Vehicle startTimeWindows Spécifie l'heure de début des horaires d'un véhicule.
endTimeWindows Spécifie l'heure de fin des horaires de fonctionnement d'un véhicule.

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

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

Exemples

Cette section présente trois types d'exemples :

Exemples de code

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

Fenêtres temporelles 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": [ ... ]
  }
}

Créneaux horaires de retrait et de livraison

L'exemple de code suivant montre la structure des créneaux horaires dans les enlèvements et les livraisons d'un envoi :

{
  "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": [ ... ]
  }
}

Plages horaires des véhicules

L'exemple de code suivant montre la structure des créneaux horaires 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 récupérer et déposer des chiens de deux foyers différents, et les propriétaires ont les mêmes créneaux horaires de prise en charge et de dépôt. L'optimiseur doit respecter les horaires d'ouverture de la garderie, les créneaux de dépôt et de récupération spécifiques des clients, ainsi que les horaires de travail du conducteur.

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 peuvent 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 livraisons doivent être effectués avant cette heure.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Définit la période acceptable pour récupérer un chien au domicile d'un client. Dans cet exemple, vous avez indiqué aux deux clients d'être disponibles pour la prise en charge 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 déposer 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épart du véhicule (de 7h00 à 7h15) et son arrivée (de 17h00 à 17h15).
endTimeWindows startTime :
2023-01-13T18:45:00Z
endTime :
2023-01-13T19:00:00Z

Le diagramme suivant illustre les fenêtres temporelles affectant cette route.

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, et les heures de travail du véhicule.

Dans ce scénario, comme l'illustre le diagramme, les intervalles de temps fonctionnent comme suit :

  • La période globale représente les horaires d'ouverture de la garderie pour chiens, et toutes les autres périodes doivent s'inscrire dans cette période.
  • Les collectes 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 un délai dans lequel il doit commencer à travailler, et les endTimeWindows fournissent un autre délai dans lequel il doit terminer sa journée.
  • L'heure de début du premier startTimeWindow et l'heure de fin du dernier endTimeWindow définissent les horaires d'ouverture du véhicule, qui, dans ce cas, sont identiques à la période globale.

Exemple de requête

L'exemple suivant montre la structure d'une requête optimizeTours intégrant les valeurs des périodes 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"
          }
        ]
      }
    ]
  }
}

Fenêtres de temps flexibles

Les périodes peuvent être utilisées comme contraintes souples 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 respect strict des délais lorsque cela est avantageux.

Les fenêtres de temps flexibles sont soumises aux limites d'utilisation suivantes :

Propriétés

Le tableau suivant décrit les propriétés des contraintes souples pour les créneaux horaires.

Nom de propriété Format Description de la propriété
softStartTime Code temporel Spécifie le début de la période de tolérance. 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 de tolérance. Si un événement se produit après ce délai, des frais sont facturés.
costPerHourBeforeSoftStartTime nombre Coût horaire encouru lorsqu'un événement commence avant le softStartTime. Cette propriété est obligatoire lorsque vous utilisez softStartTime. Consultez le concept clé Modèle de coût pour en savoir plus sur l'implémentation des coûts.
costPerHourAfterSoftEndTime nombre Coût par heure encouru lorsqu'un événement se termine après le softEndTime. Cette propriété est obligatoire lorsque vous utilisez softEndTime. Consultez le concept clé Modèle de coût pour en savoir plus sur l'implémentation des coûts.

Exemple de code

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

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