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 :
globalStartTimeetglobalEndTimesont des propriétés deShipmentModel.timeWindowssont des propriétés de :pickupsdansShipment.deliveriesdansShipment.
startTimeWindowsetendTimeWindowssont des propriétés deVehicle.
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 illustrant la structure des périodes.
- Exemple de scénario illustrant une façon d'utiliser les périodes pour atteindre un objectif d'entreprise.
- Un exemple de requête qui inclut les valeurs définies dans l'exemple de scénario.
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:00ZendTime :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:00ZendTime :2023-01-13T19:00:00Z |
Le diagramme suivant illustre les fenêtres temporelles affectant cette route.
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
timeWindowsau début et à la fin de la journée, respectivement. - Les
startTimeWindowsdu véhicule indiquent à l'opérateur du véhicule un délai dans lequel il doit commencer à travailler, et lesendTimeWindowsfournissent un autre délai dans lequel il doit terminer sa journée. - L'heure de début du premier
startTimeWindowet l'heure de fin du dernierendTimeWindowdé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 :
- Ils ne peuvent pas être appliqués à
globalStartTimeetglobalEndTime, car ils n'utilisent pas le type de messageTimeWindow. - Elles ne s'appliquent que lorsqu'il n'y a qu'un seul
TimeWindowdans une liste.
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 }