Zeitfenster geben den Zeitpunkt für Ereignisse auf einer Route an. Diese Ereignisse können den Beginn und das Ende der Route eines Fahrers, geplante Abhol- und Lieferzeiten oder die Dauer einer gesamten Route umfassen.
Zeitfenster können Zielvorhaben wie die folgenden unterstützen:
- Priorisieren Sie die Abholung und Lieferung innerhalb der angegebenen Zeiträume.
- Planen Sie Routen so, dass sie innerhalb der allgemeinen Öffnungszeiten liegen.
- Achten Sie darauf, dass Fahrzeuge Routen innerhalb der angegebenen Zeiträume beginnen und beenden.
Struktur
Wie im Diagramm dargestellt, sind Zeitfenster so strukturiert:
globalStartTimeundglobalEndTimesind Properties vonShipmentModel.timeWindowssind Attribute von:pickupsinShipment.deliveriesinShipment.
startTimeWindowsundendTimeWindowssind Attribute vonVehicle.
Essentials-Checkliste
Die folgende Checkliste enthält wichtige Informationen, mit denen Sie potenzielle Fehler im Zusammenhang mit Zeitfenstern vermeiden können. Anhand dieser Liste können Sie Ihre Anfrage validieren und Fehler in der Antwort beheben.
Attribute
In der folgenden Tabelle werden die Attribute des globalen Zeitfensters beschrieben.
| Attribut | Format | Beschreibung |
|---|---|---|
globalStartTime |
Timestamp |
Der früheste Zeitpunkt für ein Ereignis. |
globalEndTime |
Timestamp |
Der späteste Zeitpunkt für ein Ereignis. |
In der folgenden Tabelle werden die Zeitfensterattribute für Sendungen und Fahrzeuge beschrieben.
| Elternteil | Attribut | Format | Beschreibung |
|---|---|---|---|
Shipment.pickups |
timeWindows |
Array von TimeWindow-Nachrichtentypen. |
Gibt Zeitintervalle für die Abholung einer Sendung an. |
Shipment.deliveries |
timeWindows |
Gibt Zeitintervalle für die Lieferung einer Sendung an. | |
Vehicle |
startTimeWindows |
Gibt die Startzeit für den Betriebsplan eines Fahrzeugs an. | |
endTimeWindows |
Gibt die Endzeit für den Betriebsplan eines Fahrzeugs an. |
In der folgenden Tabelle werden die Attribute des Nachrichtentyps TimeWindow beschrieben.
| Attribut | Format | Beschreibung |
|---|---|---|
startTime |
String (RFC3339 UTC „Zulu“-Format) | Der Beginn eines Zeitfensters. |
endTime |
String (RFC3339 UTC „Zulu“-Format) | Das Ende eines Zeitfensters. |
Beispiele
In diesem Abschnitt werden drei Arten von Beispielen behandelt:
- Codebeispiele, die die Struktur von Zeitfenstern veranschaulichen.
- Ein Beispielszenario, das eine Möglichkeit zeigt, Zeitfenster zu verwenden, um ein Geschäftsziel zu erreichen.
- Ein Anfragebeispiel, das die im Beispielszenario festgelegten Werte enthält.
Codebeispiele
In den folgenden Abschnitten finden Sie Codebeispiele für verschiedene Arten von Zeitfenstern.
Globale Zeitfenster
Das folgende Codebeispiel zeigt die Struktur der globalen Zeitfenster:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Zeitfenster für Abholungen und Lieferungen
Das folgende Codebeispiel zeigt die Struktur der Zeitfenster für die Abholungen und Lieferungen einer Sendung:
{ "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": [ ... ] } }
Zeitfenster für Fahrzeuge
Das folgende Codebeispiel zeigt die Struktur der Zeitfenster eines Fahrzeugs:
{ "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" } ] } ] } }
Beispielszenario
In diesem Abschnitt wird das Szenario einer Hundetagesstätte verwendet. In diesem Beispiel werden Routen für das Abholen und Zurückbringen von Hunden aus zwei verschiedenen Haushalten optimiert. Die Besitzer haben dieselben Zeitfenster für das Abholen und Zurückbringen. Der Optimierer sollte die Öffnungszeiten der Kindertagesstätte, die spezifischen Abhol- und Bringzeiten für Kunden und die Arbeitszeiten des Fahrers berücksichtigen.
In diesem Beispiel sind die Attributwerte in der Anfrage folgende:
| Elternteil | Attribut | Wert | Szenario |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Stellt die Öffnungszeit Ihrer Hundetagesstätte dar. Vor diesem Zeitpunkt sind keine Abholungen oder Lieferungen möglich. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Gibt die Schließzeit Ihrer Hundetagesstätte an. Alle Abholungen und Lieferungen müssen bis zu diesem Zeitpunkt abgeschlossen sein. |
Shipment.pickups |
timeWindows |
startTime:2023-01-13T07:30:00Z |
Definiert das akzeptable Zeitfenster für das Abholen eines Hundes von der Adresse eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass sie zwischen 7:30 Uhr und 9:00 Uhr für die Abholung bereit sein sollen. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Definiert das akzeptable Zeitfenster für das Absetzen eines Hundes beim Kunden zu Hause. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass ihre Hunde zwischen 17:00 Uhr und 18:30 Uhr abgegeben werden. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
Definiert das zulässige Zeitfenster für den Start (7:00 Uhr bis 7:15 Uhr) und das Ende (17:00 Uhr bis 17:15 Uhr) des Fahrzeugs. |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
Das folgende Diagramm veranschaulicht die Zeitfenster, die sich auf diese Route auswirken.
In diesem Szenario funktionieren die Zeitfenster wie im Diagramm dargestellt:
- Das globale Zeitfenster stellt die Öffnungszeiten der Hundetagesstätte dar. Alle anderen Zeitfenster müssen innerhalb dieses Zeitfensters liegen.
- Abholungen und Lieferungen haben jeweils eigene
timeWindowsam Anfang und Ende des Tages. - Die
startTimeWindowsdes Fahrzeugs geben dem Fahrer einen Zeitraum vor, in dem er mit der Arbeit beginnen muss, und dieendTimeWindowsgeben einen weiteren Zeitraum vor, in dem er seine Arbeit beenden muss. - Die Startzeit des ersten
startTimeWindowund die Endzeit des letztenendTimeWindowdefinieren die Betriebszeiten des Fahrzeugs, die in diesem Fall mit dem globalen Zeitfenster übereinstimmen.
Beispielanfrage
Das folgende Beispiel zeigt die Struktur einer optimizeTours-Anfrage mit den Zeitfensterwerten aus dem Beispielszenario.
{ "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" } ] } ] } }
Weiche Zeitfenster
Zeitfenster können als weiche Einschränkungen verwendet werden, indem softStartTime und softEndTime in einem TimeWindow-Nachrichtentyp definiert werden. So kann der Optimierer zu bestimmten Kosten vom angegebenen Zeitfenster abweichen und die Gesamtoptimierung gegenüber der strikten Einhaltung der Zeiträume priorisieren, wenn dies vorteilhaft ist.
Für weiche Zeitfenster gelten die folgenden Nutzungseinschränkungen:
- Sie können nicht auf
globalStartTimeundglobalEndTimeangewendet werden, da sie nicht den NachrichtentypTimeWindowverwenden. - Sie sind nur anwendbar, wenn es nur einen
TimeWindowin einer Liste gibt.
Attribute
In der folgenden Tabelle werden die Attribute für weiche Einschränkungen für Zeitfenster beschrieben.
| Property-Name | Format | Property-Beschreibung |
|---|---|---|
softStartTime |
Zeitstempel | Gibt den Beginn des weichen Zeitfensters an. Wenn ein Ereignis vor diesem Zeitpunkt auftritt, fallen Kosten an. |
softEndTime |
Zeitstempel | Gibt das Ende des weichen Zeitfensters an. Wenn ein Ereignis nach diesem Zeitpunkt auftritt, fallen Kosten an. |
costPerHourBeforeSoftStartTime |
Zahl | Die Kosten pro Stunde, die anfallen, wenn ein Ereignis vor dem softStartTime beginnt. Diese Property ist erforderlich, wenn softStartTime verwendet wird. Weitere Informationen zur Implementierung von Kosten finden Sie im Schlüsselkonzept Kostenmodell. |
costPerHourAfterSoftEndTime |
Zahl | Die Kosten pro Stunde, die anfallen, wenn ein Ereignis nach dem softEndTime endet. Diese Property ist erforderlich, wenn softEndTime verwendet wird. Weitere Informationen zur Implementierung von Kosten finden Sie im Schlüsselkonzept Kostenmodell. |
Codebeispiel
Das folgende Beispiel zeigt die Struktur der Attribute für weiche Einschränkungen eines TimeWindow-Nachrichtentyps:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }