- Representasi JSON
- Pengiriman
- VisitRequest
- LatLng
- Titik jalan
- Location
- TimeWindow
- Kendaraan
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Baris
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model pengiriman berisi satu set pengiriman yang harus dilakukan oleh serangkaian kendaraan, sekaligus meminimalkan biaya keseluruhan, yang merupakan penjumlahan dari:
- biaya perutean kendaraan (jumlah biaya per total waktu, biaya per waktu perjalanan, dan biaya tetap untuk semua kendaraan).
- penalti pengiriman yang tidak dilakukan.
- biaya durasi pengiriman global
Representasi JSON |
---|
{ "shipments": [ { object ( |
Kolom | |
---|---|
shipments[] |
Rangkaian pengiriman yang harus dilakukan dalam model. |
vehicles[] |
Kumpulan kendaraan yang dapat digunakan untuk melakukan kunjungan. |
globalStartTime |
Waktu mulai dan waktu 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 hingga sembilan digit pecahan. 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 pecahan. Contoh: |
globalDurationCostPerHour |
"Durasi global" dari keseluruhan rencana adalah perbedaan antara waktu mulai efektif paling awal dan waktu akhir efektif terbaru dari semua kendaraan. Misalnya, pengguna dapat menetapkan biaya per jam ke kuantitas tersebut untuk mencoba dan mengoptimalkan penyelesaian pekerjaan paling awal. Biaya ini harus dalam unit yang sama dengan |
durationDistanceMatrices[] |
Menentukan matriks durasi dan jarak yang digunakan dalam model. Jika kolom ini kosong, jarak Google Maps atau 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 shipment_types yang tidak kompatibel (lihat |
shipmentTypeRequirements[] |
Kumpulan persyaratan |
precedenceRules[] |
Kumpulan aturan prioritas yang harus diterapkan di model. |
maxActiveVehicles |
Membatasi jumlah maksimum kendaraan aktif. Kendaraan aktif jika rutenya melakukan setidaknya satu pengiriman. Hal ini dapat digunakan untuk membatasi jumlah rute jika jumlah pengemudi lebih sedikit daripada kendaraan dan armada kendaraan multi-penumpang. Pengoptimalan tersebut kemudian akan memilih subset kendaraan terbaik yang akan digunakan. Harus benar-benar positif. |
Pengiriman
Pengiriman satu item, dari salah satu pengambilannya ke salah satu pengirimannya. Agar pengiriman dianggap telah dilakukan, kendaraan unik harus mengunjungi salah satu lokasi pengambilan (dan mengurangi kapasitas cadangannya), lalu mengunjungi salah satu lokasi pengirimannya nanti (sehingga meningkatkan kembali kapasitas cadangannya).
Representasi JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Kolom | |
---|---|
displayName |
Nama tampilan pengiriman yang ditentukan pengguna. Panjangnya 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 penjemputan. |
loadDemands |
Pemuatan permintaan pengiriman (misalnya berat, volume, jumlah palet, dll.). Kunci dalam peta harus berupa ID yang menjelaskan jenis beban yang sesuai, idealnya juga termasuk unitnya. Misalnya: "weight_kg", "volume_gallons", "pallet_count", dll. Jika kunci tertentu tidak muncul di peta, beban yang sesuai akan dianggap sebagai null. |
allowedVehicleIndices[] |
Kumpulan kendaraan yang dapat melakukan pengiriman ini. Jika kosong, semua kendaraan dapat menjalankannya. Kendaraan diberikan berdasarkan indeksnya di daftar |
costsPerVehicle[] |
Menentukan biaya yang dikeluarkan saat pengiriman ini dikirim oleh setiap kendaraan. Jika ditentukan, harus memiliki SALAH SATU:
Biaya ini harus dalam unit yang sama dengan |
costsPerVehicleIndices[] |
Indeks kendaraan yang menerapkan |
pickupToDeliveryAbsoluteDetourLimit |
Menentukan waktu putar balik absolut maksimum dibandingkan dengan jalur terpendek dari pengambilan ke pengiriman. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran. Misalnya, t adalah waktu terpendek yang diperlukan untuk berpindah 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 membatasi akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, pengalihan hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
pickupToDeliveryTimeLimit |
Menentukan durasi maksimum dari awal pengambilan hingga awal pengiriman paket. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran. Hal ini tidak bergantung pada alternatif yang dipilih untuk pengambilan dan pengiriman, atau pada kecepatan kendaraan. Hal ini dapat ditentukan bersama batasan maksimum pengalihan: solusi akan mengikuti kedua spesifikasi tersebut. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
shipmentType |
String yang tidak kosong yang menentukan "jenis" untuk pengiriman ini. Fitur ini dapat digunakan untuk menentukan inkompatibilitas atau persyaratan antara Berbeda dengan |
label |
Menentukan label untuk pengiriman ini. Label ini dilaporkan dalam respons di |
ignore |
Jika benar, lewati pengiriman ini, tetapi jangan terapkan Mengabaikan pengiriman akan menyebabkan 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 pengirimannya dikunjungi. Biaya dapat dinyatakan dalam unit yang sama yang digunakan untuk semua kolom terkait biaya lainnya dalam model dan harus bernilai positif. PENTING: Jika penalti ini tidak ditentukan, maka akan dianggap tidak terbatas, yaitu pengiriman harus diselesaikan. |
pickupToDeliveryRelativeDetourLimit |
Menentukan waktu putar balik relatif maksimum dibandingkan dengan jalur terpendek dari pengambilan ke pengiriman. Jika ditentukan, nilainya harus positif, dan pengiriman harus berisi setidaknya opsi pengambilan dan pengantaran. Misalnya, anggaplah waktu tersingkat untuk beralih dari alternatif pengambilan yang dipilih langsung ke alternatif pengiriman yang dipilih. Kemudian, setelan
Jika batas relatif dan absolut ditentukan pada pengiriman yang sama, batas yang lebih membatasi akan digunakan untuk setiap kemungkinan pasangan pengambilan/pengiriman. Mulai 10/2017, pengalihan hanya didukung jika durasi perjalanan tidak bergantung pada kendaraan. |
VisitRequest
Permintaan kunjungan yang dapat dilakukan oleh kendaraan: memiliki geolokasi (atau dua, lihat di bawah), waktu buka dan tutup yang diwakili oleh periode waktu, dan waktu durasi layanan (waktu yang dihabiskan oleh kendaraan setelah tiba untuk mengambil atau mengantar barang).
Representasi JSON |
---|
{ "arrivalLocation": { object ( |
Kolom | |
---|---|
arrivalLocation |
Geolokasi tempat kendaraan tiba saat melakukan |
arrivalWaypoint |
Titik jalan tempat kendaraan tiba saat melakukan |
departureLocation |
Geo-lokasi tempat kendaraan berangkat setelah menyelesaikan |
departureWaypoint |
Titik jalan tempat kendaraan berangkat setelah menyelesaikan |
tags[] |
Menentukan tag yang dilampirkan ke permintaan kunjungan. String kosong atau duplikat tidak diizinkan. |
timeWindows[] |
Periode waktu yang membatasi waktu kedatangan pada kunjungan. Perhatikan bahwa kendaraan dapat berangkat di luar periode waktu kedatangan, yaitu waktu kedatangan + durasi tidak harus berada di dalam jangka waktu. Hal ini dapat menyebabkan waktu tunggu jika kendaraan tiba sebelum Tidak adanya Periode waktu harus terpisah, yaitu tidak boleh ada periode waktu yang tumpang tindih atau berdekatan dengan yang lain, dan periode tersebut harus dalam urutan yang meningkat.
|
duration |
Durasi kunjungan, yaitu waktu yang dihabiskan oleh kendaraan antara kedatangan dan keberangkatan (akan ditambahkan ke kemungkinan waktu tunggu; lihat Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
cost |
Biaya untuk melayani permintaan kunjungan ini di rute kendaraan. Kartu ini dapat digunakan untuk membayar biaya yang berbeda untuk setiap pengambilan atau pengiriman alternatif. Biaya ini harus dalam unit yang sama dengan |
loadDemands |
Memuat permintaan kunjungan ini. Kolom ini sama seperti kolom |
visitTypes[] |
Menentukan jenis kunjungan. Ini dapat digunakan untuk mengalokasikan waktu tambahan yang diperlukan kendaraan untuk menyelesaikan kunjungan ini (lihat Jenis hanya dapat muncul sekali. |
label |
Menentukan label untuk |
LatLng
Objek yang merepresentasikan pasangan garis lintang/bujur. Ini dinyatakan sebagai pasangan nilai ganda untuk mewakili derajat lintang dan derajat bujur. Kecuali 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 Kunjungan, serta lokasi awal dan akhir Kendaraan.
Representasi JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Kolom | |
---|---|
sideOfRoad |
Opsional. Menunjukkan bahwa lokasi titik jalan ini dimaksudkan untuk memiliki preferensi agar kendaraan berhenti di sisi jalan tertentu. Jika Anda menetapkan nilai ini, rute akan melewati lokasi sehingga kendaraan dapat berhenti di sisi jalan yang membiaskan lokasi dari tengah jalan. Opsi ini tidak berfungsi untuk mode perjalanan 'BERJALAN'. |
Kolom union location_type . Berbagai cara untuk merepresentasikan lokasi. location_type hanya dapat berupa salah satu dari berikut: |
|
location |
Titik yang ditetapkan menggunakan koordinat geografis, yang mencakup arah 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 |
Arah kompas yang terkait dengan arah arus lalu lintas. Nilai ini digunakan untuk menentukan sisi jalan yang akan digunakan untuk pengangkutan dan penurunan penumpang. Nilai arah dapat berkisar dari 0 hingga 360, dengan 0 menentukan arah tujuan ke Utara, 90 menentukan arah tujuan Timur, dll. |
TimeWindow
Periode waktu membatasi waktu peristiwa, seperti waktu kedatangan pada kunjungan, atau waktu mulai dan berakhir kendaraan.
Batas jangka waktu hard, startTime
dan endTime
, menerapkan waktu paling awal dan paling akhir 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 fleksibel, softEndTime
, menyatakan preferensi agar peristiwa terjadi pada atau sebelum softEndTime
dengan menimbulkan biaya yang sebanding dengan berapa lama setelah softEndTime
peristiwa terjadi. startTime
, endTime
, softStartTime
, dan softEndTime
harus berada dalam batas waktu global (lihat ShipmentModel.global_start_time
dan ShipmentModel.global_end_time
) dan harus mematuhi:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
Representasi JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Kolom | |
---|---|
startTime |
Waktu mulai periode waktu yang ketat. Jika tidak ditentukan, nilainya akan ditetapkan ke Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
endTime |
Waktu berakhir periode waktu yang ketat. Jika tidak ditentukan, nilainya akan ditetapkan ke Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
softStartTime |
Waktu soft start dari jangka waktu. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit pecahan. Contoh: |
softEndTime |
Waktu berakhir sementara pada jangka waktu. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
costPerHourBeforeSoftStartTime |
Biaya per jam ditambahkan ke biaya lain dalam model jika peristiwa terjadi sebelum softStartTime, yang dihitung sebagai:
Biaya ini harus positif, dan kolom ini 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 bernilai positif, dan kolom ini hanya dapat ditetapkan jika |
Kendaraan
Membuat model kendaraan dalam masalah pengiriman. Menyelesaikan masalah pengiriman akan membuat rute yang dimulai dari startLocation
dan berakhir di endLocation
untuk kendaraan ini. Rute adalah urutan kunjungan (lihat ShipmentRoute
).
Representasi JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Kolom | |
---|---|
displayName |
Nama tampilan kendaraan yang ditetapkan pengguna. Panjangnya dapat mencapai 63 karakter dan dapat menggunakan karakter UTF-8. |
travelMode |
Mode perjalanan yang memengaruhi jalan yang dapat digunakan kendaraan dan kecepatannya. Lihat juga |
routeModifiers |
Kumpulan kondisi yang harus dipenuhi yang memengaruhi cara rute dihitung untuk kendaraan tertentu. |
startLocation |
Lokasi geografis tempat kendaraan memulai perjalanan sebelum mengambil kiriman. Jika tidak ditentukan, kendaraan akan dimulai saat penjemputan pertamanya. Jika model pengiriman memiliki matriks durasi dan jarak, |
startWaypoint |
Titik jalan yang mewakili lokasi geografis tempat kendaraan memulai perjalanan sebelum mengambil pengiriman apa pun. 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[] |
Periode waktu saat kendaraan dapat berangkat dari lokasi awalnya. Batas waktu tersebut harus berada dalam batas waktu global (lihat kolom Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan periode waktu lain, dan periode waktu tersebut harus dalam urutan kronologis.
|
endTimeWindows[] |
Jangka waktu saat kendaraan dapat tiba di lokasi akhirnya. Nilai ini harus berada dalam batas waktu global (lihat kolom Periode waktu yang termasuk dalam kolom berulang yang sama harus terpisah, yaitu tidak ada periode waktu yang dapat tumpang-tindih atau berdekatan dengan periode waktu lain, dan periode waktu tersebut harus dalam urutan kronologis.
|
unloadingPolicy |
Kebijakan bongkar muat diterapkan di kendaraan. |
loadLimits |
Kapasitas kendaraan (misalnya berat, volume, # palet). Kunci dalam peta adalah ID jenis pemuatan, yang konsisten dengan kunci kolom |
costPerHour |
Biaya kendaraan: semua biaya dijumlahkan dan harus dalam unit yang sama dengan Biaya per jam rute kendaraan. Biaya ini diterapkan pada total waktu yang diperlukan untuk rute, dan mencakup waktu perjalanan, waktu tunggu, dan waktu kunjungan. Menggunakan |
costPerTraveledHour |
Biaya per jam perjalanan dari rute kendaraan. Biaya ini hanya berlaku untuk waktu perjalanan yang ditempuh rute (yaitu yang dilaporkan dalam |
costPerKilometer |
Biaya per kilometer rute kendaraan. Biaya ini diterapkan ke jarak yang dilaporkan di |
fixedCost |
Biaya tetap berlaku jika kendaraan ini digunakan untuk menangani pengiriman. |
usedIfRouteIsEmpty |
Kolom ini hanya berlaku untuk kendaraan jika rutenya tidak melayani pengiriman apa pun. Dalam hal ini, kolom ini menunjukkan apakah kendaraan harus dianggap sebagai bekas atau tidak. Jika benar, kendaraan bergerak dari awal ke lokasi akhirnya meskipun tidak melayani pengiriman apa pun, dan biaya waktu dan jarak yang dihasilkan dari perjalanan sejak awal --> akhir akan diperhitungkan. Jika tidak, kendaraan tidak akan melakukan perjalanan dari awal ke lokasi akhirnya, dan tidak ada |
routeDurationLimit |
Batas diterapkan ke total durasi rute kendaraan. Dalam |
travelDurationLimit |
Batas yang diterapkan pada durasi perjalanan rute kendaraan. Dalam |
routeDistanceLimit |
Batas diterapkan ke total jarak rute kendaraan. Dalam |
extraVisitDurationForVisitType |
Menentukan peta dari string visitType ke durasi. Durasinya adalah waktu, selain Jika permintaan kunjungan memiliki beberapa jenis, durasi akan ditambahkan untuk setiap jenis di peta. |
breakRule |
Menjelaskan jadwal jeda yang akan diterapkan pada kendaraan ini. Jika kosong, tidak ada waktu istirahat 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 perkalian yang dapat digunakan untuk menambah atau mengurangi waktu perjalanan kendaraan ini. Misalnya, menetapkannya ke 2,0 berarti kendaraan ini lebih lambat dan memiliki waktu perjalanan dua kali lipat dari kendaraan standar. Beberapa hal ini tidak memengaruhi durasi kunjungan. Hal ini memengaruhi biaya jika PERINGATAN: Waktu tempuh akan dibulatkan ke detik terdekat setelah kelipatan ini diterapkan, tetapi sebelum melakukan operasi numerik apa pun, oleh 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 ditentukan, setara dengan DRIVING . |
DRIVING |
Mode perjalanan yang sesuai dengan rute mobil (mobil, ...). |
WALKING |
Mode perjalanan yang sesuai dengan rute jalan kaki. |
RouteModifiers
Mengenkapsulasi serangkaian kondisi opsional yang harus dipenuhi saat menghitung rute kendaraan. Hal ini mirip dengan RouteModifiers
di Routes Preferred API Google Maps Platform; lihat: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
Representasi JSON |
---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
Kolom | |
---|---|
avoidTolls |
Menentukan apakah akan menghindari jalan tol jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi jalan tol. Hanya berlaku untuk mode perjalanan bermotor. |
avoidHighways |
Menentukan apakah akan menghindari jalan raya jika memungkinkan. Preferensi akan diberikan ke rute yang tidak berisi jalan raya. Hanya berlaku untuk mode perjalanan bermotor. |
avoidFerries |
Menentukan apakah akan menghindari kapal feri jika wajar. Preferensi akan diberikan untuk rute yang tidak berisi perjalanan dengan kapal feri. Hanya berlaku untuk mode perjalanan bermotor. |
avoidIndoor |
Opsional. Menentukan apakah akan menghindari navigasi di dalam ruangan jika wajar. Preferensi akan diberikan ke rute yang tidak berisi navigasi dalam ruangan. Hanya berlaku untuk mode perjalanan |
UnloadingPolicy
Kebijakan tentang cara kendaraan dapat dibongkar muatannya. Hanya berlaku untuk pengiriman yang memiliki pengambilan dan pengiriman.
Pengiriman lainnya dapat terjadi di mana saja pada rute yang tidak bergantung pada unloadingPolicy
.
Enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Kebijakan pembongkaran yang tidak ditentukan; pengiriman hanya boleh dilakukan setelah pengambilan yang sesuai. |
LAST_IN_FIRST_OUT |
Pengiriman harus dilakukan dalam urutan terbalik dari pengambilan |
FIRST_IN_FIRST_OUT |
Pengiriman harus dilakukan dalam urutan yang sama dengan pengambilan |
LoadLimit
Menentukan batas beban yang berlaku untuk kendaraan, misalnya, "truk ini hanya dapat mengangkut hingga 3.500 kg". Lihat loadLimits
.
Representasi JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Kolom | |
---|---|
softMaxLoad |
Batas ringan dari beban. Lihat |
costPerUnitAboveSoftMax |
Jika beban melebihi |
startLoadInterval |
Interval muatan kendaraan yang dapat diterima di awal rute. |
endLoadInterval |
Interval pemuatan kendaraan yang dapat diterima di akhir rute. |
maxLoad |
Jumlah beban maksimum yang dapat diterima. |
costPerKilometer |
Biaya untuk memindahkan satu unit beban lebih dari satu kilometer untuk kendaraan ini. Hal ini dapat digunakan sebagai proxy untuk konsumsi bahan bakar: jika beban adalah berat (dalam Newton), beban*kilometer memiliki dimensi energi. |
costPerTraveledHour |
Biaya perjalanan dengan unit muatan selama satu jam untuk kendaraan ini. |
Interval
Interval jumlah pemuatan 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, beban maksimum tidak dibatasi oleh pesan ini. Jika keduanya ditentukan, |
LoadCost
Biaya pemindahan satu unit beban selama Transition
. Untuk beban tertentu, biayanya adalah jumlah dari dua bagian:
- min(load,
loadThreshold
) *costPerUnitBelowThreshold
- maks(0, muat -
loadThreshold
) *costPerUnitAboveThreshold
Dengan biaya ini, solusi lebih memilih untuk memenuhi permintaan tinggi terlebih dahulu, atau secara setara memenuhi permintaan tinggi terakhir. Misalnya, jika kendaraan memiliki
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
dan rutenya adalah start,pickup,pickup,delivery,delivery,end dengan transisi:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
maka biaya yang ditimbulkan oleh LoadCost
ini adalah (cost_di bawah * load_ inisiatif * kilometer + biaya_di atas * load_di atas * kms)
- transisi 0: 0,0
- transisi 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transisi 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- transisi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transisi 4: 0,0
Jadi, LoadCost
di sepanjang rute adalah 120,0.
Namun, jika rutenya adalah start,pickup,delivery,pickup,delivery,end dengan transisi:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
maka biaya yang dikeluarkan oleh LoadCost
ini adalah
- transisi 0: 0,0
- transisi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transisi 2: 0,0
- transisi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- transisi 4: 0,0
Di sini, LoadCost
pada rute adalah 40.0.
LoadCost
membuat solusi dengan transisi yang berat menjadi lebih mahal.
Representasi JSON |
---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
Kolom | |
---|---|
loadThreshold |
Jumlah beban yang melebihi biaya pemindahan unit beban yang berubah dari costPerUnitBelowThreshold menjadi costPerUnitAboveThreshold. Harus >= 0. |
costPerUnitBelowThreshold |
Biaya pemindahan satu unit beban, untuk setiap unit antara 0 dan ambang batas. Harus berupa nilai terbatas, dan >= 0. |
costPerUnitAboveThreshold |
Biaya pemindahan unit beban, untuk setiap unit di atas nilai minimum. Dalam kasus khusus, nilai minimum = 0, ini adalah biaya tetap per unit. Harus berupa nilai terbatas, dan >= 0. |
DurationLimit
Batas yang menentukan durasi maksimum rute kendaraan. Bisa keras atau lembut.
Jika kolom batas terbatas ditentukan, nilai minimum minimum dan biaya terkait harus ditentukan bersama.
Representasi JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Kolom | |
---|---|
maxDuration |
Batas ketat yang membatasi durasi agar mencapai maksimum maxDuration. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
softMaxDuration |
Batas sementara tidak menerapkan batas durasi maksimum, tetapi jika dilanggar, rute akan dikenai biaya. Biaya ini menambah biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan, Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
quadraticSoftMaxDuration |
Batas yang dapat dilewati tidak menerapkan batas durasi maksimum, tetapi jika dilanggar akan membuat rute dikenai biaya, kuadrat dalam durasi. Biaya ini ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan,
Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
costPerHourAfterSoftMax |
Biaya per jam yang dikenakan jika nilai minimum
Biaya tidak boleh negatif. |
costPerSquareHourAfterQuadraticSoftMax |
Biaya per jam persegi yang dikenakan jika nilai minimum Biaya tambahannya adalah 0 jika durasi tidak melebihi nilai minimum. Jika tidak, biaya bergantung pada durasi sebagai berikut:
Biaya harus bilangan positif. |
DistanceLimit
Batas yang menentukan jarak maksimum yang dapat ditempuh. Bisa keras atau lembut.
Jika batas lunak ditentukan, softMaxMeters
dan costPerKilometerAboveSoftMax
harus ditentukan dan tidak negatif.
Representasi JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
Kolom | |
---|---|
maxMeters |
Batas ketat yang membatasi jarak untuk mencapai maksimal maxMeters. Batasnya tidak boleh negatif. |
softMaxMeters |
Batas yang dapat dilewati tidak menerapkan batas jarak maksimum, tetapi jika dilanggar akan menghasilkan biaya yang ditambahkan ke biaya lain yang ditentukan dalam model, dengan unit yang sama. Jika ditentukan, softMaxMeters harus kurang dari maxMeters dan tidak boleh bernilai negatif. |
costPerKilometerBelowSoftMax |
Biaya per kilometer yang dikeluarkan, meningkat hingga
Biaya ini tidak didukung di |
costPerKilometerAboveSoftMax |
Biaya per kilometer yang timbul jika jarak di atas batas
Biaya tidak boleh negatif. |
BreakRule
Aturan untuk menghasilkan waktu istirahat untuk kendaraan (misalnya istirahat makan siang). Jeda adalah periode waktu yang berurutan selama kendaraan tetap tidak ada aktivitas di posisinya saat ini dan tidak dapat melakukan kunjungan apa pun. Jeda dapat terjadi:
- selama perjalanan antara dua kunjungan (yang mencakup waktu tepat sebelum atau tepat setelah kunjungan, tetapi tidak di tengah kunjungan), dalam hal ini, waktu transit yang sesuai antara kunjungan akan diperpanjang,
- atau sebelum kendaraan dimulai (kendaraan mungkin tidak dimulai di tengah jeda), dalam hal ini tidak akan memengaruhi waktu mulai kendaraan.
- atau setelah akhir kendaraan (sama dengan, dengan waktu berakhir kendaraan).
Representasi JSON |
---|
{ "breakRequests": [ { object ( |
Kolom | |
---|---|
breakRequests[] |
Urutan jeda. Lihat pesan |
frequencyConstraints[] |
Beberapa |
BreakRequest
Urutan istirahat (yaitu jumlah dan urutannya) yang berlaku untuk setiap kendaraan harus diketahui sebelumnya. BreakRequest
berulang menentukan urutan tersebut, dalam urutan yang harus terjadi. Periode waktunya (earliestStartTime
/ latestStartTime
) mungkin tumpang-tindih, tetapi harus kompatibel dengan pesanan (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 hingga sembilan digit pecahan. Contoh: |
latestStartTime |
Wajib. Batas atas (inklusif) pada awal jeda. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit pecahan. Contoh: |
minDuration |
Wajib. Durasi minimum istirahat. Harus positif. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
FrequencyConstraint
Anda dapat lebih membatasi frekuensi dan durasi jeda yang ditentukan di atas, dengan menerapkan frekuensi jeda minimum, seperti "Harus ada waktu istirahat minimal 1 jam setiap 12 jam". Dengan asumsi bahwa ini dapat ditafsirkan sebagai "Dalam periode waktu geser 12 jam, harus ada setidaknya satu jeda selama minimal satu jam", contoh tersebut akan diterjemahkan menjadi FrequencyConstraint
berikut:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Pengaturan waktu dan durasi jeda dalam solusi akan mengikuti semua batasan tersebut, selain jangka waktu dan durasi minimum yang sudah ditentukan dalam BreakRequest
.
Dalam praktiknya, FrequencyConstraint
mungkin berlaku untuk jeda yang tidak berurutan. Misalnya, jadwal berikut mengikuti contoh "1h setiap 12 jam":
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. Non-negatif. Lihat deskripsi Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
maxInterBreakDuration |
Wajib. Rentang maksimum interval waktu yang diizinkan di rute yang tidak menyertakan setidaknya sebagian jeda Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
DurationDistanceMatrix
Menentukan matriks durasi dan jarak dari lokasi awal kunjungan dan kendaraan ke lokasi akhir kunjungan dan kendaraan.
Representasi JSON |
---|
{
"rows": [
{
object ( |
Kolom | |
---|---|
rows[] |
Menentukan baris matriks durasi dan jarak. Elemennya harus sama banyak dengan |
vehicleStartTag |
Tag yang menentukan kendaraan mana yang menggunakan matriks durasi dan jarak 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 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. Elemennya harus sama banyak dengan Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
meters[] |
Nilai jarak untuk baris tertentu. Jika tidak ada biaya atau batasan yang merujuk pada jarak dalam model, kolom ini dapat dibiarkan kosong; jika tidak, kolom ini harus memiliki elemen sebanyak |
TransitionAttributes
Menentukan atribut transisi antara dua kunjungan berturut-turut pada rute. Beberapa TransitionAttributes
mungkin berlaku untuk transisi yang sama: dalam hal ini, semua biaya tambahan akan bertambah dan batasan atau batas yang paling ketat 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) yang akan diterapkan 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. Nilai ini dalam unit yang sama dengan semua biaya lain dalam model dan tidak boleh negatif. Tarif ini berlaku di atas semua biaya lain yang ada. |
costPerKilometer |
Menentukan biaya per kilometer yang diterapkan ke jarak yang ditempuh saat melakukan transisi ini. Total ini menambahkan hingga |
distanceLimit |
Menentukan batas jarak yang ditempuh saat melakukan transisi ini. Mulai 06/2021, hanya batas lunak 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, yang diakhiri dengan ' |
ShipmentTypeIncompatibility
Menentukan ketidakcocokan antara pengiriman, bergantung pada shipmentType-nya. Tampilan 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 yang diterapkan pada inkompatibilitas. |
IncompatibilityMode
Mode yang menentukan cara 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 pernah dapat menggunakan kendaraan yang sama. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Untuk dua pengiriman dengan jenis yang tidak kompatibel dengan mode inkompatibilitas
|
ShipmentTypeRequirement
Menentukan persyaratan antara pengiriman berdasarkan shipmentType-nya. Detail persyaratan ditentukan oleh mode persyaratan.
Representasi JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Kolom | |
---|---|
requiredShipmentTypeAlternatives[] |
Daftar jenis pengiriman alternatif yang diperlukan oleh |
dependentShipmentTypes[] |
Semua pengiriman dengan jenis di kolom CATATAN: Rantai persyaratan sehingga |
requirementMode |
Mode diterapkan ke persyaratan. |
RequirementMode
Mode yang menentukan tampilan pengiriman dependen di 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 menggunakan kendaraan yang sama minimal dengan satu pengiriman yang "wajib". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Dengan mode Oleh karena itu, pengambilan pengiriman "dependen" harus memiliki:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Sama seperti sebelumnya, kecuali pengiriman "tergantung" harus memiliki pengiriman "wajib" di kendaraannya pada saat pengiriman. |
PrecedenceRule
Aturan prioritas antara dua peristiwa (setiap peristiwa adalah pengambilan atau pengiriman pengiriman): peristiwa "kedua" harus dimulai setidaknya offsetDuration
setelah peristiwa "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 diabaikan.
Representasi JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Kolom | |
---|---|
firstIsDelivery |
Menunjukkan apakah peristiwa "pertama" adalah penayangan. |
secondIsDelivery |
Menunjukkan apakah peristiwa "kedua" adalah penayangan. |
offsetDuration |
Offset antara peristiwa "pertama" dan "kedua". Nilainya dapat negatif. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
firstIndex |
Indeks pengiriman dari peristiwa "pertama". Kolom ini harus ditentukan. |
secondIndex |
Indeks pengiriman dari peristiwa "kedua". Kolom ini harus ditentukan. |