Bu örnekte, yakınlardaki teslim alma ve teslimatların aynı araç tarafından tek bir zaman diliminde gerçekleştirildiği rotalara öncelik vermek için geçiş özelliklerinin nasıl kullanılacağı gösterilmektedir. Geçiş özellikleri hakkında daha fazla bilgi edinmek için Geçiş Özellikleriyle İş Mantığını Modelleme başlıklı makaleyi inceleyin.
Bu örnekte:
- A, B ve C gönderilerinin teslimatları aynı yol üzerinde birbirine yakındır.
- Ek teslimatlar daha sonra yapılacaktır.
- Teslimatların belirli bir teslimat süresi yoktur.
- Ziyaret planından bağımsız olarak, aracın bu yoldan iki kez geçmesi gerekir: bir kez sabah depodan çıkarken ve bir kez akşam geri dönerken.
- A, B ve C'nin ne zaman gerçekleştirildiğine bakılmaksızın rotanın toplam seyahat mesafesi ve süresi her zaman aynıdır.

Bu durumda ve yalnızca saat başına maliyet ile kilometre başına maliyet kullanan bir istek için optimize edilmiş rota, sabah saatlerinde A ve B'yi, akşam saatlerinde ise C'yi işleyebilir. Çözümün maliyeti, üçünün de aynı anda işlenmesiyle aynı olur.
Eşik değerine sahip kilometre başına maliyet
Yakındaki ziyaretleri gruplandırmak için önce bir eşik mesafe seçmeniz gerekir. Bu, yakın olduğunu düşündüğünüz iki ziyaret arasındaki maksimum mesafedir. Bu örnekte, kentsel bir bölgedeki yaklaşık bir bloğa karşılık gelen 100 metrelik bir eşik kullanılmıştır. Eşiği, işletmenizin ihtiyaçlarına ve sürücülerinizin tercihlerine göre artırabilir veya azaltabilirsiniz.
Birbirine 100 metre mesafedeki yakın ziyaretleri gruplandırmak için her geçişin ilk 100 metresine yüksek bir maliyet, geçişin sonraki her metresine ise daha düşük bir maliyet belirlersiniz. İlk 100 metre en pahalı kısım olduğundan, optimize edici, rotanın toplam uzunluğunu uzatmak anlamına gelse bile 100 metrelik eşikten daha kısa geçişler kullanarak en büyük tasarrufu sağlar.
Maliyetleri ayarlamak için ShipmentModel.transition_attributes dosyasına aşağıdaki özelliklere sahip yeni bir giriş eklersiniz:
- Olası tüm geçişleri eşleştirmek için modelde kullanılmayan bir etiket seçin (ör.
UNUSED_TAG). Bu etiketeTransitionAttributes.excluded_src_tagveTransitionAttributes.excluded_dst_tagdeğerlerini ayarlayın. - Eşik mesafesi ve maliyetlerle
TransitionAttributes.distance_limitayarlarını yapın:DistanceLimit.soft_max_metersdeğerini seçilen eşiğe ayarlayın.DistanceLimit.cost_per_kilometer_below_soft_maxdeğerini, eşiğin altındaki kilometre başına maliyet olarak ayarlayın.DistanceLimit.cost_per_kilometer_above_soft_maxdeğerini, eşik değerin üzerindeki kilometre başına maliyet olarak ayarlayın.
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG",
"excluded_src_tag": "UNUSED_TAG",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
Olası tüm geçişleri eşleştirmek için #unused_tag# etiketi hiçbir gönderi veya araç tarafından kullanılmamalıdır. Daha fazla bilgi için Tüm ziyaret isteklerini eşleştirme başlıklı makaleyi inceleyin.
Eşiğin altındaki yüksek maliyetin işleyiş şekli
Bu bölümde, eşiğin altındaki ve üstündeki maliyetin, örnek senaryodaki farklı çözümlerin genel maliyetini nasıl etkilediği gösterilmektedir.
1. çözüm: Giderken A ve B'yi, dönerken C'yi yapın
Bu çözümde gönderiler, bu yolun iki geçişine bölünür. Bunlardan ikisi ilk geçişte, kalan biri ise ikinci geçişte yayınlanır. 5 geçiş vardır:
| Geçiş | Mesafe | Eşiğin altında | Eşiğin üzerinde olanlar | ||
|---|---|---|---|---|---|
| Mesafe | Maliyet | Mesafe | Maliyet | ||
| depot →A | 1.000 m | 100 m | 5 | 900 m | 0,9 |
| A→B | 50 m | 50 m | 2.5 | 0 m | 0 |
| B→diğer | 1.030 m | 100 m | 5 | 930 m | 0,93 |
| other→C | 1.000 m | 100 m | 5 | 900 m | 0,9 |
| C→depot | 1.080 m | 100 m | 5 | 980 m | 0,98 |
| Toplam | 450 m | 22,5 | 3.710 m | 3,71 | |
Genel maliyet, kilometre başına iki maliyetin toplamı olarak hesaplanır:
- Eşik altındaki kilometre başına maliyet (50) ile eşik altında katedilen toplam mesafenin (450 m = 0,45 km) çarpımı,
- Eşik değerin üzerindeki kilometre başına maliyet (1) ile eşik değerin üzerindeki toplam kat edilen mesafenin (3.710 m = 3,71 km) çarpımı.
Bu nedenle toplam maliyet 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21 olur.
2. çözüm: Giderken A, B, C işlemlerini yapın, dönüşte hiçbir şey yapmayın
Bu çözümde, 1. çözümden farklı olarak üç gönderi de yolun bir geçişi sırasında "grup olarak" teslim edilir. Diğer geçişte ise araç hiç durmaz. Yine 5 geçiş var ancak uzunlukları ve kompozisyonları farklı:
| Geçiş | Mesafe | Eşiğin altında | Eşiğin üzerinde olanlar | ||
|---|---|---|---|---|---|
| Mesafe | Maliyet | Mesafe | Maliyet | ||
| depot →A | 1.000 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→diğer | 1.000 m | 100 m | 5 | 900 m | 0,9 |
| other→depot | 2080 m | 100 m | 5 | 1.980 m | 1,98 |
| Toplam | 380 m | 19 | 3.780 m | 3,78 | |
1. çözümdeki hesaplamayı kullandığımızda toplam maliyet 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78 olur. Tüm ziyaretleri tek bir zaman diliminde gerçekleştirmenin maliyeti, iki grup halinde gerçekleştirmekten daha düşüktür. DistanceLimit.cost_per_kilometer_below_soft_max değerini artırarak bu etkiyi güçlendirebilirsiniz.
Eşiğin altındaki düşük kilometre başına maliyet neden işe yaramaz?
Uzun geçişler yerine kısa geçişleri tercih etmek istediğiniz için uzun geçişlere yüksek kilometre başına maliyet, kısa geçişlere ise düşük kilometre başına maliyet vermek isteyebilirsiniz. Ancak bu durum aslında ters bir etkiye sahiptir: Geçişin ilk 100 metresi en ucuz olduğu için optimize edici, bu "ucuz" metreleri en etkili şekilde kullanmak için 100 metreye yakın veya 100 metrenin üzerinde geçişleri tercih eder.
Bu etkiyi iki örnek çözümde görebilirsiniz. Eşik değerinin altındaki ve üstündeki kilometre başına maliyeti değiştirirseniz rota maliyetleri değişir:
| Eşiğin üzerinde yüksek maliyet | Eşiğin altında yüksek maliyet | |||
|---|---|---|---|---|
| 1. çözüm | 2. çözüm | 1. çözüm | 2. çözüm | |
| Eşiğin altındaki KM'ler | 0,45 | 0,38 | 0,45 | 0,38 |
| KM başına maliyet eşiğin altında | 1,00 | 1,00 | 50,00 | 50,00 |
| Eşiğin üzerindeki kilometre sayısı | 3,71 | 3,78 | 3,71 | 3,78 |
| Eşiğin üzerindeki kilometre başına maliyet | 50,00 | % | 1,00 | 1,00 |
| Toplam maliyet | 185,95 | 189,38 | 26,21 | 22,78 |
Her sürüm için iki çözümün toplam maliyetlerinden daha düşük olanı kalın harflerle vurgulanmıştır. Eşik değerinin üzerinde yüksek bir maliyet kullandığınızda, ziyaretlerin gruplandırıldığı rotanın toplam maliyetinin daha yüksek olduğunu görebilirsiniz. Bu, elde etmek istediğiniz sonucun tam tersidir.