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
etglobalEndTime
sont des propriétés deShipmentModel
.timeWindows
sont des propriétés de :pickups
dansShipment
.deliveries
dansShipment
.
startTimeWindows
etendTimeWindows
sont des propriétés deVehicle
.
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 illustrant la structure des périodes.
- Exemple de scénario montrant comment utiliser les périodes pour atteindre un objectif commercial.
- Exemple de requête qui inclut les valeurs définies dans le scénario exemple.
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.
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 lesendTimeWindows
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 dernierendTimeWindow
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
etglobalEndTime
, car elles n'utilisent pas le type de messageTimeWindow
. - 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 }