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 :
globalStartTimeetglobalEndTimesont des propriétés deShipmentModeltimeWindowssont des propriétés de :pickupsdansShipment.deliveriesdansShipment.
startTimeWindowsetendTimeWindowssont des propriétés deVehicle.
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 qui illustrent la structure des périodes.
- Un exemple de scénario qui montre 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.
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:00ZendTime: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:00ZendTime:2023-01-13T19:00:00Z |
Le schéma suivant illustre les périodes qui affectent cet itinéraire.
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
timeWindowsau début et à la fin de la journée, respectivement. - Les
startTimeWindowsdu véhicule indiquent à l'opérateur du véhicule une période pendant laquelle il doit commencer à travailler, et lesendTimeWindowsfournissent une autre période pendant laquelle il doit terminer sa journée. - L'heure de début de la première
startTimeWindowet l'heure de fin de la dernièreendTimeWindowdé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 :
- Elles ne peuvent pas être appliquées à
globalStartTimeetglobalEndTime, car elles 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 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 }