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 Ziele wie die folgenden unterstützen:
- Abholungen und Lieferungen innerhalb des angegebenen Zeitrahmens durchführen.
- Routen planen, um innerhalb der allgemeinen Geschäftszeiten zu arbeiten.
- Fahrzeuge müssen Routen innerhalb bestimmter Zeiträume beginnen und beenden.
Struktur
Wie im Diagramm dargestellt, sind Zeiträume so strukturiert:
globalStartTimeundglobalEndTimesind Properties vonShipmentModel.timeWindowssind Attribute von:pickupsinnerhalb vonShipment.deliveriesinnerhalb vonShipment.
startTimeWindowsundendTimeWindowssind Attribute vonVehicle.
Checkliste für Essentials
Die folgende Checkliste beschreibt das erforderliche Wissen, um potenzielle Fehler im Zusammenhang mit Zeiträumen zu vermeiden. Anhand dieser Liste können Sie Ihre Anfrage überprüfen und Fehler in Ihrer Antwort beheben.
Attribute
In der folgenden Tabelle werden die globalen Zeitfenstereigenschaften beschrieben.
| Attribut | Format | Beschreibung |
|---|---|---|
globalStartTime |
Timestamp |
Die früheste Zeit für ein beliebiges Ereignis. |
globalEndTime |
Timestamp |
Die späteste Uhrzeit für ein beliebiges Ereignis. |
In der folgenden Tabelle werden die Attribute des Zeitfensters für Sendungen und Fahrzeuge beschrieben.
| Hat Kinder | 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 |
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-Format „Zulu“) | Der Beginn eines Zeitfensters. |
endTime |
String (RFC3339 UTC-Format „Zulu“) | Das Ende eines Zeitfensters. |
Beispiele
In diesem Abschnitt werden drei Arten von Beispielen behandelt:
- Codebeispiele, die die Struktur von Zeiträumen veranschaulichen.
- Beispielszenario, in dem eine Möglichkeit zur Verwendung von Zeiträumen zur Erreichung eines Geschäftsziels gezeigt wird.
- Ein Beispiel für eine Anfrage mit den im Beispielszenario festgelegten Werten.
Codebeispiele
In den folgenden Abschnitten finden Sie Codebeispiele für verschiedene Arten von Zeiträumen.
Globale Zeitfenster
Das folgende Codebeispiel zeigt die Struktur der globalen Zeiträume:
{ "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 Zustellungen 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 mit einer Hundetagesstätte verwendet. In diesem Beispiel werden Routen für das Abholen und Absetzen von Hunden aus zwei verschiedenen Haushalten optimiert. Die Besitzer haben dieselben Zeitfenster für das Abholen und Absetzen. Der Optimierer sollte die Öffnungszeiten der Kindertagesstätte, die spezifischen Abhol- und Bringzeiträume für Kunden sowie die Arbeitszeiten des Fahrers berücksichtigen.
In diesem Beispiel sind die Attributwerte in der Anfrage folgende:
| Hat Kinder | Attribut | Wert | Szenario |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Gibt die Öffnungszeit Ihrer Hundetagesstätte an. Vor diesem Zeitpunkt sind keine Abholungen oder Lieferungen möglich. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Stellt die Schließzeit Ihrer Hundetagesstätte dar. 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 das Abholen eines Hundes vom Zuhause eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass die Abholung zwischen 7:30 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 das Absetzen eines Hundes am Zuhause eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass ihre Hunde zwischen 17:00 und 18:30 Uhr abgeholt 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 Zeiträume wie im Diagramm dargestellt:
- Das globale Zeitfenster entspricht den Geschäftszeiten der Hundetagesstätte. Alle anderen Zeitfenster müssen in dieses Zeitfenster fallen.
- Abholungen und Lieferungen haben jeweils einen eigenen
timeWindowsam Anfang und am Ende des Tages. - Die
startTimeWindowsdes Fahrzeugs geben dem Fahrer einen Zeitraum vor, in dem er mit der Arbeit beginnen muss, undendTimeWindowseinen weiteren Zeitraum, in dem er seinen Arbeitstag 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 des Beispielszenarios.
{ "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 gegen einen bestimmten Preis vom angegebenen Zeitfenster abweichen und die Gesamtoptimierung gegenüber der strikten Einhaltung der Zeiträume priorisieren, wenn dies von Vorteil ist.
Für weiche Zeitfenster gelten die folgenden Nutzungseinschränkungen:
- Sie können nicht auf
globalStartTimeundglobalEndTimeangewendet werden, da sie nicht den NachrichtentypTimeWindowverwenden. - Sie gelten nur, wenn in einer Liste ein einzelnes
TimeWindowvorhanden ist.
Attribute
In der folgenden Tabelle werden die Eigenschaften von weichen Zeitfensterbeschränkungen beschrieben.
| Property-Name | Format | Beschreibung des Attributs |
|---|---|---|
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 nach diesem Zeitpunkt ein Ereignis eintritt, fallen Kosten an. |
costPerHourBeforeSoftStartTime |
Zahl | Die Kosten pro Stunde, die anfallen, wenn ein Ereignis vor dem softStartTime beginnt. Diese Property ist erforderlich, wenn Sie softStartTime verwenden. Weitere Informationen zur Implementierung von Kosten finden Sie unter Kostenmodell. |
costPerHourAfterSoftEndTime |
Zahl | Die Kosten pro Stunde, die anfallen, wenn ein Ereignis nach dem softEndTime endet. Diese Property ist erforderlich, wenn Sie softEndTime verwenden. Weitere Informationen zur Implementierung von Kosten finden Sie unter Kostenmodell. |
Codebeispiel
Das folgende Beispiel zeigt die Struktur der Eigenschaften für weiche Einschränkungen des Nachrichtentyps TimeWindow:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }