Périodes

Les créneaux horaires sont présents dans `ShipmentModel`, dans `Shipment` dans les objets d'enlèvements et de livraisons, et dans `Vehicle`.

Les créneaux horaires 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 chauffeur, les heures de collecte et de livraison prévues, ou la durée d'un itinéraire complet.

Les périodes peuvent vous aider à atteindre des objectifs tels que :

  • Priorisez les collectes et les livraisons dans les délais spécifiés.
  • Planifiez des itinéraires pour travailler pendant les heures d'ouverture globales.
  • Assurez-vous que les véhicules commencent et terminent leurs itinéraires dans les délais spécifiés.

Structure

Comme le montre le schéma, les créneaux horaires sont structurés comme suit :

  • globalStartTime et globalEndTime sont des propriétés de ShipmentModel.
  • timeWindows sont des propriétés de :
    • pickups dans Shipment.
    • deliveries dans Shipment.
  • startTimeWindows et endTimeWindows sont des propriétés de Vehicle.

Checklist Essentials

Propriétés

Le tableau suivant décrit les propriétés de la fenêtre temporelle globale.

Propriété Format Description
globalStartTime Timestamp Heure la plus matinale 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 plage horaire dans les expéditions et les véhicules.

Parent Propriété Format Description
Shipment.pickups timeWindows Tableau des types de messages TimeWindow. Spécifie les intervalles de temps pour l'enlèvement d'un colis.
Shipment.deliveries timeWindows Spécifie les intervalles de temps pour la livraison d'un envoi.
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 plage horaire 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 créneau horaire.
endTime Chaîne (format RFC3339 UTC "Zulu") Fin d'une période.

Exemples

Cette section aborde trois types d'exemples :

Exemples de code

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

Périodes globales

L'exemple de code suivant montre la structure des plages horaires mondiales :

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

Créneaux de retrait et de livraison

L'exemple de code suivant montre la structure des créneaux horaires pour les collectes 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": [ ... ]
  }
}

Périodes 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 dans deux maisons différentes, et les propriétaires ont les mêmes créneaux horaires pour la récupération et le dépôt. L'outil d'optimisation doit respecter les horaires d'ouverture de la crèche, les plages horaires spécifiques pour la dépose et la récupération des enfants, 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 peuvent avoir lieu avant cette heure.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Représente l'heure de fermeture de votre garderie pour chiens. Toutes les collectes et livraisons doivent être effectuées d'ici là.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Définit la plage horaire acceptable pour récupérer un chien au domicile d'un client. Dans cet exemple, vous avez demandé aux deux clients d'être disponibles pour la collecte entre 7h30 et 9h.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Définit l'intervalle 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 plage horaire acceptable pour le début (de 7h à 7h15) et la fin (de 17h à 17h15) de la recharge du véhicule.
endTimeWindows startTime :
2023-01-13T18:45:00Z
endTime :
2023-01-13T19:00:00Z

Le schéma suivant illustre les créneaux horaires qui affectent cet itinéraire.

Plusieurs chronologies représentent la plage horaire globale, les plages horaires de collecte et de livraison, les plages horaires de début et de fin du véhicule, ainsi que les heures de travail du véhicule.

Dans ce scénario, comme l'illustre le diagramme, les périodes fonctionnent comme suit :

  • La plage horaire globale représente les heures d'ouverture de la garderie pour chiens. Toutes les autres plages horaires doivent être comprises dans cette plage horaire.
  • Les collectes et les livraisons ont leur propre timeWindows au début et à la fin de la journée, respectivement.
  • Les startTimeWindows du véhicule indiquent à l'opérateur une période pendant laquelle il doit commencer à travailler, et les endTimeWindows indiquent une autre période pendant laquelle 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 heures d'ouverture du véhicule, qui, dans ce cas, sont les mêmes que la plage horaire globale.

Exemple de requête

L'exemple suivant montre la structure d'une requête optimizeTours intégrant les valeurs des plages horaires 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 plages horaires 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 plage horaire spécifiée à un coût donné, en privilégiant l'optimisation globale plutôt que le respect strict des délais lorsque cela est avantageux.

Les plages horaires flexibles sont soumises aux limites d'utilisation suivantes :

  • Elles ne peuvent pas être appliquées à globalStartTime et globalEndTime, car elles n'utilisent pas le type de message TimeWindow.
  • Ils ne s'appliquent que lorsqu'il n'y a qu'un seul TimeWindow dans une liste.

Propriétés

Le tableau suivant décrit les propriétés de contrainte souple pour les créneaux horaires.

Nom de propriété Format Description de la propriété
softStartTime Horodatage 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 Horodatage 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 Total Coût par heure encouru lorsqu'un événement commence avant softStartTime. Cette propriété est obligatoire lorsque vous utilisez softStartTime. Consultez le concept clé Modèle de coût pour savoir comment implémenter les coûts.
costPerHourAfterSoftEndTime Total Coût par heure encouru lorsqu'un événement se termine après softEndTime. Cette propriété est obligatoire lorsque vous utilisez softEndTime. Consultez le concept clé Modèle de coût pour savoir comment implémenter les 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
    }