Jendela waktu menentukan waktu untuk acara 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:
- Prioritaskan 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, rentang waktu disusun sebagai berikut:
globalStartTime
danglobalEndTime
adalah propertiShipmentModel
timeWindows
adalah properti dari:pickups
di dalamShipment
.deliveries
di dalamShipment
.
startTimeWindows
danendTimeWindows
adalah propertiVehicle
.
Checklist Essentials
Properti
Tabel berikut menjelaskan properti jangka waktu global.
Properti | Format | Deskripsi |
---|---|---|
globalStartTime |
Timestamp |
Waktu paling awal untuk acara apa pun. |
globalEndTime |
Timestamp |
Waktu terbaru untuk acara apa pun. |
Tabel berikut menjelaskan properti jangka 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. | |
Vehicle |
startTimeWindows |
Menentukan waktu mulai untuk jadwal pengoperasian kendaraan. | |
endTimeWindows |
Menentukan waktu berakhir untuk jadwal pengoperasian 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 menggambarkan struktur rentang waktu.
- Contoh skenario yang menunjukkan salah satu cara menggunakan jangka waktu untuk mencapai tujuan bisnis.
- Contoh permintaan yang menyertakan nilai yang ditetapkan dalam skenario contoh.
Contoh kode
Bagian berikut menunjukkan contoh kode berbagai jenis rentang waktu.
Jendela waktu global
Contoh kode berikut menunjukkan struktur rentang waktu global:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Periode waktu pengambilan dan pengiriman
Contoh kode berikut menunjukkan struktur rentang waktu dalam pengambilan dan pengiriman kiriman:
{ "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 rentang waktu penjemputan dan pengantaran yang sama. Pengoptimal harus mematuhi jam buka 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 |
Mewakili waktu buka tempat penitipan Anda. Pengambilan atau pengiriman tidak dapat dilakukan sebelum waktu ini. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Mewakili 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 mengambil dari rumah pelanggan. Dalam contoh ini, Anda memberi tahu kedua pelanggan bahwa pesanan dapat diambil antara pukul 07.30 dan 09.00. |
endTime :2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime :2023-01-13T17:00:00Z |
Menentukan rentang waktu 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:00Z endTime :2023-01-13T07:15:00Z |
Menentukan interval yang dapat diterima bagi kendaraan untuk memulai (07.00 hingga 07.15) dan mengakhiri (17.00 hingga 17.15). |
endTimeWindows |
startTime :2023-01-13T18:45:00Z endTime :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:
- Jangka waktu global merepresentasikan jam buka bisnis penitipan, dan semua jangka waktu lainnya harus berada dalam jangka waktu ini.
- Pengambilan dan pengiriman memiliki
timeWindows
sendiri di awal dan akhir hari. startTimeWindows
kendaraan memberi operator kendaraan jangka waktu untuk memulai pekerjaan, danendTimeWindows
memberikan jangka waktu lain untuk menyelesaikan pekerjaan mereka.- Waktu mulai
startTimeWindow
pertama dan waktu berakhirendTimeWindow
terakhir menentukan jam operasional kendaraan, yang dalam hal ini sama dengan jendela waktu global.
Contoh permintaan
Contoh berikut menunjukkan struktur permintaan optimizeTours
yang menggabungkan nilai rentang 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
Rentang waktu dapat digunakan sebagai batasan ringan dengan menentukan softStartTime
dan
softEndTime
dalam jenis pesan TimeWindow
. Hal ini memungkinkan pengoptimal
menyimpang dari jangka waktu yang ditentukan dengan biaya tertentu, memprioritaskan pengoptimalan
secara keseluruhan daripada kepatuhan yang ketat terhadap jangka waktu jika menguntungkan.
Periode waktu fleksibel memiliki batasan penggunaan berikut:
- Peran ini tidak dapat diterapkan ke
globalStartTime
danglobalEndTime
karena tidak menggunakan jenis pesanTimeWindow
. - Hal ini hanya berlaku jika ada satu
TimeWindow
dalam daftar.
Properti
Tabel berikut menjelaskan properti batasan ringan untuk jangka 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 interval waktu fleksibel. Jika peristiwa terjadi setelah waktu ini, biaya akan dikenakan. |
costPerHourBeforeSoftStartTime |
angka | Biaya per jam yang timbul 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 dikeluarkan 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 }