Jendela waktu menentukan waktu untuk peristiwa di rute. Peristiwa ini dapat mencakup awal dan akhir rute pengemudi, waktu pengambilan dan pengiriman terjadwal, atau durasi seluruh rute.
Jendela waktu dapat mendukung tujuan seperti:
- Memprioritaskan penyelesaian pengambilan dan pengiriman dalam jangka waktu yang ditentukan.
- Merencanakan rute untuk beroperasi dalam jam kerja keseluruhan.
- Memastikan kendaraan memulai dan mengakhiri rute dalam jangka waktu yang ditentukan.
Struktur
Seperti yang ditunjukkan dalam diagram, jendela waktu disusun sebagai berikut:
globalStartTimedanglobalEndTimeadalah propertiShipmentModeltimeWindowsadalah properti:pickupsdi dalamShipment.deliveriesdi dalamShipment.
startTimeWindowsdanendTimeWindowsadalah propertiVehicle.
Checklist penting
Checklist berikut menjelaskan pengetahuan penting yang mencegah potensi kesalahan terkait jendela waktu. Daftar ini dapat membantu Anda memvalidasi permintaan dan memecahkan masalah respons.
Properti
Tabel berikut menjelaskan properti jendela waktu global.
| Properti | Format | Deskripsi |
|---|---|---|
globalStartTime |
Timestamp |
Waktu paling awal untuk peristiwa apa pun. |
globalEndTime |
Timestamp |
Waktu paling akhir untuk peristiwa apa pun. |
Tabel berikut menjelaskan properti jendela waktu dalam pengiriman dan kendaraan.
| Parent | Properti | Format | Deskripsi |
|---|---|---|---|
Shipment.pickups |
timeWindows |
Array jenis pesan TimeWindow. |
Menentukan interval waktu untuk pengambilan pengiriman. |
Shipment.deliveries |
timeWindows |
Menentukan interval waktu untuk pengiriman pengiriman. | |
Vehicle |
startTimeWindows |
Menentukan waktu mulai untuk jadwal operasi kendaraan. | |
endTimeWindows |
Menentukan waktu berakhir untuk jadwal operasi kendaraan. |
Tabel berikut menjelaskan properti jenis pesan TimeWindow.
| Properti | Format | Deskripsi |
|---|---|---|
startTime |
String (format RFC3339 UTC "Zulu") | Awal jendela waktu. |
endTime |
String (format RFC3339 UTC "Zulu") | Akhir jendela waktu. |
Contoh
Bagian ini membahas tiga jenis contoh:
- Contoh kode yang mengilustrasikan struktur jendela waktu.
- Contoh skenario yang menunjukkan salah satu cara menggunakan jendela waktu untuk mencapai tujuan bisnis.
- Contoh permintaan yang menyertakan nilai yang ditetapkan dalam contoh skenario.
Contoh kode
Bagian berikut menunjukkan contoh kode dari berbagai jenis jendela waktu.
Jendela waktu global
Contoh kode berikut menunjukkan struktur jendela waktu global:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Jendela waktu pengambilan dan pengiriman
Contoh kode berikut menunjukkan struktur jendela waktu dalam pengambilan dan pengiriman pengiriman:
{ "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": [ ... ] } }
Jendela waktu kendaraan
Contoh kode berikut menunjukkan struktur jendela waktu kendaraan:
{ "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" } ] } ] } }
Contoh skenario
Bagian ini menggunakan skenario bisnis penitipan. Contoh ini mengoptimalkan rute untuk mengambil dan mengantar dari dua rumah yang berbeda, dan pemiliknya memiliki jendela waktu pengambilan dan pengantaran yang sama. Pengoptimal harus menghormati jam operasional tempat penitipan anak, jendela waktu penjemputan dan pengantaran khusus untuk pelanggan, dan jam kerja pengemudi.
Untuk contoh ini, nilai properti dalam permintaan adalah sebagai berikut:
| Parent | Properti | Nilai | Skenario |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Mewakili waktu buka penitipan Anda. Tidak ada pengambilan atau pengiriman yang dapat terjadi sebelum waktu ini. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Mewakili waktu tutup penitipan Anda. Semua pengambilan dan pengiriman harus diselesaikan pada waktu ini. |
Shipment.pickups |
timeWindows |
startTime:2023-01-13T07:30:00Z |
Menentukan jendela yang dapat diterima untuk mengambil dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan untuk bersedia diambil antara pukul 07.30 dan 09.00. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Menentukan jendela yang dapat diterima untuk mengantar ke rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan bahwa mereka akan diantar antara pukul 17.00 dan 18.30. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
Menentukan jendela yang dapat diterima untuk kendaraan memulai (07.00 hingga 07.15) dan mengakhiri (17.00 hingga 17.15). |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
Diagram berikut mengilustrasikan jendela waktu yang memengaruhi rute ini.
Dalam skenario ini, seperti yang diilustrasikan oleh diagram, jendela waktu berfungsi sebagai berikut:
- Jendela waktu global mewakili jam kerja bisnis penitipan, dan semua jendela waktu lainnya harus berada di dalam jendela waktu ini.
- Pengambilan dan pengiriman memiliki
timeWindowssendiri pada awal dan akhir hari. startTimeWindowskendaraan memberi operator kendaraan jangka waktu untuk memulai pekerjaan, danendTimeWindowsmemberikan jangka waktu lain untuk menyelesaikan hari kerja.- Waktu mulai
startTimeWindowpertama dan waktu berakhir terakhirendTimeWindowmenentukan jam kerja kendaraan, yang dalam hal ini, sama dengan jendela waktu global.
Contoh permintaan
Contoh berikut menunjukkan struktur permintaan optimizeTours yang menggabungkan nilai jendela waktu contoh skenario.
{ "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" } ] } ] } }
Jendela waktu fleksibel
Jendela waktu dapat digunakan sebagai batasan fleksibel dengan menentukan softStartTime
dan softEndTime dalam jenis pesan TimeWindow. Hal ini memungkinkan pengoptimal menyimpang dari jendela waktu yang ditentukan dengan biaya tertentu, memprioritaskan pengoptimalan keseluruhan daripada kepatuhan ketat terhadap jangka waktu jika menguntungkan.
Jendela waktu fleksibel memiliki batasan penggunaan berikut:
- Jendela waktu fleksibel tidak dapat diterapkan ke
globalStartTimedanglobalEndTimekarena tidak menggunakan jenis pesanTimeWindow. - Jendela waktu fleksibel hanya berlaku jika ada satu
TimeWindowdalam daftar.
Properti
Tabel berikut menjelaskan properti batasan fleksibel untuk jendela waktu.
| Nama properti | Format | Deskripsi properti |
|---|---|---|
softStartTime |
Stempel waktu | Menentukan awal jendela waktu fleksibel. Jika peristiwa terjadi sebelum waktu ini, biaya akan dikenakan. |
softEndTime |
Stempel waktu | Menentukan akhir jendela waktu fleksibel. Jika peristiwa terjadi setelah waktu ini, biaya akan dikenakan. |
costPerHourBeforeSoftStartTime |
angka | Biaya per jam yang dikenakan saat peristiwa dimulai sebelum softStartTime. Properti ini diperlukan saat menggunakan softStartTime. Lihat Konsep utama model biaya untuk mempelajari lebih lanjut cara menerapkan biaya. |
costPerHourAfterSoftEndTime |
angka | Biaya per jam yang dikenakan saat peristiwa berakhir setelah softEndTime. Properti ini diperlukan saat menggunakan softEndTime. Lihat Konsep utama model biaya untuk mempelajari lebih lanjut cara menerapkan biaya. |
Contoh kode
Contoh berikut menunjukkan struktur properti batasan fleksibel dari jenis pesan
TimeWindow:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }