- Representasi JSON
- Pengiriman
- VisitRequest
- LatLng
- Titik jalan
- Lokasi
- TimeWindow
- Kendaraan
- TravelMode
- UnloadingPolicy
- LoadLimit
- Interval
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Baris
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model pengiriman berisi satu set pengiriman yang harus dilakukan oleh satu set kendaraan, sekaligus meminimalkan biaya keseluruhan, yaitu jumlah dari:
- biaya pemilihan rute kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
- penalti pengiriman yang tidak dilakukan.
- biaya durasi global pengiriman
Representasi JSON |
---|
{ "shipments": [ { object ( |
Kolom | |
---|---|
shipments[] |
Kumpulan pengiriman yang harus dilakukan dalam model. |
vehicles[] |
Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan. |
globalStartTime |
Waktu mulai dan berakhir global model: tidak ada waktu di luar rentang ini yang dapat dianggap valid. Rentang waktu model harus kurang dari satu tahun, yaitu Saat menggunakan kolom Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
globalEndTime |
Jika tidak disetel, 00:00:00 UTC, 1 Januari 1971 (yaitu detik: 31536000, nanos: 0) akan digunakan sebagai default. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
globalDurationCostPerHour |
"Durasi global" dari keseluruhan rencana adalah perbedaan antara waktu mulai efektif paling awal dan waktu berakhir efektif terbaru dari semua kendaraan. Pengguna dapat menetapkan biaya per jam untuk kuantitas tersebut, misalnya, untuk mencoba dan mengoptimalkan penyelesaian tugas paling awal. Biaya ini harus berada dalam unit yang sama dengan |
durationDistanceMatrices[] |
Menentukan matriks durasi dan jarak yang digunakan dalam model. Jika kolom ini kosong, Google Maps atau jarak geodesi akan digunakan, bergantung pada nilai kolom Contoh penggunaan:
|
durationDistanceMatrixSrcTags[] |
Tag yang menentukan sumber matriks durasi dan jarak; Tag sesuai dengan |
durationDistanceMatrixDstTags[] |
Tag yang menentukan tujuan matriks durasi dan jarak; Tag sesuai dengan |
transitionAttributes[] |
Atribut transisi ditambahkan ke model. |
shipmentTypeIncompatibilities[] |
Kumpulan pengiriman_types yang tidak kompatibel (lihat |
shipmentTypeRequirements[] |
Kumpulan persyaratan |
precedenceRules[] |
Kumpulan aturan prioritas yang harus diterapkan dalam model. |
maxActiveVehicles |
Membatasi jumlah maksimum kendaraan aktif. Kendaraan tetap aktif jika rutenya melakukan setidaknya satu pengiriman. Solusi ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraannya heterogen. Pengoptimalan tersebut kemudian akan memilih subset kendaraan terbaik untuk digunakan. Harus benar-benar positif. |
Pengiriman
Pengiriman satu item, dari salah satu pengambilannya hingga salah satu pengirimannya. Agar pengiriman dianggap dilakukan, kendaraan unik harus mengunjungi salah satu lokasi pengambilannya (dan mengurangi kapasitas cadangannya), lalu mengunjungi salah satu lokasi pengirimannya di kemudian hari (dan oleh karena itu meningkatkan kembali kapasitas cadangannya sesuai).
Representasi JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Kolom | |
---|---|
displayName |
Nama tampilan pengiriman yang ditentukan pengguna. Panjang teks dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8. |
pickups[] |
Kumpulan alternatif pengambilan yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengiriman. |
deliveries[] |
Kumpulan alternatif pengiriman yang terkait dengan pengiriman. Jika tidak ditentukan, kendaraan hanya perlu mengunjungi lokasi yang sesuai dengan pengambilan. |
loadDemands |
Memuat permintaan pengiriman (misalnya berat, volume, jumlah palet, dll.). Kunci dalam peta harus berupa ID yang menjelaskan jenis beban yang sesuai, idealnya juga menyertakan unit. Misalnya: "weight_kg", "volume_gallons", "pallet_count", dll. Jika kunci yang diberikan tidak muncul di peta, beban yang sesuai dianggap sebagai null. Objek yang berisi daftar pasangan |
allowedVehicleIndices[] |
Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat melakukannya. Kendaraan diberikan berdasarkan indeksnya dalam daftar |
costsPerVehicle[] |
Menentukan biaya yang timbul saat pengiriman ini dikirimkan oleh setiap kendaraan. Jika ditentukan, ID harus memiliki SALAH SATU:
Biaya ini harus berada dalam unit yang sama dengan |
costsPerVehicleIndices[] |
Indeks kendaraan tempat |
pickupToDeliveryAbsoluteDetourLimit |
Menentukan waktu putar balik absolut maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengantaran. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Misalnya, t menjadi waktu tersingkat yang dibutuhkan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel
Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai tahun 2017/10, putar balik hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
pickupToDeliveryTimeLimit |
Menentukan durasi maksimum dari awal pengambilan hingga awal pengiriman pengiriman. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Hal ini tidak bergantung pada alternatif yang dipilih untuk pengambilan dan pengiriman, atau kecepatan kendaraan. Nilai ini dapat ditentukan di samping batasan putar balik maksimum: solusi akan mengikuti kedua spesifikasi tersebut. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
shipmentType |
String tidak kosong yang menentukan "jenis" untuk pengiriman ini. Fitur ini dapat digunakan untuk menentukan inkompatibilitas atau persyaratan antara Berbeda dari |
label |
Menentukan label untuk pengiriman ini. Label ini dilaporkan dalam respons dalam |
ignore |
Jika benar, lewati pengiriman ini, tetapi jangan terapkan Mengabaikan pengiriman akan menghasilkan error validasi jika ada Mengabaikan pengiriman yang dilakukan di |
penaltyCost |
Jika pengiriman tidak selesai, penalti ini akan ditambahkan ke biaya keseluruhan rute. Pengiriman dianggap selesai jika salah satu alternatif pengambilan dan pengantaran dikunjungi. Biaya dapat dinyatakan dalam unit yang sama yang digunakan untuk semua kolom terkait biaya lainnya dalam model dan harus positif. PENTING: Jika penalti ini tidak ditentukan, maka dianggap tidak terbatas, yaitu pengiriman harus diselesaikan. |
pickupToDeliveryRelativeDetourLimit |
Menentukan waktu putar balik relatif maksimum dibandingkan dengan jalur terpendek dari pengambilan hingga pengantaran. Jika ditentukan, ID ini harus positif, dan pengiriman harus berisi setidaknya layanan pengambilan dan pengantaran. Misalnya, t menjadi waktu tersingkat yang dibutuhkan untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, menyetel
Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih ketat akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai tahun 2017/10, putar balik hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. |
VisitRequest
Permintaan kunjungan yang dapat dilakukan dengan kendaraan: memiliki geolokasi (atau dua, lihat di bawah), waktu buka dan tutup yang diwakili oleh jangka waktu, dan waktu durasi layanan (waktu yang dihabiskan oleh kendaraan saat tiba untuk mengambil atau menurunkan barang).
Representasi JSON |
---|
{ "arrivalLocation": { object ( |
Kolom | |
---|---|
arrivalLocation |
Lokasi geografis tempat kendaraan tiba saat melakukan |
arrivalWaypoint |
Titik jalan tempat kendaraan tiba saat melakukan |
departureLocation |
Lokasi geografis tempat kendaraan berangkat setelah menyelesaikan |
departureWaypoint |
Titik jalan kendaraan berangkat setelah menyelesaikan |
tags[] |
Menentukan tag yang disertakan pada permintaan kunjungan. String kosong atau duplikat tidak diizinkan. |
timeWindows[] |
Jendela waktu yang membatasi waktu kedatangan pada suatu kunjungan. Perhatikan bahwa kendaraan dapat berangkat di luar jangka waktu kedatangan. Dengan kata lain, waktu kedatangan + durasi tidak harus berada dalam jangka waktu kedatangan. Hal ini dapat menyebabkan waktu tunggu jika kendaraan tiba sebelum Tidak adanya Jendela waktu harus terpisah, artinya tidak ada jangka waktu yang harus tumpang tindih atau berdekatan dengan yang lain, dan harus dalam urutan yang meningkat.
|
duration |
Durasi kunjungan, yaitu waktu yang dihabiskan oleh kendaraan antara kedatangan dan keberangkatan (ditambahkan ke kemungkinan waktu tunggu; lihat Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
cost |
Biaya untuk melayani permintaan kunjungan ini di rute kendaraan. Paket ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap pengambilan atau pengiriman alternatif dari suatu pengiriman. Biaya ini harus berada dalam unit yang sama dengan |
loadDemands |
Memuat permintaan dari permintaan kunjungan ini. Kolom ini sama seperti kolom Objek yang berisi daftar pasangan |
visitTypes[] |
Menentukan jenis kunjungan. Informasi ini dapat digunakan untuk mengalokasikan waktu tambahan yang diperlukan oleh kendaraan untuk menyelesaikan kunjungan ini (lihat Jenis hanya dapat muncul sekali. |
label |
Menentukan label untuk |
LatLng
Objek yang merepresentasikan pasangan garis lintang/bujur. Objek ini dinyatakan sebagai pasangan double untuk mewakili derajat lintang dan derajat bujur. Kecuali jika ditentukan lain, objek ini harus sesuai dengan standar WGS84. Nilai harus berada dalam rentang yang dinormalisasi.
Representasi JSON |
---|
{ "latitude": number, "longitude": number } |
Kolom | |
---|---|
latitude |
Lintang dalam derajat. Harus dalam rentang [-90.0, +90.0]. |
longitude |
Bujur dalam derajat. Harus dalam rentang [-180.0, +180.0]. |
Waypoint
Mengenkapsulasi titik jalan. Titik jalan menandai lokasi kedatangan dan keberangkatan VisitRequests, serta lokasi awal dan akhir Kendaraan.
Representasi JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Kolom | |
---|---|
sideOfRoad |
Opsional. Menunjukkan bahwa lokasi titik jalan ini dimaksudkan agar kendaraan berhenti di sisi jalan tertentu. Jika Anda menetapkan nilai ini, rute akan melewati lokasi sehingga kendaraan dapat berhenti di sisi jalan yang bias lokasinya dari tengah jalan. Opsi ini tidak berfungsi untuk mode perjalanan 'BERLANJUT'. |
Kolom union location_type . Berbagai cara untuk menampilkan lokasi. location_type hanya ada berupa salah satu diantara berikut: |
|
location |
Titik yang ditetapkan menggunakan koordinat geografis, termasuk judul opsional. |
placeId |
ID Tempat POI yang terkait dengan titik jalan. |
Lokasi
Mengenkapsulasi lokasi (titik geografis, dan judul opsional).
Representasi JSON |
---|
{
"latLng": {
object ( |
Kolom | |
---|---|
latLng |
Koordinat geografis titik jalan. |
heading |
Judul kompas yang terkait dengan arah arus lalu lintas. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk pengambilan dan penurunan. Nilai arah dapat berkisar dari 0 hingga 360, di mana 0 menunjukkan arah tujuan Utara, 90 menunjukkan arah Timur, dll. |
TimeWindow
Jendela waktu membatasi waktu peristiwa, seperti waktu kedatangan saat kunjungan, atau waktu mulai dan berakhir kendaraan.
Batas periode waktu sulit, startTime
dan endTime
, menerapkan waktu paling awal dan paling akhir untuk peristiwa, sehingga startTime <= event_time <=
endTime
. Batas bawah periode waktu lunak, softStartTime
, menyatakan preferensi agar peristiwa terjadi pada atau setelah softStartTime
dengan menimbulkan biaya yang proporsional dengan durasi sebelum softStartTime peristiwa tersebut terjadi. Batas atas periode waktu lunak, softEndTime
, menyatakan preferensi agar peristiwa terjadi pada atau sebelum softEndTime
dengan menimbulkan biaya yang proporsional dengan durasi waktu setelah softEndTime
peristiwa tersebut terjadi. startTime
, endTime
, softStartTime
, dan softEndTime
harus berada dalam batas waktu global (lihat ShipmentModel.global_start_time
dan ShipmentModel.global_end_time
) serta harus mematuhi:
0 <= `startTime` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
Representasi JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Kolom | |
---|---|
startTime |
Waktu mulai periode waktu yang sulit. Jika tidak ditentukan, atribut akan disetel ke Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
endTime |
Waktu berakhir periode waktu yang sulit. Jika tidak ditentukan, atribut akan disetel ke Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
softStartTime |
Waktu mulai soft selama jangka waktu. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
softEndTime |
Waktu soft end periode waktu. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
costPerHourBeforeSoftStartTime |
Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi sebelum softStartTime, dihitung sebagai berikut:
Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika softStartTime telah ditetapkan. |
costPerHourAfterSoftEndTime |
Biaya per jam yang ditambahkan ke biaya lain dalam model jika peristiwa terjadi setelah
Biaya ini harus positif, dan kolom hanya dapat ditetapkan jika |
Kendaraan
Membuat model kendaraan dalam masalah pengiriman. Menyelesaikan masalah pengiriman akan membuat rute mulai dari startLocation
dan berakhir pukul endLocation
untuk kendaraan ini. Rute adalah urutan kunjungan (lihat ShipmentRoute
).
Representasi JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Kolom | |
---|---|
displayName |
Nama tampilan kendaraan yang ditentukan pengguna. Panjang teks dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8. |
travelMode |
Mode perjalanan yang memengaruhi jalan yang dapat digunakan oleh kendaraan dan kecepatannya. Lihat juga |
startLocation |
Lokasi geografis tempat kendaraan dimulai sebelum mengambil pengiriman. Jika tidak ditentukan, kendaraan akan dimulai saat pengambilan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, |
startWaypoint |
Titik jalan yang mewakili lokasi geografis tempat kendaraan dimulai sebelum mengambil pengiriman. Jika |
endLocation |
Lokasi geografis tempat kendaraan berakhir setelah menyelesaikan |
endWaypoint |
Titik jalan yang mewakili lokasi geografis tempat kendaraan berakhir setelah menyelesaikan |
startTags[] |
Menentukan tag yang dilampirkan ke awal rute kendaraan. String kosong atau duplikat tidak diizinkan. |
endTags[] |
Menentukan tag yang dilampirkan ke akhir rute kendaraan. String kosong atau duplikat tidak diizinkan. |
startTimeWindows[] |
Rentang waktu saat kendaraan dapat meninggalkan lokasi awal. Kolom tersebut harus berada dalam batas waktu global (lihat kolom Jendela waktu milik kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan yang lain, dan harus dalam urutan kronologis.
|
endTimeWindows[] |
Periode waktu saat kendaraan tiba di lokasi akhir. Kolom tersebut harus berada dalam batas waktu global (lihat kolom Jendela waktu milik kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan yang lain, dan harus dalam urutan kronologis.
|
unloadingPolicy |
Kebijakan membongkar muatan diterapkan pada kendaraan. |
loadLimits |
Kapasitas kendaraan (misalnya berat, volume, # palet). Kunci dalam peta adalah ID jenis beban, yang konsisten dengan kunci kolom Objek yang berisi daftar pasangan |
costPerHour |
Biaya kendaraan: semua biaya akan ditambahkan dan harus berada dalam unit yang sama dengan Biaya per jam untuk rute kendaraan. Biaya ini diterapkan ke total waktu yang dibutuhkan oleh rute, dan mencakup waktu perjalanan, waktu tunggu, dan waktu kunjungan. Menggunakan |
costPerTraveledHour |
Biaya per jam perjalanan untuk rute kendaraan. Biaya ini hanya berlaku untuk waktu perjalanan yang diambil oleh rute (yaitu, yang dilaporkan dalam |
costPerKilometer |
Biaya per kilometer rute kendaraan. Biaya ini diterapkan untuk jarak yang dilaporkan di |
fixedCost |
Biaya tetap diterapkan jika kendaraan ini digunakan untuk menangani pengiriman. |
usedIfRouteIsEmpty |
Kolom ini hanya berlaku untuk kendaraan jika rutenya tidak melayani pengiriman apa pun. Kode ini menunjukkan apakah kendaraan harus dianggap digunakan atau tidak dalam kasus ini. Jika benar, kendaraan berangkat dari awal ke lokasi akhir meskipun tidak melayani pengiriman apa pun, dan biaya waktu dan jarak yang dihasilkan dari awal --> perjalanan akhir akan diperhitungkan. Jika tidak, kendaraan tidak akan melakukan perjalanan dari awal hingga lokasi akhirnya, dan tidak ada |
routeDurationLimit |
Batas diterapkan pada total durasi rute kendaraan. Dalam |
travelDurationLimit |
Batas diterapkan pada durasi perjalanan rute kendaraan. Dalam |
routeDistanceLimit |
Batas diterapkan ke total jarak rute kendaraan. Dalam |
extraVisitDurationForVisitType |
Menentukan peta dari string visitTypes ke durasi. Durasi adalah waktu selain Jika permintaan kunjungan memiliki beberapa jenis, durasi akan ditambahkan untuk setiap jenis di peta. Objek yang berisi daftar pasangan |
breakRule |
Menjelaskan jadwal istirahat yang akan ditegakkan pada kendaraan ini. Jika kosong, tidak ada jeda yang akan dijadwalkan untuk kendaraan ini. |
label |
Menentukan label untuk kendaraan ini. Label ini dilaporkan dalam respons sebagai |
ignore |
Jika benar, Jika pengiriman dilakukan oleh kendaraan yang diabaikan di Jika pengiriman dilakukan oleh kendaraan yang diabaikan di |
travelDurationMultiple |
Menentukan faktor multiplikatif yang dapat digunakan untuk menambah atau mengurangi waktu tempuh kendaraan ini. Misalnya, menyetel setelan ini ke 2,0 berarti kendaraan ini lebih lambat dan memiliki waktu tempuh yang dua kali lebih besar dari kendaraan standar. Jumlah tersebut tidak memengaruhi durasi kunjungan. Hal ini memengaruhi biaya jika PERINGATAN: Waktu perjalanan akan dibulatkan ke detik terdekat setelah kelipatan ini diterapkan, tetapi sebelum menjalankan operasi numerik apa pun, karena itu, kelipatan kecil dapat menyebabkan hilangnya presisi. Lihat juga |
TravelMode
Mode perjalanan yang dapat digunakan oleh kendaraan.
Ini harus merupakan bagian dari mode perjalanan Routes Preferred API Google Maps Platform, lihat: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enum | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Mode perjalanan tidak ditetapkan, setara dengan DRIVING . |
DRIVING |
Mode perjalanan yang sesuai dengan rute mobil (mobil, ...). |
WALKING |
Mode perjalanan yang sesuai dengan rute jalan kaki. |
UnloadingPolicy
Kebijakan tentang cara menurunkan muatan kendaraan. Hanya berlaku untuk pengiriman yang memiliki layanan pengambilan dan pengantaran.
Pengiriman lainnya gratis untuk dilakukan di mana saja di rute yang terpisah dari unloadingPolicy
.
Enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Kebijakan bongkar muat tidak ditentukan; pengiriman harus dilakukan setelah penjemputan yang sesuai. |
LAST_IN_FIRST_OUT |
Pengiriman harus dilakukan berdasarkan urutan pengambilan terbalik |
FIRST_IN_FIRST_OUT |
Pengiriman harus dilakukan dalam urutan yang sama dengan pengambilan |
LoadLimit
Menentukan batas beban yang diterapkan pada kendaraan, mis. "truk ini hanya dapat membawa hingga 3.500 kg". Lihat loadLimits
.
Representasi JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Kolom | |
---|---|
softMaxLoad |
Batas lunak dari beban. Lihat |
costPerUnitAboveSoftMax |
Jika beban melebihi |
startLoadInterval |
Interval beban kendaraan yang dapat diterima di awal rute. |
endLoadInterval |
Interval beban kendaraan yang dapat diterima di akhir rute. |
maxLoad |
Jumlah beban maksimum yang dapat diterima. |
Interval
Interval jumlah muatan yang dapat diterima.
Representasi JSON |
---|
{ "min": string, "max": string } |
Kolom | |
---|---|
min |
Beban minimum yang dapat diterima. Harus ≥ 0. Jika keduanya ditentukan, |
max |
Beban maksimum yang dapat diterima. Harus ≥ 0. Jika tidak ditentukan, pemuatan maksimum tidak dibatasi oleh pesan ini. Jika keduanya ditentukan, |
DurationLimit
Batas yang menentukan durasi maksimum rute kendaraan. Sinyalnya bisa keras atau lunak.
Jika kolom soft limit ditentukan, nilai minimum soft max dan biaya yang terkait harus ditentukan bersama.
Representasi JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Kolom | |
---|---|
maxDuration |
Batas keras yang membatasi durasi agar maksimal maxDuration. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
softMaxDuration |
Batas yang bisa dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya. Biaya ini bertambah dengan biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan, Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
quadraticSoftMaxDuration |
Batas yang bisa dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya, berupa kuadrat dari durasi. Biaya ini bertambah dengan biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan,
Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
costPerHourAfterSoftMax |
Biaya per jam yang timbul jika nilai minimum
Biayanya tidak boleh negatif. |
costPerSquareHourAfterQuadraticSoftMax |
Biaya per jam persegi yang timbul jika nilai minimum Biaya tambahan adalah 0 jika durasi berada di bawah nilai minimum, jika tidak, biaya akan bergantung pada durasi sebagai berikut:
Biayanya tidak boleh negatif. |
DistanceLimit
Batas yang menentukan jarak maksimum yang dapat ditempuh. Sinyalnya bisa keras atau lunak.
Jika batas yang dapat dilewati ditentukan, softMaxMeters
dan costPerKilometerAboveSoftMax
harus ditentukan dan tidak negatif.
Representasi JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Kolom | |
---|---|
maxMeters |
Batas keras yang membatasi jarak maksimal adalah maxMeter. Batasnya tidak boleh negatif. |
softMaxMeters |
Batas lunak tidak menerapkan batas jarak maksimum, tetapi jika dilanggar, Anda akan dikenai biaya yang berjumlah total biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika softMaxMeter yang ditentukan harus kurang dari maxMeter dan tidak boleh negatif. |
costPerKilometerAboveSoftMax |
Biaya per kilometer yang dikenakan jika jarak melebihi batas
Biayanya tidak boleh negatif. |
BreakRule
Aturan untuk memberikan waktu istirahat bagi kendaraan (misalnya istirahat makan siang). Istirahat adalah periode waktu yang berdampingan saat kendaraan tetap tidak ada aktivitas pada posisinya saat ini dan tidak dapat melakukan kunjungan apa pun. Jeda data dapat terjadi:
- selama perjalanan di antara dua kunjungan (yang mencakup waktu sebelum atau tepat setelah kunjungan, tetapi tidak di tengah kunjungan), yang akan memperpanjang waktu transit di antara kunjungan tersebut,
- atau sebelum kendaraan dimulai (kendaraan tidak boleh menyala di tengah istirahat), dalam hal ini tidak memengaruhi waktu mulai kendaraan.
- atau setelah kendaraan berakhir (ditto, dengan waktu berakhir kendaraan).
Representasi JSON |
---|
{ "breakRequests": [ { object ( |
Kolom | |
---|---|
breakRequests[] |
Urutan jeda. Lihat pesan |
frequencyConstraints[] |
Beberapa |
BreakRequest
Urutan jeda (yaitu jumlah dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui sebelumnya. BreakRequest
berulang menentukan urutan tersebut, sesuai dengan urutan kemunculannya. Rentang waktu (earliestStartTime
/ latestStartTime
) mungkin tumpang tindih, tetapi harus kompatibel dengan urutan (ini dicentang).
Representasi JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Kolom | |
---|---|
earliestStartTime |
Wajib. Batas bawah (inklusif) pada awal jeda. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
latestStartTime |
Wajib. Batas atas (inklusif) pada awal batas. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: |
minDuration |
Wajib. Durasi jeda minimum. Harus positif. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
FrequencyConstraint
Salah satunya dapat lebih membatasi frekuensi dan durasi jeda yang ditentukan di atas, dengan menerapkan frekuensi jeda minimum, seperti "Harus ada jeda minimal 1 jam setiap 12 jam". Dengan asumsi bahwa hal ini dapat ditafsirkan sebagai "Dalam rentang waktu geser ke 12 jam, harus ada setidaknya satu jeda setidaknya satu jam", contoh tersebut akan diterjemahkan ke FrequencyConstraint
berikut:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Waktu dan durasi jeda dalam solusi akan mengikuti semua batasan tersebut, selain jangka waktu dan durasi minimum yang telah ditentukan dalam BreakRequest
.
Dalam praktiknya, FrequencyConstraint
dapat berlaku untuk jeda yang tidak berturut-turut. Misalnya, jadwal berikut mengikuti contoh "1j setiap 12j":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Representasi JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Kolom | |
---|---|
minBreakDuration |
Wajib. Durasi jeda minimum untuk batasan ini. Tidak negatif. Lihat deskripsi Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
maxInterBreakDuration |
Wajib. Rentang maksimum yang diizinkan pada interval waktu apa pun dalam rute yang tidak menyertakan setidaknya sebagian jeda Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
DurationDistanceMatrix
Menentukan matriks durasi dan jarak dari lokasi kunjungan dan awal kendaraan yang akan dikunjungi dan lokasi akhir kendaraan.
Representasi JSON |
---|
{
"rows": [
{
object ( |
Kolom | |
---|---|
rows[] |
Menentukan baris matriks durasi dan jarak. Elemen ini harus memiliki sebanyak |
vehicleStartTag |
Tag yang menentukan kendaraan mana yang menggunakan matriks jarak dan durasi ini. Jika kosong, ini berlaku untuk semua kendaraan, dan hanya boleh ada satu matriks. Setiap start kendaraan harus sama persis dengan satu matriks, yaitu tepat satu dari kolom Semua matriks harus memiliki |
Baris
Menentukan baris matriks durasi dan jarak.
Representasi JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Kolom | |
---|---|
durations[] |
Nilai durasi untuk baris tertentu. Elemen ini harus memiliki sebanyak Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
meters[] |
Nilai jarak untuk baris tertentu. Jika tidak ada biaya atau batasan yang merujuk pada jarak dalam model, nilai ini dapat dibiarkan kosong; jika tidak, model harus memiliki sebanyak |
TransitionAttributes
Menentukan atribut transisi antara dua kunjungan berturut-turut di suatu rute. Beberapa TransitionAttributes
mungkin berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan bertambah dan batasan atau batas paling ketat akan berlaku (mengikuti semantik "AND" alami).
Representasi JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Kolom | |
---|---|
srcTag |
Tag yang menentukan kumpulan transisi (src->dst) transisi yang menerapkan atribut ini. Kunjungan sumber atau awal kendaraan cocok jika |
excludedSrcTag |
Lihat |
dstTag |
Kunjungan tujuan atau akhir kendaraan cocok jika |
excludedDstTag |
Lihat |
cost |
Menentukan biaya untuk melakukan transisi ini. Biaya ini berada di unit yang sama dengan semua biaya lain dalam model dan tidak boleh bernilai negatif. Biaya ini diterapkan di atas semua biaya lain yang sudah ada. |
costPerKilometer |
Menentukan biaya per kilometer yang diterapkan ke jarak yang ditempuh saat melakukan transisi ini. Ini menambahkan hingga |
distanceLimit |
Menentukan batas jarak yang ditempuh saat melakukan transisi ini. Mulai 6/2021, hanya batas yang dapat dilewati yang didukung. |
delay |
Menentukan penundaan yang terjadi saat melakukan transisi ini. Penundaan ini selalu terjadi setelah menyelesaikan kunjungan sumber dan sebelum memulai kunjungan tujuan. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
ShipmentTypeIncompatibility
Menentukan ketidaksesuaian antarpengiriman bergantung pada pengirimanType-nya. Pengiriman yang tidak kompatibel di rute yang sama dibatasi berdasarkan mode inkompatibilitas.
Representasi JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Kolom | |
---|---|
types[] |
Daftar jenis yang tidak kompatibel. Dua pengiriman yang memiliki |
incompatibilityMode |
Mode diterapkan ke inkompatibilitas. |
IncompatibilityMode
Mode yang menentukan bagaimana tampilan pengiriman yang tidak kompatibel dibatasi di rute yang sama.
Enum | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Mode inkompatibilitas tidak ditentukan. Nilai ini tidak boleh digunakan. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Dalam mode ini, dua pengiriman dengan jenis yang tidak kompatibel tidak akan dapat menggunakan kendaraan yang sama. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Untuk dua pengiriman dengan jenis yang tidak kompatibel serta mode inkompatibilitas
|
ShipmentTypeRequirement
Menentukan persyaratan antarpengiriman berdasarkan jenis pengiriman. Detail persyaratan ditentukan oleh mode persyaratan.
Representasi JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Kolom | |
---|---|
requiredShipmentTypeAlternatives[] |
Daftar jenis pengiriman alternatif yang diwajibkan oleh |
dependentShipmentTypes[] |
Semua pengiriman dengan jenis di kolom CATATAN: Rantai persyaratan yang sedemikian rupa sehingga |
requirementMode |
Mode diterapkan sesuai persyaratan. |
RequirementMode
Mode yang menentukan tampilan pengiriman dependen di suatu rute.
Enum | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Mode persyaratan tidak ditentukan. Nilai ini tidak boleh digunakan. |
PERFORMED_BY_SAME_VEHICLE |
Dalam mode ini, semua pengiriman "dependen" harus berbagi kendaraan yang sama dengan setidaknya satu pengiriman "wajib". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Dengan mode Oleh karena itu, pengambilan dengan pengiriman "dependen" harus memiliki:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Sama seperti sebelumnya, kecuali pengiriman yang "dependen" harus memiliki pengiriman "wajib" di kendaraan mereka pada saat pengiriman. |
PrecedenceRule
Aturan prioritas antara dua peristiwa (setiap peristiwa adalah pengambilan atau pengiriman pengiriman): peristiwa "kedua" harus dimulai setidaknya offsetDuration
setelah "pertama" dimulai.
Beberapa prioritas dapat merujuk ke peristiwa yang sama (atau terkait), misalnya, "pengambilan B terjadi setelah pengiriman A" dan "pengambilan C terjadi setelah pengambilan B".
Selain itu, prioritas hanya berlaku jika kedua pengiriman dilakukan dan jika tidak, diabaikan.
Representasi JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Kolom | |
---|---|
firstIsDelivery |
Menunjukkan apakah peristiwa "pertama" adalah pengiriman. |
secondIsDelivery |
Menunjukkan apakah peristiwa "kedua" adalah pengiriman. |
offsetDuration |
Offset antara peristiwa "pertama" dan "kedua". Bisa negatif. Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan ' |
firstIndex |
Indeks pengiriman peristiwa "pertama". Kolom ini harus ditentukan. |
secondIndex |
Indeks pengiriman peristiwa "kedua". Kolom ini harus ditentukan. |