Zeitfenster geben den Zeitpunkt für Ereignisse auf einer Route an. Zu diesen Ereignissen können der Beginn und das Ende der Route eines Fahrers, geplante Abhol- und Lieferzeiten oder die Dauer einer gesamten Route gehören.
Zeitfenster können Ziele wie die folgenden unterstützen:
- Abholungen und Lieferungen innerhalb bestimmter Zeiträume priorisieren.
- Routen planen , die innerhalb der allgemeinen Geschäftszeiten liegen.
- Sicherstellen, dass Fahrzeuge Routen innerhalb bestimmter Zeiträume beginnen und beenden.
Struktur
Wie im Diagramm dargestellt, sind Zeitfenster so strukturiert:
globalStartTimeundglobalEndTimesind Attribute vonShipmentModel.timeWindowssind Attribute von:pickupsinShipment.deliveriesinShipment.
startTimeWindowsundendTimeWindowssind Attribute vonVehicle.
Checkliste mit den wichtigsten Punkten
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 überprüfen und Fehler in Ihrer 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 Attribute des Zeitfensters in Sendungen und Fahrzeugen 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 eines TimeWindow Nachrichtentyps
beschrieben.
| Attribut | Format | Beschreibung |
|---|---|---|
startTime |
String (RFC3339 UTC „Zulu“) | Der Beginn eines Zeitfensters. |
endTime |
String (RFC3339 UTC „Zulu“) | Das Ende eines Zeitfensters. |
Beispiele
In diesem Abschnitt werden drei Arten von Beispielen behandelt:
- Codebeispiele , die die Struktur von Zeit fenstern veranschaulichen.
- Ein Beispielszenario , das zeigt, wie Zeit fenster verwendet werden können, um ein Geschäftsziel zu erreichen.
- Ein Beispiel für eine Anfrage , das die in dem 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 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 ein Szenario für eine Hundetagesstätte verwendet. Im Beispiel werden Routen für die Abholung und Rückgabe von Hunden aus zwei verschiedenen Haushalten optimiert. Die Besitzer haben die gleichen Zeitfenster für die Abholung und Rückgabe. Der Optimierer sollte die Öffnungszeiten der Hundetagesstätte, die spezifischen Zeitfenster für die Abholung und Rückgabe für Kunden sowie die Arbeitszeiten des Fahrers berücksichtigen.
In diesem Beispiel sind die Attributwerte in der Anfrage die folgenden:
| Elternteil | Attribut | Wert | Szenario |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Gibt die Öffnungszeit Ihrer Hundetagesstätte an. Vor diesem Zeitpunkt können keine Abholungen oder Lieferungen erfolgen. |
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 zulässige Zeitfenster für die Abholung eines Hundes aus dem Haus eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass die Abholung zwischen 7:30 Uhr und 9:00 Uhr erfolgen kann. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Definiert das zulässige Zeitfenster für die Rückgabe eines Hundes im Haus eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass ihre Hunde zwischen 17:00 Uhr und 18:30 Uhr zurückgebracht 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 Beginn (7:00 Uhr bis 7:15 Uhr) und das Ende (17:00 Uhr bis 17:15 Uhr) der Route 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 Fahrzeugführer einen Zeitraum , in dem er mit der Arbeit beginnen muss.endTimeWindowsgeben einen weiteren Zeitraum an, 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 Sie softStartTime
und softEndTime in einem Nachrichtentyp vom Typ TimeWindow definieren. So kann der Optimierer gegen eine bestimmte Gebühr vom angegebenen Zeitfenster abweichen. Dabei wird die Gesamtoptimierung gegenüber der strikten Einhaltung der Zeiträume priorisiert, wenn dies von Vorteil ist.
Für weiche Zeitfenster gelten die folgenden Nutzungslimits:
- Sie können nicht auf
globalStartTimeundglobalEndTimeangewendet werden, da diese nicht den NachrichtentypTimeWindowverwenden. - Sie sind nur anwendbar, wenn in einer Liste ein einzelnes
TimeWindowvorhanden ist.
Attribute
In der folgenden Tabelle werden die Attribute für weiche Einschränkungen für Zeitfenster beschrieben.
| Attributname | Format | Attributbeschreibung |
|---|---|---|
softStartTime |
Zeitstempel | Gibt den Beginn des weichen Zeitfensters an. Wenn ein Ereignis vor diesem Zeitpunkt eintritt, fallen Kosten an. |
softEndTime |
Zeitstempel | Gibt das Ende des weichen Zeitfensters an. Wenn ein Ereignis nach diesem Zeitpunkt eintritt, fallen Kosten an. |
costPerHourBeforeSoftStartTime |
Zahl | Die Kosten pro Stunde, die anfallen, wenn ein Ereignis vor dem softStartTime beginnt. Dieses Attribut 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. Dieses Attribut 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 vom Typ:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }