Memprioritaskan kunjungan di sekitar dengan atribut transisi

Contoh ini menunjukkan cara menggunakan atribut transisi untuk memprioritaskan rute yang penjemputan dan pengiriman terdekatnya dilakukan oleh kendaraan yang sama dalam satu blok waktu. Untuk mempelajari atribut transisi lebih lanjut, lihat Memodelkan Logika Bisnis dengan Atribut Transisi.

Dalam contoh ini:

  • Pengiriman paket A, B, dan C saling berdekatan di jalan yang sama.
  • Pengiriman tambahan berada lebih jauh di jalan.
  • Pengiriman tidak memiliki waktu pengiriman yang ditentukan.
  • Terlepas dari jadwal kunjungan, kendaraan harus melewati jalan ini dua kali: sekali pada pagi hari dalam perjalanan dari depot, dan sekali pada malam hari dalam perjalanan kembali.
  • Jarak dan durasi perjalanan rute secara keseluruhan selalu sama, terlepas dari kapan A, B, dan C dilakukan.

Contoh dengan pengiriman paket di jalan yang sama. Ada tiga pengiriman A, B, dan C di jalan dari depot menuju pengiriman lainnya. A berjarak
1.000 m dari depot, B berjarak 50 meter lebih jauh dari depot, dan C berjarak 30
meter lebih jauh ke arah yang sama. Ada pengiriman lain yang berjarak 1000 m dari
C.

Dalam situasi ini, dan untuk permintaan yang hanya menggunakan biaya per jam dan biaya per kilometer, rute yang dioptimalkan dapat menangani A dan B pada pagi hari serta C pada malam hari, dan biaya solusinya akan sama seperti jika ketiganya ditangani pada waktu yang sama.

Biaya per kilometer dengan nilai minimum

Untuk mengelompokkan kunjungan terdekat, Anda harus memilih jarak nilai minimum terlebih dahulu. Ini adalah jarak maksimum antara dua kunjungan yang Anda anggap berdekatan. Contoh ini menggunakan nilai minimum 100 meter yang kira-kira sesuai dengan satu blok di area perkotaan. Anda dapat menambah atau mengurangi nilai minimum agar sesuai dengan kebutuhan bisnis dan preferensi pengemudi.

Untuk mengelompokkan kunjungan terdekat dalam jarak 100 meter satu sama lain, Anda menetapkan biaya tinggi pada 100 meter pertama setiap transisi dan biaya yang lebih rendah untuk meter tambahan transisi. Karena 100 meter pertama adalah yang paling mahal, pengoptimal membuat penghematan terbesar dengan menggunakan transisi yang lebih pendek dari nilai minimum 100 meter, meskipun berarti memperpanjang panjang rute secara keseluruhan.

Untuk menyiapkan biaya, Anda menambahkan entri baru ke ShipmentModel.transition_attributes dengan properti berikut:

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

Tag #unused_tag# tidak boleh digunakan oleh pengiriman atau kendaraan mana pun untuk mencocokkan semua kemungkinan transisi. Untuk mengetahui informasi selengkapnya, lihat Cara mencocokkan semua permintaan kunjungan.

Cara kerja biaya tinggi di bawah nilai minimum

Bagian ini menunjukkan pengaruh biaya di bawah dan di atas nilai minimum terhadap biaya keseluruhan dari berbagai solusi skenario contoh.

Solusi 1: Lakukan A, B dalam perjalanan ke sana, C dalam perjalanan kembali

Dalam solusi ini, pengiriman dibagi menjadi dua perjalanan jalan ini. Dua di antaranya dikirimkan pada perjalanan pertama, dan satu sisanya dikirimkan pada perjalanan kedua. Ada 5 transisi:

Transisi Jarak Di bawah nilai minimum Di atas nilai minimum
Jarak Biaya Jarak Biaya
depot →A 1000 m 100 m 5 900 m 0,9
A→B 50 m 50 m 2,5 0 m 0
B→other 1030 m 100 m 5 930 m 0,93
other→C 1000 m 100 m 5 900 m 0,9
C→depot 1080 m 100 m 5 980 m 0,98
Total 450 m 22,5 3710 m 3,71

Biaya keseluruhan dihitung sebagai jumlah dari dua biaya per kilometer:

  • biaya per kilometer di bawah nilai minimum (50) dikalikan dengan total jarak tempuh di bawah nilai minimum (450 m = 0,45 km),
  • biaya per kilometer di atas nilai minimum (1) dikalikan dengan total jarak tempuh di atas nilai minimum (3710 m = 3,71 km).

Dengan demikian, biaya keseluruhan adalah 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21.

Solusi 2: Lakukan A, B, C dalam perjalanan ke sana, tidak ada dalam perjalanan kembali

Dalam solusi ini, tidak seperti solusi 1, ketiga pengiriman dikirimkan "sebagai grup" selama satu perjalanan jalan. Pada perjalanan lainnya, kendaraan tidak berhenti sama sekali. Sekali lagi, ada 5 transisi, tetapi panjang dan komposisinya berbeda:

Transisi Jarak Di bawah nilai minimum Di atas nilai minimum
Jarak Biaya Jarak Biaya
depot →A 1000 m 100 m 5 900 m 0,9
A→B 50 m 50 m 2,5 0 m 0
B→C 30 m 30 m 1,5 0 m 0
C→other 1000 m 100 m 5 900 m 0,9
other→depot 2080 m 100 m 5 1980 m 1,98
Total 380 m 19 3780 m 3,78

Dengan menggunakan perhitungan yang sama seperti pada solusi 1, biaya keseluruhan adalah 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78, dan melakukan semua kunjungan dalam satu blok waktu memiliki biaya yang lebih rendah daripada melakukannya dalam dua grup. Anda dapat memperkuat efek ini dengan meningkatkan DistanceLimit.cost_per_kilometer_below_soft_max.

Alasan biaya per kilometer yang rendah di bawah nilai minimum tidak berfungsi

Karena Anda ingin lebih memilih transisi pendek daripada transisi panjang, Anda mungkin tergoda untuk memberikan biaya per kilometer yang tinggi untuk transisi panjang, dan mempertahankan biaya per kilometer yang rendah untuk transisi pendek. Namun, hal ini sebenarnya memiliki efek terbalik: karena 100 meter pertama transisi adalah yang termurah, pengoptimal menggunakan meter "murah" ini untuk efek terbesar dengan lebih memilih transisi yang memiliki jarak mendekati atau lebih dari 100 meter.

Anda dapat melihat efek ini pada dua solusi contoh. Jika Anda menukar biaya per kilometer di bawah dan di atas nilai minimum, biaya rute akan berubah:

Biaya tinggi di atas nilai minimum Biaya tinggi di bawah nilai minimum
Solusi 1 Solusi 2 Solusi 1 Solusi 2
KM di bawah nilai minimum 0,45 0,38 0,45 0,38
Biaya per KM di bawah nilai minimum 1,00 1,00 50,00 50,00
KM di atas nilai minimum 3,71 3,78 3,71 3,78
Biaya per KM di atas nilai minimum 50,00 50,00 1,00 1,00
Biaya total 185,95 189,38 26,21 22,78

Untuk setiap versi, biaya total yang lebih rendah dari kedua solusi akan ditandai dengan huruf tebal. Anda dapat melihat bahwa saat menggunakan biaya tinggi di atas nilai minimum, biaya total rute kini lebih tinggi untuk rute tempat kunjungan dikelompokkan, yang merupakan kebalikan dari yang ingin Anda capai.