Biaya muatan menentukan biaya atau penalti yang ditanggung kendaraan berdasarkan muatan yang dibawanya antara pengambilan dan pengiriman barang. Anda dapat mengonfigurasi biaya ini berdasarkan jarak perjalanan dengan costPerKilometer, durasi perjalanan dengan costPerTraveledHour, atau menggunakan keduanya secara bersamaan.
Konfigurasi biaya pemuatan untuk mendukung tujuan seperti berikut:
- Perhitungkan biaya bahan bakar yang meningkat seiring dengan berat kargo.
- Hindari merutekan kendaraan yang sangat berat untuk menempuh jarak jauh.
- Perhitungkan keausan kendaraan akibat kargo berat.
Properti
Tentukan biaya pemuatan dalam properti loadLimits dari Vehicle.
Seperti semua parameter biaya lainnya, biaya pemuatan menggunakan unit biaya relatif tanpa dimensi.
Anda dapat menentukan biaya pemuatan menggunakan properti berikut:
| Properti | Jenis | Deskripsi |
|---|---|---|
costPerKilometer |
Objek | Berisi jenis objek LoadCost untuk menghitung biaya perjalanan berdasarkan kilometer yang ditempuh. |
costPerTraveledHour |
Objek | Berisi jenis objek LoadCost untuk menghitung biaya perjalanan berdasarkan jam perjalanan, tidak termasuk waktu menunggu, berkunjung, dan istirahat. |
LoadCost
Jenis pesan LoadCost menentukan biaya perjalanan untuk membawa muatan tertentu. Dengan fitur ini, Anda dapat menetapkan batas beban, lalu menentukan tarif biaya yang berbeda per unit beban di bawah dan di atas batas tersebut.
Objek LoadCost berisi parameter konfigurasi berikut:
| Parameter | Jenis | Deskripsi |
|---|---|---|
loadThreshold |
string (format int64) | Tingkat beban saat tarif perhitungan biaya berubah. Default-nya adalah 0. |
costPerUnitAboveThreshold |
Angka | Biaya yang diterapkan pada setiap unit beban di atas loadThreshold. Jumlah defaultnya adalah 0 |
costPerUnitBelowThreshold |
Angka | Biaya yang diterapkan pada setiap unit beban yang lebih rendah atau sama dengan loadThreshold. Jumlah defaultnya adalah 0 |
Mencocokkan biaya pemuatan dengan pengiriman
Biaya muatan berlaku jika muatan yang dibawa kendaraan cocok dengan loadDemands
jenis pengiriman di rutenya. Jenis muatan adalah string arbitrer, seperti
berat atau volume. Untuk mengetahui detail selengkapnya tentang cara mengonfigurasi jenis beban, lihat Jenis
beban.
Contoh
Bagian ini mencakup tiga jenis contoh:
- Contoh kode yang mengilustrasikan struktur biaya pemuatan.
- Contoh skenario yang menunjukkan salah satu cara menggunakan biaya pemuatan untuk mencapai tujuan bisnis.
- Contoh permintaan yang menyertakan nilai yang ditetapkan dalam skenario contoh.
Contoh kode
Contoh berikut menunjukkan cara menyusun biaya pemuatan dengan semua parameter konfigurasi yang tersedia. Contoh ini menggunakan costPerKilometer, tetapi Anda dapat
menggantinya dengan costPerTraveledHour untuk menghitung biaya berdasarkan durasi
perjalanan, bukan jarak.
{
"model": {
"vehicles": [{
"loadLimits": {
"LOAD_TYPE": {
"maxLoad": "MAX_LOAD",
"costPerKilometer": {
"loadThreshold": "LOAD_THRESHOLD",
"costPerUnitAboveThreshold": COST_ABOVE,
"costPerUnitBelowThreshold": COST_BELOW
}
}
}
}]
}
}
Contoh skenario
Bagian ini menjelaskan skenario saat Anda ingin mengoptimalkan konsumsi bahan bakar, dan bahan bakar yang dikonsumsi sebanding dengan jarak dan berat kargo. Karena kendaraan mengonsumsi lebih banyak bahan bakar saat membawa muatan yang lebih berat, Anda harus merencanakan rute yang mengantarkan paket yang lebih berat terlebih dahulu.
Untuk menyiapkan perilaku ini, Anda dapat mengonfigurasi permintaan untuk memberikan penalti pada kendaraan yang menempuh jarak jauh dengan muatan berat. Untuk contoh ini, gunakan nilai properti berikut dalam permintaan Anda:
| Orang tua | Properti | Jenis | Nilai | Skenario |
|---|---|---|---|---|
loadLimits |
jenis beban | string | weightKg |
Mendefinisikan jenis kapasitas yang akan dilacak. Contoh ini menggunakan weightKg untuk menampilkan berat kargo dalam kilogram. |
loadLimits |
maxLoad |
string | 100 |
Bobot kargo maksimum yang dapat dibawa kendaraan. |
costPerKilometer |
loadThreshold |
string | 15 |
Menetapkan batas beban dasar. Setiap berat kargo di atas 15 kg akan dikenai penalti biaya bahan bakar berbasis muatan. |
costPerKilometer |
costPerUnitAboveThreshold |
angka | 1 |
Bertindak sebagai koefisien biaya bahan bakar Anda. Untuk setiap kilometer yang ditempuh, setiap kilogram kargo di atas batas 15 kg dikenai biaya 1 unit. |
loadDemands |
amount |
string | Pengiriman 1: 50Pengiriman 2: 10Pengiriman 3: 80 |
Menentukan berat kargo untuk setiap tiga pengiriman Anda. |
Dalam skenario ini, nilai yang Anda konfigurasi memiliki efek berikut:
- Pengoptimal mengatur rute Anda untuk mengirimkan paket terberat terlebih dahulu. Solver menjadwalkan pengiriman 80 kg dan 50 kg di awal rute untuk meminimalkan jarak yang ditempuh saat membawa muatan berat.
- Pengoptimal mengatur rute Anda untuk meminimalkan jarak yang ditempuh dengan kargo berat. Untuk melihat pengaruh setelan ini terhadap rute Anda, Anda dapat
meningkatkan
costPerUnitAboveThresholddari1menjadi5. Dengan membuat penalti bobot lebih tinggi, Anda akan mendorong pengoptimal untuk bekerja lebih keras lagi dalam meminimalkan jarak yang ditempuh dengan kargo yang lebih berat, yang dapat mengatur ulang urutan pengantaran atau membagi pengiriman ke beberapa kendaraan.
Contoh permintaan
Contoh berikut menunjukkan struktur permintaan optimizeTours dasar yang menggabungkan nilai biaya pemuatan dari contoh skenario:
{ "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } }
Rumus penghitungan
Pengoptimal menghitung biaya pemuatan menggunakan formula berikut.
Penghitungan nilai minimum penuh
Jika Anda menentukan costPerUnitAboveThreshold dan
costPerUnitBelowThreshold, Anda akan dikenai biaya perjalanan terpisah untuk jumlah
pemuatan di atas dan di bawah loadThreshold. Rumusnya adalah:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
+ min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold
Misalnya, menggunakan nilai dari Contoh permintaan, dengan nilai
costPerUnitBelowThreshold adalah 2, jika kendaraan menempuh jarak 10 kilometer
dengan membawa muatan 50, perhitungannya adalah:
max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units
Penghitungan di atas nilai minimum
Jika Anda hanya menentukan costPerUnitAboveThreshold, perhitungannya adalah
kasus khusus dari formula nilai minimum penuh. Karena biaya di bawah nilai minimum adalah nol, paruh kedua dari rumus lengkap bernilai nol. Rumusnya adalah:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
Misalnya, menggunakan nilai dari Contoh permintaan dengan
loadThreshold adalah 15 dan costPerUnitAboveThreshold adalah 1, jika
kendaraan menempuh jarak 10 kilometer dengan membawa muatan 50, perhitungannya adalah:
max(50 - 15, 0) * 10 * 1 = 350 cost units
Penghitungan di bawah nilai minimum
Secara simetris, jika Anda hanya menentukan costPerUnitBelowThreshold, perhitungan
adalah kasus khusus lain dari formula nilai minimum penuh dengan biaya
di atas nilai minimum adalah nol. Rumusnya adalah:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold