Periode waktu menentukan waktu untuk peristiwa di rute. Peristiwa ini dapat mencakup awal dan akhir rute pengemudi, waktu pengambilan dan pengiriman yang dijadwalkan, atau durasi seluruh rute.
Periode waktu dapat mendukung tujuan seperti:
- Memprioritaskan penyelesaian pengambilan dan pengiriman dalam jangka waktu yang ditentukan.
- Rencanakan rute untuk beroperasi dalam jam kerja secara keseluruhan.
- Pastikan kendaraan memulai dan mengakhiri rute dalam jangka waktu yang ditentukan.
Struktur
Seperti yang ditunjukkan dalam diagram, periode waktu disusun sebagai berikut:
globalStartTimedanglobalEndTimeadalah propertiShipmentModeltimeWindowsadalah properti dari:pickupsdi dalamShipment.deliveriesdi dalamShipment.
startTimeWindowsdanendTimeWindowsadalah propertiVehicle.
Checklist Essentials
Checklist berikut menjelaskan pengetahuan penting yang mencegah potensi kesalahan terkait periode waktu. Daftar ini dapat membantu Anda memvalidasi permintaan dan memecahkan masalah respons.
Properti
Tabel berikut menjelaskan properti periode waktu global.
| Properti | Format | Deskripsi |
|---|---|---|
globalStartTime |
Timestamp |
Waktu paling awal untuk peristiwa apa pun. |
globalEndTime |
Timestamp |
Waktu terbaru untuk peristiwa apa pun. |
Tabel berikut menjelaskan properti periode waktu dalam pengiriman dan kendaraan.
| Orang tua | Properti | Format | Deskripsi |
|---|---|---|---|
Shipment.pickups |
timeWindows |
Array jenis pesan TimeWindow. |
Menentukan interval waktu untuk pengambilan pengiriman. |
Shipment.deliveries |
timeWindows |
Menentukan interval waktu untuk pengiriman paket. | |
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 periode waktu. |
endTime |
String (format RFC3339 UTC "Zulu") | Akhir periode waktu. |
Contoh
Bagian ini membahas tiga jenis contoh:
- Contoh kode yang mengilustrasikan struktur periode waktu.
- Contoh skenario yang menunjukkan salah satu cara menggunakan periode waktu untuk mencapai tujuan bisnis.
- Contoh permintaan yang menyertakan nilai yang ditetapkan dalam skenario contoh.
Contoh kode
Bagian berikut menunjukkan contoh kode dari berbagai jenis periode waktu.
Periode waktu global
Contoh kode berikut menunjukkan struktur periode 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 periode waktu dalam pengambilan dan 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 periode 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 menjemput dan mengantar dari dua rumah yang berbeda, dan pemiliknya memiliki periode waktu penjemputan dan pengantaran yang sama. Pengoptimal harus mematuhi jam operasional tempat penitipan anak, periode penjemputan dan pengantaran khusus untuk pelanggan, serta jam kerja pengemudi.
Untuk contoh ini, nilai properti dalam permintaan adalah sebagai berikut:
| Orang tua | Properti | Nilai | Skenario |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Menunjukkan waktu buka penitipan Anda. Tidak ada pengambilan atau pengiriman yang dapat dilakukan sebelum waktu ini. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Menunjukkan waktu tutup tempat penitipan Anda. Semua pengambilan dan pengiriman harus diselesaikan pada waktu ini. |
Shipment.pickups |
timeWindows |
startTime:2023-01-13T07:30:00Z |
Menentukan periode yang dapat diterima untuk menjemput dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan agar siap dijemput 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 mengantarkan 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 periode 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 periode waktu yang memengaruhi rute ini.
Dalam skenario ini, seperti yang diilustrasikan oleh diagram, periode waktu berfungsi sebagai berikut:
- Jendela waktu global mewakili jam buka bisnis penitipan, dan semua jendela waktu lainnya harus berada dalam jendela waktu ini.
- Penjemputan dan pengiriman memiliki
timeWindowsmasing-masing di awal dan akhir hari. startTimeWindowskendaraan memberi operator kendaraan jangka waktu untuk memulai pekerjaan, danendTimeWindowsmemberikan jangka waktu lain untuk menyelesaikan pekerjaan mereka.- Waktu mulai
startTimeWindowpertama dan waktu berakhirendTimeWindowterakhir menentukan jam operasional kendaraan, yang dalam hal ini, sama dengan periode waktu global.
Contoh permintaan
Contoh berikut menunjukkan struktur permintaan optimizeTours yang menggabungkan nilai periode waktu skenario contoh.
{ "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" } ] } ] } }
Periode waktu fleksibel
Periode waktu dapat digunakan sebagai batasan fleksibel dengan menentukan softStartTime
dan softEndTime dalam jenis pesan TimeWindow. Hal ini memungkinkan pengoptimal menyimpang dari periode waktu yang ditentukan dengan biaya yang ditentukan, sehingga memprioritaskan pengoptimalan secara keseluruhan daripada kepatuhan yang ketat terhadap jangka waktu jika menguntungkan.
Periode waktu fleksibel memiliki batasan penggunaan berikut:
- Aturan ini tidak dapat diterapkan ke
globalStartTimedanglobalEndTimekarena tidak menggunakan jenis pesanTimeWindow. - Atribut ini hanya berlaku jika ada satu
TimeWindowdalam daftar.
Properti
Tabel berikut menjelaskan properti batasan fleksibel untuk periode waktu.
| Nama properti | Format | Deskripsi properti |
|---|---|---|
softStartTime |
Stempel waktu | Menentukan awal periode waktu fleksibel. Jika peristiwa terjadi sebelum waktu ini, biaya akan dikenakan. |
softEndTime |
Stempel waktu | Menentukan akhir periode waktu fleksibel. Jika peristiwa terjadi setelah waktu ini, biaya akan dikenakan. |
costPerHourBeforeSoftStartTime |
angka | Biaya per jam yang dikenakan saat acara dimulai sebelum softStartTime. Properti ini wajib ada saat menggunakan softStartTime. Lihat konsep utama Model biaya untuk mempelajari lebih lanjut cara menerapkan biaya. |
costPerHourAfterSoftEndTime |
angka | Biaya per jam yang dikenakan saat acara berakhir setelah softEndTime. Properti ini wajib ada 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 }