Biaya pemuatan

Biaya muatan ditentukan dalam properti `loadLimits` dari `Vehicle` di bagian `ShipmentModel`.

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: 50
Pengiriman 2: 10
Pengiriman 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 costPerUnitAboveThreshold dari 1 menjadi 5. 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