Rentang 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.
Rentang waktu dapat mendukung tujuan seperti:
- Memprioritaskan penyelesaian pengambilan dan pengiriman dalam jangka waktu yang ditentukan.
- Rencanakan rute agar beroperasi dalam jam buka secara keseluruhan.
- Pastikan kendaraan memulai dan mengakhiri rute dalam jangka waktu yang ditentukan.
Struktur
Seperti yang ditunjukkan dalam diagram, rentang waktu disusun sebagai berikut:
globalStartTimedanglobalEndTimeadalah properti dariShipmentModeltimeWindowsadalah properti dari:pickupsdi dalamShipment.deliveriesdi dalamShipment.
startTimeWindowsdanendTimeWindowsadalah properti dariVehicle.
Checklist Essentials
Daftar periksa berikut menjelaskan pengetahuan penting yang mencegah potensi kesalahan terkait jangka 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 pengoperasian 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 mencakup 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.
Jendela 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 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 menjemput dan mengantar dari dua rumah yang berbeda, dan pemiliknya memiliki periode waktu penjemputan dan pengantaran yang sama. Pengoptimal harus memperhatikan jam operasional tempat penitipan anak, jangka waktu pengambilan 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. Pengambilan atau pengiriman tidak 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 waktu yang dapat diterima untuk menjemput dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan untuk 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 interval yang dapat diterima untuk kendaraan memulai (07.00 hingga 07.15) dan mengakhiri (17.00 hingga 17.15) perjalanan. |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
Diagram berikut menggambarkan rentang waktu yang memengaruhi rute ini.
Dalam skenario ini, seperti yang diilustrasikan oleh diagram, rentang waktu berfungsi sebagai berikut:
- Jendela waktu global mewakili jam buka tempat penitipan, dan semua jendela waktu lainnya harus berada dalam jendela waktu ini.
- Penjemputan dan pengiriman memiliki
timeWindowsmasing-masing di awal dan akhir hari. startTimeWindowskendaraan memberikan jangka waktu kepada operator kendaraan 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" } ] } ] } }
Jendela 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,
dengan memprioritaskan pengoptimalan secara keseluruhan daripada kepatuhan yang ketat terhadap jangka waktu jika
bermanfaat.
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 ringan untuk jangka 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, Anda akan dikenai biaya. |
costPerHourBeforeSoftStartTime |
angka | Biaya per jam yang dikeluarkan 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 ringan dari jenis pesan
TimeWindow:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }