Bu örnekte, geçiş özelliklerinin, yakındaki teslim alma ve teslimat işlemlerinin aynı araçla tek bir zaman aralığında yapıldığı rotalara öncelik vermek için nasıl kullanılacağı gösterilmektedir. Geçiş özellikleri hakkında daha fazla bilgi edinmek için Model Business Logic with Transition Attributes başlıklı makaleyi inceleyin.
Bu örnekte:
- A, B ve C gönderilerinin teslimat adresleri aynı yol üzerinde birbirine yakın.
- Ek teslimatlar daha sonraki bir tarihte yapılacaktır.
- Teslimatlar için belirtilen teslimat süresi yoktur.
- Ziyaret programından bağımsız olarak, aracın bu yolda iki kez sürülmesi gerekir: bir kez sabah depodan çıkarken, bir kez de akşam dönüş yolunda.
- A, B ve C ne zaman gerçekleştirilirse gerçekleştirilsin, 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 maliyetin kullanıldığı bir istek için, optimize edilmiş rotada A ve B sabah, C ise akşam işlenebilir. Çözümün maliyeti, üçünün de aynı anda işlenmesi durumundaki maliyetle aynı olur.
Eşikli kilometre başına maliyet
Yakındaki ziyaretleri gruplandırmak için önce bir eşik mesafesi seçmeniz gerekir. Bu, yakında olduğunu düşündüğünüz iki ziyaret arasındaki maksimum mesafedir. Bu örnekte, kentsel alandaki bir bloğa yaklaşık olarak karşılık gelen 100 metrelik bir eşik kullanılmaktadır. Eşiği, işletmenizin ihtiyaçlarına ve sürücülerinizin tercihlerine göre artırabilir veya azaltabilirsiniz.
Yakındaki ziyaretleri birbirine 100 metre mesafede olacak şekilde gruplandırmak için her geçişin ilk 100 metresine yüksek bir maliyet, geçişin ek metrelerine ise daha düşük bir maliyet belirlersiniz. İlk 100 metre en maliyetli kısım olduğundan, rota uzunluğu artsa bile 100 metrelik eşiğin altında geçişler kullanılarak en büyük tasarruf sağlanır.
Maliyetleri ayarlamak için ShipmentModel.transition_attributes öğesine aşağıdaki özelliklerle yeni bir giriş eklersiniz:
- Olası tüm geçişleri eşleştirmek için modelin hiçbir yerinde kullanılmayan bir etiket seçin (ör.
UNUSED_TAG).TransitionAttributes.excluded_src_tagveTransitionAttributes.excluded_dst_tagdeğerlerini bu etikete ayarlayın. TransitionAttributes.distance_limitcihazını eşik mesafesi ve maliyetleriyle birlikte ayarlayın:DistanceLimit.soft_max_metersdeğerini seçili 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şiğin ü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,
}
}
]
}
}
Etiket #unused_tag#, olası tüm geçişlere uyacak şekilde hiçbir gönderi veya araç tarafından kullanılmamalıdır. Daha fazla bilgi için Tüm ziyaret istekleri nasıl eşleştirilir? 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 senaryonun farklı çözümlerinin genel maliyetini nasıl etkilediği gösterilmektedir.
1. çözüm: Giderken A ve B'yi, dönerken C'yi gerçekleştirin
Bu çözümde gönderiler, bu yolun iki geçişine bölünür. Bunlardan ikisi ilk geçişte, kalanı ise ikinci geçişte teslim edilir. 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 dk. | 0 |
| B→other | 1.030 m | 100 m | 5 | 930 m | 0,93 |
| diğer→C | 1.000 m | 100 m | 5 | 900 m | 0,9 |
| C→depot | 1080 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ındaki toplam kat edilen mesafenin (450 m = 0,45 km) çarpımı,
- Eşiğin üzerindeki kilometre başına maliyet (1) ile eşiğin üzerindeki toplam mesafe (3710 m = 3,71 km) çarpılır.
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önerken hiçbir işlem yapmayın
Bu çözümde, 1. çözümden farklı olarak, üç gönderimin tamamı yolun bir geçişi sırasında "grup olarak" teslim edilir. Diğer geçişte ise araç hiç durmuyor. Yine 5 geçiş vardır ancak uzunlukları ve kompozisyonları farklıdı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 dk. | 0 |
| B→C | 30 dk. | 30 dk. | 1,5 | 0 dk. | 0 |
| C→other | 1.000 m | 100 m | 5 | 900 m | 0,9 |
| other→depot | 2.080 m | 100 m | 5 | 1.980 m | 1,98 |
| Toplam | 380 m | 19 | 3.780 m | 3,78 | |
1. çözümdekiyle aynı hesaplama kullanıldığında toplam maliyet 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78 olur. Tüm ziyaretleri tek bir zaman aralığında gerçekleştirmek, iki grupta gerçekleştirmekten daha düşük maliyetlidir. DistanceLimit.cost_per_kilometer_below_soft_max değerini artırarak bu efekti güçlendirebilirsiniz.
Neden eşiğin altındaki düşük kilometre başına maliyet 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 bir kilometre başı maliyet atayıp kısa geçişlerde düşük kilometre başı maliyeti korumak isteyebilirsiniz. Ancak bu durum aslında ters etki yaratır: Geçişin ilk 100 metresi en ucuz olduğu için optimizasyon aracı, 100 metreye yakın veya 100 metreden uzun geçişleri tercih ederek bu "ucuz" metreyi en etkili şekilde kullanır.
Bu etkiyi iki örnek çözümde görebilirsiniz. Kilometre başına maliyeti eşiğin altında ve üstünde değiştirirseniz rota maliyetleri değişir:
| Eşiğin üzerinde yüksek maliyet | Eşiğin altındaki yüksek maliyet | |||
|---|---|---|---|---|
| 1. çözüm | 2. çözüm | 1. çözüm | 2. çözüm | |
| Eşiğin altındaki KMs | 0,45 | 0,38 | 0,45 | 0,38 |
| Eşiğin altında KM başına maliyet | 1,00 | 1,00 | 50,00 | 50,00 |
| Eşiğin üzerindeki KM'ler | 3,71 | 3,78 | 3,71 | 3,78 |
| Eşiğin üzerindeki KM başına maliyet | 50,00 | 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 düşük olanı kalın harflerle vurgulanır. Eşiğin üzerinde yüksek bir maliyet kullandığınızda, ziyaretlerin gruplandırıldığı rotanın toplam maliyetinin artık daha yüksek olduğunu görebilirsiniz. Bu, elde etmek istediğinizin tam tersidir.