Olası lojistik senaryolar
- Bir depodan teslimat
- Gönderilerin depoya toplanması
- Rotayı rastgele bir noktada başlatma veya bitirme
- Pickup & delivery: gönderinin rastgele noktalardan teslim alınması ve teslim edilmesi
- Birkaç deponun birinden teslimat
- Birden fazla deposu olan rotalar
- Uygun lokasyonlardan birine teslimat
- Gönderinin olası konumlardan birinde teslim alınması
- Bir kurye için depodan birden fazla sefer planlamak
- Çapraz yükleme
- Rotanın yürüyüş kısmından önce araç park yeri ile teslimat
- Treyler kullanımı
Tüm lojistik senaryoları için depoları, siparişleri ve kuryeleri belirttiğinizden emin olun. Veri seti, kuryelerin ve siparişlerin bileşimine bağlıdır. Bağımsız parçalara ayrılabiliyorlarsa (bir grup sipariş yalnızca belirli araçlar tarafından yerine getiriliyorsa ve karıştırma yapılmıyorsa), her biri kendi sipariş ve kurye karışımına sahip birkaç ayrı planlama çalışması yapmanızı öneririz. Örneğin, bu gibi durumlarda:
-
Birkaç depo, her depo farklı bir dizi siparişi sevk ediliyor ve her depoya kendi nakliye araçları hizmet veriyor.
-
Depodan sevkiyat ve gönderilerin depoya toplanması farklı araçlar grubu tarafından yapılıyor (ve bunlar farklı bağımsız siparişlerdir).
-
Bir deponun, her biri farklı araçlar grubu tarafından hizmet verilen çeşitli coğrafi bölgeleri bulunur.
Aşağıda açıklanan lojistik senaryolar birbirleriyle birleştirilebilir. Verilen örneklerde iş görevlerinize benzer bir şey yoksa, RouteQ ekibinden müşteri temsilcinize veya teknik desteğe routing-support@yandex-team.ru başvurun.
Bir depodan teslimat
Bu, malların müşterilere teslimatını planlamanız veya belirli bir konum kümesini ziyaret etmek için bir rota oluşturmanız gerektiğinde varsayılan senaryodur. Sorguda sadece bir depo olduğunda ve siparişler için location
alanında delivery
tipi belirtildiğinde veya bu alan boş bırakıldığında kullanılır (bkz. Sipariş türü). Algoritma, belirtilen depodan tüm siparişleri teslim etmek için bir rota oluşturacaktır.
Şema
Örnek
Bu çözümde 30 sipariş bulunmaktadır. Hepsi aynı depodan teslim edilmektedir. type
Sipariş türü açıkça etiketlenmemiştir, bu nedenle varsayılan olarak delivery
değerini alıyor.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Gönderilerin depoya toplanması
Bu, gönderiler depoya teslim edilmek üzere müşterilerden toplandığında varsayılan senaryodur. Bu tür gönderi örneğin şunlar olabilir:
-
evde yapılan tıbbi testler;
-
kuru temizleme için kıyafetler;
-
müşterilerden depoya iadeler.
İkinci durumda, bu senaryo genellikle tek depodan teslimat ile birlikte kullanılır.
Depoya gönderilerin toplanması noktalarını belirlemek için sipariş türünü type = pickup
belirtmelisiniz (bkz. Sipariş türü). Devamında aşağıdaki seçenekler olasıdır:
-
Tüm kuryeler gün sonunda depoya dönmelidir (bkz. Gün sonunda depoya dönüş), bu nedenle
return_to_depot
=true
seçeneği. Bu durumda, ek bir şey yapılandırmanıza gerek yoktur, kurye rotayı varsayılan olarak depoda tamamlar. -
Gönderi kuryenin aracında kalmalı ve sabah kurye bir sonraki vardiya için geldiğinde depoya geri dönmelidir. Bunu yapmak için
return_to_depot
=false
olarak ayarlanmalıdır. Rota son noktadapickup
sona erecektir. Ayrıca, hiçbir şeyin ek olarak yapılandırılması gerekmez. -
Tüm kuryeler gün sonunda depoya dönmez, algoritma hangilerinin dönmesi gerektiğini seçecektir. Kurye için
return_to_depot
=false
alanı kullanılır ve gel-al siparişleri için mevcut rotadaki depoya zorunlu teslimatpickup_must_reach_depot
=true
belirtiliyor veyadelivery_deadline
– siparişin depoya teslim zamanı yapılandırılıyor.Eğer sipariş bir depoya bağlıysa, yani
depot_id
alanında bir veya daha fazla depo tanımlayıcısı belirtilmişse, gel-al siparişipickup_must_reach_depot
alanının değerine bakılmaksızın mevcut rotada bu depolardan birine teslim edilecektir.
Şemalar
-
Gönderinin depoya teslim edilmesi.
-
Gönderinin birkaç depodan birine teslim edilmesi.
Örnek 1
Gönderilerin depoya toplanması, tüm araçlar gün sonunda (return_to_depot
= true
) deposuna geri dönmelidir. 30 sipariş, 1 depo, depo başına 5 toplama noktası.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Örnek 1’deki ile aynı. Araçlardan biri için return_to_depot
= false
belirtilmiştir, yani gönderi kuryenin aracında kalacak ve sabah depoya geri dönecektir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 3
Örnek 1’deki ile aynıdır, ancak farklı toplama noktaları seçilmiştir. Tüm araçlar için return_to_depot
= false
uygulanıyor ve toplama noktaları için delivery_deadline
belirtilmiştir. Sadece pickup
tipindeki tüm siparişleri içeren araç gün sonunda depoya geri dönecektir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Rotayı rastgele bir noktada başlatma veya bitirme
Hangi durumlarda kullanılmalı
Varsayılan değer, bir kuryenin rotası depoda başlar ve depoda biter. Ancak, rotayı araç park yerinden, kuryenin evinden başlatmanın veya tam tersi bu noktalara daha yakın bir yerde tamamlamanın gerekli olduğu durumlar vardır.
Senaryo nasıl gerçekleştirilir
start_at ve visit_depot_at_start parametreleri başlangıç noktalarının tanımlanmasından, finish_at ve return_to_depot parametreleri ise bitiş noktalarının tanımlanmasından sorumludur.
Not
Bu parametrelerin tüm kombinasyonları çözümde bir depo kullanmaz (örneğin, tüm kuryeler evden başlayıp doğrudan siparişlere gidiyorsa), ancak veri şemasında doldurulması zorunludur. Bu durumda, depo olarak ofis koordinatlarını veya şehir merkezi koordinatlarını belirleyebilirsiniz.
Başlangıç ve bitiş noktaları için parametreler birbirinden bağımsızdır, bu nedenle burada herhangi bir kombinasyon özelleştirilebilir:
-
Başlangıç ve bitiş noktaları her kurye için ayrı ayrı ayarlanır.
-
Birden fazla kurye için aynı noktayı belirlenebilir.
-
Başlangıç ve bitiş için aynı noktalar belirlenebilir.
Bir rota için belirli bir başlangıç veya bitiş noktası belirtmek için garage
sipariş tipini kullanın. Eğer vehicle.visit_depot_at_start
= false
ve vehicle.start_at
parametresinin değeri tanımsız ise, algoritma kuryenin depoya uğramadan ilk siparişten rotaya başlayabileceğini kabul eder.
Uyarı
start_at
tanımsız ve visit_depot_at_start
= false
olduğunda parametrelerin kombinasyonu, rotanın pickup
veya pickup & delivery
bağlantısı türünde siparişleri varsa kullanılabilir. Depodan teslim edilen siparişler önce programlanmaz ve ancak kurye depoyu ziyaret ettikten sonra rotada görünür.
Başlangıç noktaları için şemalar
-
Depoya girmeden sipariş noktasından rotanın başlangıcı (
start_at
tanımlanmamış,visit_depot_at_start
=false
). Kurye için siparişin başlangıç noktası algoritma tarafından seçilir. -
Depodan rotanın başlangıcı (
start_at
tanımlanmamış,visit_depot_at_start
=true
). Algoritmanın varsayılan davranışı. -
Depoya girmeden tanımlı bir noktadan rota başlangıcı (
start_at
tanımlı,visit_depot_at_start
=false
). Başlangıç noktası farklı kuryeler için farklı olabilir. -
Rotanın tanımlanmış bir noktadan depoya girerek başlatılması (
start_at
tanımlı,visit_depot_at_start
=true
). Başlangıç noktası farklı kuryeler için farklı olabilir.
Bitiş noktaları için şemalar
-
Rotanın depoya dönmeden son noktada sonlandırılması (
finish_at
tanımlanmamış,return_to_depot
=false
). -
Rotanın sonunda depoya dönüş (
finish_at
tanımlanmamış,return_to_depot
=true
). -
Rotanın depoya dönmeden belirli bir noktada sonlandırılması (
finish_at
tanımlı,return_to_depot
=false
). Bitiş noktası farklı kuryeler için farklı olabilir. -
Önceden bir depoya giderek, rotanın belirli bir noktada son bulması (
finish_at
tanımlı,return_to_depot
=true
). Bitiş noktası farklı kuryeler için farklı olabilir.
Pickup & delivery: gönderinin rastgele noktalardan teslim alınması ve teslim edilmesi
Hangi durumlarda kullanılmalı
Senaryo, ara depolar veya aktarma noktaları olmadan kapıdan kapıya teslimatı planlamak için kullanılır. Örneğin:
-
malların tedarikçinin deposundan alınması ve müşteriye götürülmesi gerekir (malların farklı tedarikçilerin birkaç deposundan alınması ve bir müşteriye götürülmesi gereken çoklu senaryolar
pickup
dahil); -
malların iadesi (müşteriden teslim alınmalı ve ana depo yerine iade deposuna götürülmelidir).
Senaryo, noktalar arasında basit bağımlılıkların olduğu bir durumda da kullanılabilir. Örneğin, bir müşterinin evine gitmeden önce aletleri, belgeleri veya anahtarları almak için uğramanız gerekir.
Bu senaryo bir depodan toplama ve tek bir depodan sevkiyat senaryoları ile birlikte kullanılabilir.
Senaryo nasıl gerçekleştirilir
Pickup & delivery senaryosunun kullanımının ayırt edici bir özelliği, biri her zaman diğerinden önce ziyaret edilen bağlantılı bir nokta çiftinin kullanılmasıdır: önce pickup
, sonra delivery
. Bağlama, delivery_to
noktası için doldurulan ve bağlanan pickup
’ın kimliğini belirten delivery
alanı tarafından yapılır.
Birden fazla farklı nokta için pickup
içeren bir senaryoda, birkaç farklı nokta pickup
için delivery_to
alanında aynı değeri belirtmek mümkündür. Birden fazla pickup
ve bir delivery
’den oluşan bir grup her zaman tek bir kurye tarafından yürütülmek üzere planlanacaktır.
Bir noktadan pickup
farklı noktalara delivery
teslimat yapılması gerekiyorsa, farklı çiftlerin pickup & delivery
belirtilmesi gerekir (bu durumda pickup
siparişler aynı koordinatlara sahip olacaktır, ancak farklı tanımlayıcılara sahip olmalıdır). Bu tür çiftler pickup & delivery
farklı kuryelere planlanabilir (pickup
noktaları aynı olsa bile). Kurye başına zorunlu planlama için sipariş gruplamasının kullanılması önerilir.
Uyarı
Ağırlık, hacim ve yer değeri delivery
tipi bir nokta için atlanabilir, ancak bağlantılı pickup
için belirtilmelidir.
Eğer delivery
tipi bir noktada hacim-ağırlık özellikleri belirtiliyorsa, bunlar bağlantılı pickup
sipariş ile aynı olmalıdır. Yani, çoklu bir pickup
durumu için, ağırlık, hacim ve yer sayısının yalnızca pickup
siparişlerde belirtilmesi yeterlidir.
pickup & delivery
çiftlerini yürütürken sırayı kontrol etmek için location.in_lifo_order
işlevinin kullanılması önerilir (ayrıntılar için bkz. Sipariş kabul ve teslimat sıralaması).
Şemalar
-
pickup & delivery
. -
Tek bir nokta
pickup
için çokludelivery
.
Örnek 1
12 farklı nokta planlıyoruz. Yarısı pickup
tipinde, diğer yarısı ise delivery
tipindedir. Sonuç olarak toplamda kapıdan kapıya
6 teslimat elde ediyoruz.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
pickup
tipindeki noktalar için 8 farklı adres belirliyor ve delivery_to
alanında bunlar için aynı değeri belirtiyoruz. Kuryenin siparişleri farklı yerlerden alması ve hepsini tek bir yere getirmesi için bir plan yapıyoruz.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 3
1 adresten 16 farklı adrese teslimat yapmayı planlıyoruz. Aynı adreslere sahip 16 nokta için delivery
tipini ve diğer 16 nokta için pickup
tipini ayarlıyoruz.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Birkaç deponun birinden teslimat
Hangi durumlarda kullanılmalı
Bu senaryo, birkaç depoda aynı üründen yeterli miktarda bulunduğunda ve planlamanın hangi depodan teslim edileceğini seçmesi gerektiğinde kullanılır.
Senaryo nasıl gerçekleştirilir
Uyarı
Bu senaryoyu kullanırken, her depodan başlayan tüm kuryeleri listeleyin.
Planlamada birden fazla depo ve her kurye için hangi depolara bağlı olduğunu belirtin (yani rota boyunca başlayabileceği ve ziyaret edebileceği depolar). Daha fazla ayrıntı için Birkaç depodan birinden teslimat ve Birkaç depodan birinden başlama bölümlerine bakın.
Ayrıca, senaryo için depoya girmeden rastgele bir noktada başlatma işlevini kullanabilirsiniz (ayrıntılar için Rotayı rastgele bir noktada başlatma veya bitirme bölümüne bakın, burada start_at
belirli ve visit_depot_at_start
= false
). Her kurye için teslimatın başlaması gereken başlangıç noktası olarak bir depo belirtirseniz, planlamanın sonucu birden fazla depodan planlamaya benzer olacaktır.
Not
Belirli bir siparişin hangi depodan gönderileceği biliniyorsa, location.depot_id parametresini kullanın. Parametre değerinde id
depo veya id
depo dizisini belirtin.
Senaryo, hizmet fonksiyonları olmadan, yani siparişin depoya katı bir şekilde atanması yoluyla gerçekleştirilebilir. Katı bağlantı için çeşitli seçenekler vardır:
-
En yakın depo
Sipariş adresi koordinatları ile tüm depolar arasındaki mesafe hesaplanır (hesaplama için Mesafe matrisi hizmetini kullanın). Sipariş için en yakın depo seçilir.
-
Teslimat bölgesi
Her depo için önceden tanımlanmış bir teslimat bölgesi vardır (Yandex Harita tasarımcısı ile çizilir). Her sipariş için hangi deponun teslimat bölgesine girdiği önceden kontrol edilir. Her depo ayrı ayrı ve Bir depodan sevkiyat senaryosuna göre bağımsız olarak planlanır.
Şema
Örnek 1
Bu örnekte, depot_id
parametresi aracılığıyla her bir kuryenin hangi depoya bağlı olduğu belirtilmiştir. Bu şekilde kuryeler siparişleri yalnızca kendi depolarından teslim ediyor.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Bu örnekte, kuryeler rotalarına depodan değil, garage tipindeki iki noktadan birinden başlarlar. Rotanın başlangıç noktası start_at aracılığıyla tanımlanmıştır.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 3
Üç depo, üç sipariş ve üç araç verilmiştir. Her araç kendi deposundan başlar. Siparişlerin depolara location.depot_id
aracılığıyla bağlantısı:
-
1 numaralı sipariş depolara bağlı değildir. Herhangi bir depodan teslim edilebilir.
-
2 numaralı sipariş 1 ve 2 numaralı depolara bağlıdır. Bu sipariş listelenen iki depodan birinden teslim edilebilir.
-
3 numaralı sipariş 3 numaralı depoya bağlıdır. Belirli bir depoda yer almaktadır.
Sonuç olarak, algoritma iki rota hesaplamıştır:
- Bir kurye, 2 numaralı depodan 1 ve 2 numaralı siparişleri işlemektedir.
- Başka bir kurye 3 numaralı depodan 3 numaralı siparişi işler.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Birden fazla deposu olan rotalar
Ek bir depoya uğrama
Hangi durumlarda kullanılmalı
Planlamada yaygın bir senaryo olarak, ek gönderi almak için ek bir depoya uğrama kullanılmaktadır:
-
Kuryeler ana depo 1’den başlar.
-
Bazı kuryeler doğrudan teslimata gider.
-
Bazı kuryeler, bazı müşterilerin siparişlerinin bulunduğu depo 2’ye gönderi almak için uğrar.
-
Ek gönderi almak için giden kuryeler, depo 2’ye giderken bazı siparişleri teslim edebilir.
Senaryo nasıl gerçekleştirilir
Aşağıdaki alanları kullanın:
-
vehicle.starting_depot_id
– kuryenin rotaya başlayabileceği depolar. -
vehicle.middle_depot_id
– ek gönderi almak için depolar (ara depolar). -
vehicle.ending_depot_id
– kuryenin rotayı tamamlayabileceği depolar.Not
Depo listeleri çakışabilir. Başlangıç, ara ve bitiş depolarının bileşimi aynıysa, üç ayrı alan belirtmek yerine bunları
vehicle.depot_id
alanında listeleyebilirsiniz. -
vehicle.allow_different_depots_in_route
– tek bir rotada birkaç depoyu ziyaret edebilme olanağı:true
ise, kurye aynı rota üzerinde farklı depoları ziyaret edebilir.false
ise, kurye yalnızca bir depoyu ziyaret edebilir – rotaya başladığı depo.
-
vehicle.depots_only_at_run_beginning
– sadece seferin başlangıcında ek gönderi almak için ara depolara girebilir. Varsayılan değerfalse
. -
vehicle.max_middle_depots
– tüm rotadaki maksimum ara depo sayısı. Varsayılan değer 0’dır. -
vehicle.finish_route_in_starting_depot
veyavehicle.finish_run_in_starting_depot
– rotayı veya seferi kuryenin başladığı aynı depoda tamamlama ihtiyacı. Varsayılan değerfalse
’dir. Bu parametreleri yalnızcaallow_different_depots_in_route
=true
ise kullanmak mantıklıdır. Daha fazla ayrıntı için bkz. Rotanın veya seferin sonunda depoya dönüş.
Siparişin hangi depodan alındığını ve nereye götürüldüğüne API yanıtında picked_orders
ve delivered_orders
alanlarında bakabilirsiniz.
Şemalar
-
Kurye, yolculuğun ortasında bir ara depoyu ziyaret edebilir.
-
Kurye yalnızca yolculuğun başlangıcında ara depoyu ziyaret edebilir (parametre
vehicles.depots_only_at_run_beginning
=true
).
Örnek 1
Kuryenin 2 depoda bulunan 4 siparişi teslim etmesi gerekiyor. Bu yüzden kurye:
- Depo 2’de başlar ve burada 2, 3 ve 4 numaralı siparişleri yükler.
- Yol üzerinde 3 nolu siparişi teslim eder.
- Ek gönderi almak için Depo 1’e uğrar.
- Kalan siparişleri teslim eder.
Planlama sonucunda picked_orders
alanında aşağıdaki değerleri göreceksiniz:
Depot 2
içinOrder 3
,Order 4
,Order 2
;Order 1
içinDepot 1
.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Örnek 1 ile aynıdır, ancak parametre depots_only_at_run_beginning
= true
. Planlamanın bir sonucu olarak, kurye:
- Depo 2’de başlar ve burada 2, 3 ve 4 numaralı siparişleri yükler.
- Depo 1’e ek yükleme için uğrar ve buradan sipariş 1’i alır.
- Siparişleri teslim eder.
API isteği (JSON) ⋅ API yanıtı ⋅ https://yandex.com/courier/mvrp-map#15e25725-cc14d32e-61d3d7bd-8b5e0cd
Örnek 3
4 siparişin teslim edilmesi gerekiyor:
Sipariş | Sipariş türü | Yapılması gereken |
---|---|---|
Sipariş 1 | delivery |
Depo 1 veya 2’den teslim al |
Sipariş 2 | delivery |
Depo 3 veya 4’ten teslim al |
Sipariş 3 | pickup |
Depo 1 veya 3’e götür |
Sipariş 4 | pickup |
Depo 2 veya 4’e götür |
Bu yüzden kurye:
- Depo 2’de başlar ve buradan sipariş 1’i alır.
- Sırayla 3. ve 4. gel al siparişlerini alır.
- Ara depo 3’e gider, burada sipariş 3’ü bırakır ve sipariş 2’yi alır.
- Sırayla 2 ve 1 numaralı siparişleri alır.
- Depo 2’ye döner ve burada sipariş 4’ü bırakır.
Siparişin hangi depodan alındığına API yanıtında picked_orders
alanından ve siparişin hangi depoya götürüldüğüne delivered_orders
alanında bakabilirsiniz.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Başka bir depodan yeni bir sefer başlatma
Hangi durumlarda kullanılmalı
Bu senaryoda kurye birden fazla sefer yapabilir. Bununla birlikte farklı bir depodan yeni bir sefer başlatılabilir (bu vehicle.starting_depot_id
’de belirtilmiştir). Seferler arasında, bir depodan diğerine boş gidişler mümkündür.
Senaryo nasıl gerçekleştirilir
Ek bir depoya uğrama planlarken kullandığınız parametrelerin aynısını kullanın.
Kuryenin seferler arasında bir depodan diğerine geçmesine izin vermek için can_change_depot_between_runs
= true
(varsayılan false
) olarak ayarlayın.
Şema
Örnek
Ek depo’ya uğrama örneğinde olduğu gibi, ancak ağırlık kısıtlamaları vardır, araca yalnızca 2 sipariş sığabilir. Bununla birlikte kurye 2 sefer yapabilir: vehicle.max_runs
= 2. Her sefer depo 2’de başlamalı ve depo 1’de bitmelidir. Kuryenin seferler arasında bir depodan diğerine geçmesine izin vermek için can_change_depot_between_runs
= true
parametresi ayarlanır. Kurye aşağıdaki işlemleri gerçekleştirir:
- Depo 2’de başlar ve buradan sipariş 4’ü yükler. Sipariş 1’i almak için depo 1’e uğrar. 4 ve 1 numaralı siparişleri teslim eder. Depo 1’de ilk seferini tamamlar.
- Depo 2’ye geçer. İkinci sefer için 2. ve 3. siparişleri yükler. Yüklenen siparişleri teslim eder. Seferin sonunda tekrar depo 1’e döner.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Başlamak için en iyi depoyu seçme
Hangi durumlarda kullanılmalı
Bu senaryoda, depolardaki sevkiyat hacmine göre kuryeleri depolar arasında nasıl tahsis edeceğinize karar vermeniz gerekir. Koşullar:
-
birkaç depo var;
-
araç filosu tüm depolar için ortaktır.
Bu senaryo hem ek depolara gitmeye gerek olmadığında hem de tek noktaya teslimatın ek depolara gitmeyi gerektirebileceği durumlarda kullanılabilir.
Senaryo nasıl gerçekleştirilir
Her kurye için, vehicle.starting_depot_id
alanında, siparişleri başlatabileceği ve alabileceği bir veya birden fazla depo belirtin. Algoritma, başlamak için en iyi depoyu seçecektir. Ayrıca vehicle.ending_depot_id
– kuryenin rotayı tamamlayabileceği depoları da belirtmelisiniz.
Gerekirse aşağıdaki alanları kullanın:
-
vehicle.allow_different_depots_in_route
– tek bir rotada birkaç depoyu ziyaret edebilme olanağı:true
ise, kurye aynı rota üzerinde farklı depoları ziyaret edebilir.false
ise, kurye yalnızca bir depoyu ziyaret edebilir – rotaya başladığı depo.
-
vehicle.middle_depot_id
– ek gönderi almak için depolar (ara depolar).Kopyalandı -
vehicle.max_middle_depots
– tüm rotadaki maksimum ara depo sayısı. Varsayılan değer 0’dır.
Not
Depo listeleri çakışabilir. Başlangıç, ara ve bitiş depolarının bileşimi aynıysa, üç ayrı alan belirtmek yerine bunları vehicle.depot_id
alanında listeleyebilirsiniz.
Şema
Örnek
Teslimat için mallar iki depoda mevcuttur. Kurye için her iki depo starting_depot_id
alanında listelenir, ancak rota depo 2’de tamamlanmalıdır. Depo 2 teslimat adreslerinden daha uzakta olduğundan, algoritma başlamak için depo 1’i seçer, ancak rotayı depo 2’de tamamlar.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Uygun lokasyonlardan birine teslimat
Hangi durumlarda kullanılmalı
Bu senaryoyu, bir gönderinin birkaç olası konumdan birine teslim edilebileceği ve planlamanın en uygun olanı seçmesi gerektiği durumlar için kullanın:
-
Tıbbi testlerin evde yapılması – en yakın laboratuvara götürülmesi.
-
Çöp alma veya hurda metal toplama – her şeyi en yakın düzenli depolama sahalarına götürme.
-
Paketi müşteriden teslim alma – üçüncü taraf bir nakliye şirketi aracılığıyla gönderme ve bu amaçla en yakın gönder kabul şubesine götürme.
-
Kurye teslimatı – düzenli bir kurye ile düzenli kuryelerden acil gönderileri toplayan sabit rotalı bir kurye arasında bir görüşme planlama.
Senaryo nasıl gerçekleştirilir
delivery_to_any parametresini kullanarak olası konumlardan birine bir teslimat senaryosu uygulayın.
Siparişin nereye götürüldüğünü, depo veya siparişlerin drop_off
API yanıtında delivered_orders
alanında görebilirsiniz.
Şema
Örnek
Bu örnek, her birinde pickup
’de birden fazla aynı noktanın belirtildiği bir dizi delivery_to_any
siparişi seti gerçekleştirilmiştir. Siparişleri toplayan kurye, vardiya sonunda bunları en yakın drop_off
noktasına götürür. İlk kurye için bu Laboratuvar 4
ve ikincisi için Laboratuvar 2
olacaktır, API yanıtında, bu konumlara teslim edilen siparişler delivered_orders
alanlarında listelenir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Gönderinin olası konumlardan birinde teslim alınması
Hangi durumlarda kullanılmalı
Bu senaryoyu, belirli bir yükün birkaç konumdan birinden alınabileceği ve planlamanın en iyisini seçmesi gerektiği durumlarda kullanın. Örneğin:
-
teslim edilecek mal farklı yerlerde bulunuyor (örneğin marketlerden veya eczanelerden biri);
-
gönderi üçüncü taraf bir nakliye şirketinin terminallerinden birinden teslim alınabilir;
-
düzenli bir kurye ile acil gönderileri düzenli kuryelere ileten sabit rota kuryesi arasında bir görüşme planlanmalı.
Senaryo nasıl gerçekleştirilir
Daha fazla ayrıntı için pickup_from_any parametre açıklaması bölümüne bakın.
Şema
Örnek
Örnekte, delivery
’nin pickup_from_any
değerine eşit oldu 2 sipariş true
tanımlanmıştır. Bu siparişlerin her biriyle 2 sipariş pickup
ilişkilidir.
Tüm pickup
ve bağlı delivery
’nin aynı ağırlığa sahip olması gerektiğini unutmayın.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Bir kurye için depodan birden fazla sefer planlamak
Hangi durumlarda kullanılmalı
-
Sevkiyat hacmi mevcut taşıma kapasitesini aşıyor
Bu durumda, tüm sipariş hacmini taşımak için araçların tamamının veya bir kısmının birden fazla sefer yapması gerekir.
-
Sevkiyat için tüm siparişler toplanamıyor
Bazen depo kapasitesi, sevkiyat başlangıcına tüm siparişlerin toplanmasına izin vermez, ancak sipariş zaman aralıklarının karşılanmasını sağlamak için sevkiyat hemen başlamalıdır. Bu durumda kuryeler, zaman kazanmak amacıyla daha erken teslimat aralıkları olan siparişleri dağıtmak için ilk seferlerine eksik yük ile çıkacaktır. Bu sırada, depo daha sonraki bir teslimat aralığına konu siparişleri toplayacak ve bunlar bir sonraki seferlerde teslim edecektir.
Senaryo nasıl gerçekleştirilir
-
Birden fazla sefer gerçekleştirme olanağı
max_runs
parametresi ile belirleniyor (ayrıntılar için Aracın günde birden fazla sefer yapması bölümüne bakın). -
Tüm siparişlerin sevkiyat başlangıcında toplanmış olmayacağı gerçeğini hesaba katmak için
depot_ready_time
parametresini kullanın (daha fazla ayrıntı için bkz. Siparişin depoda hazır olma süresi).
Şema
Örnek 1
Bu örnekte, üç siparişin toplam ağırlığı (3000 kg) iki aracın toplam taşıma kapasitesini (2500 kg) aşmaktadır. 2 numaralı kurye iki sefer yapacak (max_runs
) ve ikinci seferinde üçüncü siparişi götürecektir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Bu örnekte, kurye ilk olarak depot_ready_time
aracılığıyla hazır olup olmadığı belirlenen daha erken siparişleri (time_window
) dağıtacaktır. max_runs
parametresi, daha sonraki siparişleri almak için depoya dönmesine izin verecektir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Çapraz yükleme
Çapraz yükleme deposu, malların aktarıldığı, yeniden konsolide edildiği veya ek yükleme yapıldığı bir depodur. Bu tür depolar için type
alanına crossdock
değeri girilmelidir.
Teslimat hızını sağlamak ve nakliye ücretlerini azaltmak için siparişlerin bir kısmı için çapraz yükleme kullanılabilir: siparişler, uzun mesafeli siparişlere daha yakın bir çapraz yükleme deposuna önceden götürülür. Örneğin, depo şehrin kuzeyinde yer alıyor ve teslimat gün içinde gerçekleşiyor. Daha sonra siparişlerin şehrin güney kesimine ulaştırılması için güneyde bir çapraz yükleme deposu düzenleyerek bazı siparişlerin gece büyük nakliye araçlarıyla aktarılmasını sağlıyorlar.
Çapraz yükleme depolarında siparişler depolanmaz, önce bir veya daha fazla araç siparişleri getirir ve ardından bir veya daha fazla araç bu siparişleri alır ve müşterilere götürür. Şu anda, siparişleri çapraz yükleme depolarına götürmek ve oradan taşımak için farklı araçlar gerekiyor.
Çapraz yükleme depolarıyla çalışma konusunda araçlara crossdock_mode
parametresi kullanılarak kısıtlama ayarlanır. Aşağıdaki değerleri alabilir:
allow
– araç hem müşterilere hem de çapraz yükleme depolarına sipariş götürebilir (bu varsayılan değerdir);deny
– araç sadece müşterilerden sipariş alabilir;mandatory
– araç sadece çapraz yükleme depolarına siparişleri götürebilir.
Aracın hangi depodan veya çapraz yükleme deposundan başladığını belirtmek için vehicle.depot_id
alanını kullanın.
Siparişler için crossdock_mode
parametresi de aşağıdaki değerlerle ayarlanır:
allow
– sipariş hem doğrudan depodan hem de çapraz yükleme deposundan doğrudan teslim edilebilir (bu varsayılan değerdir);deny
– sipariş yalnızca doğrudan depodan teslim edilebilir;mandatory
– sipariş yalnızca çapraz yükleme deposundan teslim edilebilir.
Siparişin hangi depoda olduğunu veya hangi çapraz yükleme deposundan teslim edilmesi gerektiğini belirtmek için location.depot_id
alanını kullanın. Birden fazla depo ve çapraz yükleme deposu listeleniyorsa, siparişin bunlardan herhangi birinden alınabileceği anlamına gelir.
pickup
tipindeki siparişler için, aşağıdaki değerleri alan may_drop_in_crossdock
parametresini ayarlayabilirsiniz:
true
– sipariş çapraz yükleme deposuna bırakılabilir (varsayılan değer);false
– sipariş düzenli bir depoya teslim edilmelidir.
may_drop_in_crossdock
parametresi sadece Uygun lokasyonlardan birine teslimat senaryosunda kullanılabilir. Çapraz yükleme deposunda aktarma özelliğine sahip sipariş bağları pickup&delivery
varsa, Pickup & delivery через кросс-док senaryosunu kullanın.
Uyarı
Kurye önce delivery
tipindeki siparişleri çapraz yükleme deposuna götürür ve daha sonra pickup
tipindeki siparişleri çapraz yükleme deposundan alır.
Hizmet süresi
Çapraz yükleme deposu yoluyla teslim edilen siparişler için location.crossdock_service_duration_s
hizmet süresi dikkate alınır. Bir araç normal depodan çapraz yükleme deposuna geldiğinde, araç için hizmet süresi aşağıdaki formül kullanılarak hesaplanır:
depot.service_duration_s
+ Aracın getirdiği tüm siparişlerin toplamı {location.crossdock_service_duration_s
}.
Çapraz yükleme yaparken, bir zaman marjı depot.crossdock_safety_waiting_duration_s
oluşturmak yararlıdır, bir siparişin müşteriye teslim edilmek üzere alınabilmesi için siparişin çapraz yükleme deposundan boşaltıldığı andan itibaren geçmesi gereken minimum süre (varsayılan 3600 saniye veya 1 saattir). Bu yedek zaman, ilk aracın (siparişleri çapraz yükleme deposuna götüren) olası gecikmesinin, çapraz yükleme deposundan siparişleri alan araçların rotalarını bozmaması için gereklidir.
Şema
Örnek 1
4 kurye ve 6 siparişin 2 depodan ve kısmen çapraz yükleme deposundan dağıtılması. Depolar Moskova’nın batısında, çapraz yükleme deposu ise doğusunda yer almaktadır. Sipariş 1, 2 ve 3 batıdadır ve depolardan teslim edilir. 4, 5 ve 6 numaralı siparişler doğudadır ve çapraz yükleme deposundan teslim edilir.
Planlamanın sonucu:
Kurye | Kurye özellikleri | Rota |
---|---|---|
Kurye 1 | Depo 1’den başlar. Onun çapraz yükleme deposuna siparişleri götürmesine izin verilmiyor. | 1 ve 3 numaralı siparişleri depo 1’den alır ve müşterilere teslim eder. |
Kurye 2 | Depo 2’den başlar. Onun için tüm rotalara izin veriliyor. | 2 ve 6 numaralı siparişleri depo 2’den alıyor. Sipariş 2’yi müşteriye ve sipariş 6’yı da çapraz yükleme deposuna götürür. |
Kurye 3 | Depo 1’den başlar. Siparişleri sadece çapraz yükleme deposuna götürebilir. | Depo 1’den 4 ve 5 numaralı siparişleri alır, çapraz yükleme deposuna götürür ve depo 1’e geri gelir. |
Kurye 4 | Çapraz yükleme deposundan başlar. | 4, 5 ve 6 numaralı siparişleri çapraz yükleme deposundan alır ve müşterilere götürür. |
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Planlama görevinde 2 kurye, Moskova’nın güneyinde 1 depo ve doğuda bir çapraz yükleme deposu mevcut. Siparişler için aşağıdaki koşullar belirlenmiştir:
Sipariş | Sipariş türü | Nerede | Nereye teslim edilecek | Çapraz yükleme deposu yoluyla |
Çapraz yükleme deposuna bırakılabilir |
---|---|---|---|---|---|
1 | delivery |
Depoda | Müşteriye | Evet | - |
2 | pickup |
Müşteride | Çapraz yükleme deposuna | Hayır | Evet |
3 | pickup |
Müşteride | Çapraz yükleme deposuna | Hayır | Evet |
4 | pickup |
Müşteride | Depoya | Evet | Hayır |
Planlamanın sonucu:
Kurye | Kurye özellikleri | Rota |
---|---|---|
Kurye 1 | Depo 1’den başlar. Siparişleri sadece çapraz yükleme deposuna götürebilir. | Sipariş 1’i depodan alır ve çapraz yükleme deposuna götürür. Bekledikten sonra, çapraz yükleme deposundan 4 numaralı siparişi alır ve depoya götürür. |
Kurye 2 | Çapraz yükleme deposundan başlar. | Çapraz yükleme deposundan sipariş 1’i alır. Müşterilerden 2, 3 ve 4 numaralı siparişleri alır ve 1 numaralı siparişi müşteriye teslim eder. 2, 3 ve 4 numaralı siparişleri çapraz yükleme deposuna götürür. |
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 3
Örnek 2’de olduğu gibi aynı depolar ve kuryeler. Siparişler için aşağıdaki koşullar belirlenmiştir:
Sipariş | Sipariş türü | Nerede | Nereye teslim edilecek | Çapraz yükleme deposu yoluyla |
Çapraz yükleme deposuna bırakılabilir |
---|---|---|---|---|---|
1 | delivery |
Depoda | Müşteriye | Evet | - |
2 | pickup |
Müşteride | İçinde drop_off veya drop_off_2 (delivery_to_any ) |
Hayır | Evet |
3 | pickup |
Müşteride | Çapraz yükleme deposuna | Hayır | Evet |
4 | pickup |
Müşteride | Depoya | Evet | Hayır |
Planlamanın sonucu:
Kurye | Kurye özellikleri | Rota |
---|---|---|
Kurye 1 | Depo 1’den başlar. Siparişleri sadece çapraz yükleme deposuna götürebilir. | Sipariş 1’i depodan alır ve çapraz yükleme deposuna götürür. Çapraz yükleme deposundan 4 numaralı siparişi alır ve depoya götürür. |
Kurye 2 | Çapraz yükleme deposundan başlar. | Çapraz yükleme deposundan sipariş 1’i alır. 3 numaralı siparişi müşteriden alır, 1 numaralı siparişi müşteriye teslim eder, 2 ve 4 numaralı siparişleri müşteriden alır, 2 numaralı siparişi drop_off_2 ’e teslim eder, 3 ve 4 numaralı siparişleri çapraz yükleme deposuna götürür. |
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Çapraz yükleme deposuna teslimat mesafesini hesaba katmadan planlama
Hangi durumlarda kullanılmalı
Ana depodan çapraz yükleme deposuna kadar teslimat mesafesini dikkate almaya gerek yoksa bu yapılandırma seçeneğini kullanın.
Senaryo nasıl gerçekleştirilir
Bu senaryo birkaç depodan birinden sevkiyat senaryosuna benzer ve aynı yollarla uygulanabilir.
Uyarı
Yukarıda açıklanan çapraz yükleme senaryosunun aksine, bu senaryoda siparişlerin çapraz yükleme deposuna teslimatı rotalara dahil edilmemiştir. Planlamada, herhangi bir siparişin çapraz yükleme deposuna girebileceği varsayılır ve buradan hangi siparişlerin sevk edileceğini daha uygun olacağını seçmeniz gerekir. Ayrıca hangi araçların ana depodan, hangilerinin çapraz yükleme deposundan hareket ettiği de önceden bilinmelidir.
Şema
Örnek
delivery
tipindeki 60 nokta, bunlar teslim edilecek siparişlerdir. garage
tipli 1 nokta, bir çapraz yükleme deposudur. Bir kurye için rotaya depodan başlanacağı belirtilirken, başka bir kurye için rotaya çapraz yükleme deposundan başlanacağı belirtilir.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Çapraz yükleme deposu üzerinden Pickup & delivery
Hangi durumlarda kullanılmalı
Bu senaryo, çapraz yükleme deposundan dağıtılması gereken siparişlerin önceden pickup
noktalarından toplanması gerekiyorsa kullanılır.
Senaryo nasıl gerçekleştirilir
Çapraz yükleme depolarına sipariş toplama rotaları ve ardından siparişlerin müşterilere teslimatı için zaman sınırları belirleyin.
-
Farklı araçlarla toplama ve teslimat
Çapraz yükleme deposuna teslimatı ve çapraz yükleme deposundan sevkiyatı farklı planlamalara bölün. Bu şekilde Gönderilerin depoya toplanması senaryosuna göre bir planlama ve Bir depodan sevkiyat senaryosuna göre başka bir senaryo elde edeceksiniz.
Örnek
İki farklı planlama aracılığıyla çapraz yükleme: toplama ve teslimat.
1. İlk bölüm, toplama. Sabah vardiyasındaki bir araç adreslerden siparişleri toplayıp depoya geri dönüyor.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
2. İkinci kısım, teslimat. Başka bir araç gündüz vardiyasında depodan siparişleri alır ve alıcılara teslim eder.
-
Tek araçla toplama ve teslimat
Siparişleri toplamak ve teslimatı için bir zaman sınırı belirleyin.
1. Çapraz yükleme deposunda toplanması gereken siparişler için:
pickup
tipi belirleyin;- delivery_deadline parametresini kullanın.
2. Çapraz yükleme deposundan teslim edilmesi gereken siparişler için:
delivery
tipi belirleyin;- depot_ready_time parametresini kullanın.
Çapraz yükleme işlemlerini gerçekleştirmek için
delivery_deadline
vedepot_ready_time
parametrelerinin değerleri arasında bir zaman aralığı olmalıdır. Örneğin, gönderiyi saat 13.00’e kadar toplama ve teslimatı saat 14.00’te başlama.Örnek
1 kurye, 10 sipariş
pickup
ve 10 siparişdelivery
. Siparişler birbiriyle bağlantılı değil. Tümüpickup
saat 13.00’e kadar depoya teslim edilmelidir ve tümüdelivery
saat 14.00’ten itibaren depodan alınabilir. Kuryenin siparişleri 2 seferde yerine getirmesine izin vermek içinvehicle.max_runs
= 2 belirtilmiştir.
Şema
Rotanın yürüyüş kısmından önce araç park yeri ile teslimat
Hangi durumlarda kullanılmalı
Senaryo, rotada birbirine yakın birkaç sipariş olduğunda kullanılır. Kurye araçla gelebilir, park edebilir ve siparişleri yürüyerek dağıtabilir. Tüm siparişleri bir kerede taşımak mümkün değilse, kurye birkaç sefer yapar. Her seferin başında, kurye siparişlerin bir kısmını alır, teslim eder ve daha sonra siparişlerin bir sonraki kısmını almak için araca geri döner.
Rotanın birkaç yürüyüş bölümü olabilir.
Senaryo nasıl gerçekleştirilir
Parametreleri ayarlayın:
-
location.parking_service_duration_s
– kuryenin aracı park etmek için harcadığı süre.Not
walking
vetransit
taşıma şekilleri için,location.parking_service_duration_s
parametresi geçen sürenin hesaplanmasına dahil değildir.Diğer taşıma şekilleri için
location.parking_service_duration_s
’de belirtilen süre, rotanın yürüme kısmı başlamadan önce yalnızca bir kez dikkate alınacaktır. -
vehicle.walking_courier.capacity.units
– kuryenin taşıyabileceği maksimum birim sayısı. Bu işlevi kullanmak için, ayrıcalocation.shipment_size
parametresi yardımıyla sipariş edilecek birim sayısını belirtin.Kuryenin
vehicle.walking_courier.capacity.units
parametresinde belirtilenden daha fazla birim dağıtması gerekiyorsa, algoritma kuryenin birden fazla sefer yaptığı bir rota oluşturabilir. Örneğin, 10 birimi yaya olarak dağıtmanız gerekiyorsa ve parametrevehicle.walking_courier.capacity.units
= 5 ise, kurye önce 5 birimi teslim edecek, ardından araca dönüp kalan 5 birimi alacaktır.Not
RouteQ, yalnızca bir kuryenin araçtan indiği ve siparişleri yürüyerek teslim ettiği senaryoları destekler.
-
vehicle.walking_courier.cost.hour
ve/veyavehicle.walking_courier.cost.km
– saat ve kilometre başına yürüme ücreti. Yaya teslimatının ücreti araç veya kurye ücreti ile aynı şekilde hesaplanır. -
vehicle.walking_courier.restrictions
– rotaların yürüyüş kısımları için kısıtlamalar:max_walking_edge_distance_m.value
vemax_walking_edge_distance_m.penalty
– rotanın yürüme kısımlarındaki iki nokta arasında izin verilen maksimum mesafe (metre cinsinden) ve kısıtı ihlal etmenin cezası.max_parking_walking_distance_m.value
vemax_parking_walking_distance_m.penalty
– tek bir park seansında kat edilebilecek izin verilen azami mesafe (metre cinsinden) ve kısıtı ihlal etmenin cezası.max_parking_duration_s.value
vemax_parking_duration_s.penalty
– bir park oturumunun izin verilen maksimum süresi (saniye cinsinden) ve kısıtı ihlal etmenin cezası.close_locations
– yakın siparişler için kısıtlamalar dizisi:duration_till_service_s.value
veduration_till_service_s.penalty
– iki yakın siparşi teslim etme arasında izin verilen maksimum süre (saniye cinsinden) ve kısıtı ihlal etmenin cezası.distance_till_service_m.value
vedistance_till_service_m.penalty
– iki yakın siparişin arasında izin verilen maksimum mesafe (metre cinsinden) ve kısıtı ihlal etmenin cezası.search_radius_m
– yakın kabul edilen ve kısıtlamalara tabi olan iki sipariş arasındaki mesafedir.soft_search_radius_m
– bu parametrenin değeri karşılık gelensearch_radius_m
değerini aşarsa,search_radius_m
ilasoft_search_radius_m
arasındaki mesafede bulunan siparişler de kısıtlamaya tabi olacaktır, ancak boyutu mesafeye bağlı olarak doğrusal olarak azalır. Örneğin, (search_radius_m
+soft_search_radius_m
) / 2 mesafesinde, 0,5 ağırlığa sahip bir kısıtlama geçerli olacaktır.
Yakın sipariş ayarlarının kullanma örneği
{ ... "walking_courier": { ... "restrictions": { "close_locations": [ { "search_radius_m": 400, "soft_search_radius_m": 500, "distance_till_service_m": { "penalty": 0.02, "value": 1500 } }, { "search_radius_m": 100, "soft_search_radius_m": 160, "duration_till_service_s": { "penalty": 0.02, "value": 1500 } } ], ... } ... }, ... }
Yukarıdaki örnekte, ilk kısıtlama aralarındaki mesafe 400 metreye kadar olan siparişlerin bir sonraki 1500 metrelik hareket içinde teslim edilmesi gerektiğini belirtmektedir. Sınırın aşılması her metre için 0,02 oranında cezalandırılır. 400 ila 500 metre arasındaki siparişler için de bu kısıtlama geçerlidir, ancak mesafeye bağlı olarak doğrusal olarak azaltılır – örneğin, 430 metre uzaklıktaki bir sipariş, temel cezanın 0,7’si kadar bir cezaya tabi olacaktır.
İkinci kısıtlama ilkine benzer, ancak siparişleri işlenmesi arasındaki süreyi belirler. 100 metre yarıçapındaki siparişler 25 dakika içinde işlenmelidir ve geciken her saniye için 0,02 ceza uygulanmalıdır. 100 ila 160 metre arasındaki siparişler kısıtlamaya tabidir, ancak uzaklaştıkça doğrusal olarak azalır.
Siparişleri yürüyerek ve arabayla ziyaret etmenin ücretini dengelemek için options.average_projection_walking_part_distance_m
’i kullanın – seçenek, yoldan siparişe olan ortalama yürüme mesafesini ayarlar. Bu seçenek kullanıldığında, kuryeye siparişe araçla yapılan her ziyaret için yaya ücretinin iki katı ceza kesilir.
Örneğin, average_projection_walking_part_distance_m
= 15
ise, 30 metrelik bir yürüyüş rotasının ücreti her ziyaretin ücretine eklenecektir. Bu ayar, driving
taşıma şekli kullanıldığında yolculuğun yürüme kısmının ücretinin, walking
kullanıldığında aynı mesafeye kıyasla telafi edilmesini sağlar.
Şema
Örnek 1
Rota 10 siparişten oluşmaktadır. Bazı siparişler birbirlerine yakındır:
- 1., 2., 3. ve 4. siparişler;
- 5, 7 ve 9. siparişler;
- 8. ve 10. siparişler.
Yürüyerek teslimatın ücreti araba ile teslimattan daha az olduğu için, yakın siparişlerin teslimatında kurye park eder ve yürüyerek teslim eder. Diğer siparişlerin teslimatı için kurye araba ile seyahat eder.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Örnek 1 ile aynı, sadece vehicle.walking_courier.capacity.units
= 2. Yakın siparişlerin teslimatı için kurye park eder ve bir seferde en fazla iki ünite teslim eder.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Treyler kullanımı
Hangi durumlarda kullanılmalı
Varsayılan değer, sipariş noktasına yalnızca treyleri olmayan bir çekici (kamyon) gelebilir. Sipariş noktası treylerli kamyon için uygunsa, bu senaryoyu kullanın. Treylerli kamyon ayarları için bkz. Eklentiler.
Senaryo nasıl gerçekleştirilir
Treylerli çekici için konumun kullanılabilirliği location.allow_trailers
alanında belirlenir. Varsayılan değer, location.allow_trailers
= false
yalnızca treylersiz çekicinin varabileceği erişilemez bir konumdur. Araç erişimli konumu olan bir senaryoyu gerçekleştirmek için location.allow_trailers
= true
olarak belirtin. Böyle bir konuma bir treylerli çekici gelebilir.
Treylerli çekiciler için sipariş türleri:
-
anchor
– treyleri uzun süre bırakabilecek ve aktarma yapılabilek bir noktadır; -
parking
– treylerin sadece bir siparişin boşaltılması için bırakılabileceği bir nokta.
anchor
tipli (demirli) noktaya bir treyler ile gelebilir, onu birkaç saatliğine bırakabilir, aktarma yapılabilir. Böyle bir siparişin benzersiz bir id
olması gerekir. Bu noktaya bir gönderi getirmek istiyorsanız, tipi delivery
olan başka bir sipariş oluşturmalısınız (bkz. Sipariş türü).
Demirli bir bağlantı noktası tarafından hizmet verilebilecek araç sayısı (çekici ve treyler bağlantıları) varsayılan olarak sınırsızdır. Gerekirse, max_total_vehicles
parametresinde aynı anda demirli bağlantı noktasında bulunabilecek maksimum araç sayısını belirtin.
Tipi parking
olan bir noktada, treyler yalnızca bir siparişi boşaltma süresi boyunca yanaşma yolu olmayan bir mağazada bırakılabilir.
anchor
ve parking
tipindeki siparişler için planlama probleminin çözümünde aşağıdaki alanlar ortaya çıkar:
Alan |
Açıklama |
|
Çekicinin depodan treylerle mi yoksa treylersiz mi ayrıldığını gösterir. |
|
Çekicinin treylerle yola çıktığı bir durumu anlatır. Yolda treyleri ayırıp ayırmadığını gösteriyor. |
Cevap parçası
{
"arrival_time_s": 36726.340873455316,
"node": {
"type": "location",
"used_time_window": "12:00:00-18:00:00",
"value": {
"anchor_mode": "Decoupling",
"hard_window": false,
"id": 1,
"penalty": {
"out_of_time": {
"fixed": 1000,
"minute": 17
}
},
"point": {
"lat": 55.780426,
"lon": 37.712129
},
"ref": "",
"service_duration_s": 0,
"shared_service_duration_s": 0,
"time_window": "12:00:00-18:00:00",
"total_service_duration_s": 0,
"trailer_decoupled": true,
"trailer_used": true,
"type": "anchor"
}
},
"transit_distance_m": 4035.227074751774,
"transit_duration_s": 726.3408734553194,
"violations": [],
"waiting_duration_s": 6473.659126544684
}
Aşağıdaki alanlar sadece anchor
tipindeki siparişler için çözümde görünür:
Alan |
Açıklama |
|
Demirli bağlantı noktası kullanım modu. Değerleri alır:
|
|
Treylerden çekiciye aktarılacak siparişlerin bir listesini içerir (yalnızca |
Cevap parçası
{
"route": [
{
"arrival_time_s": 49003,
"departure_time_s": 52603,
"load_to_head": [
"Order 1",
"Order 2",
"Order 3",
"Order 4"
],
"node": {
"type": "location",
"used_time_window": "08:00:00-14:00:00",
"value": {
"anchor_mode": "Rolling",
"hard_window": false,
"id": "anchor43",
"point": {
"lat": 52.527983,
"lon": 85.227133
},
"ref": "",
"service_duration_s": 3600,
"shared_service_duration_s": 0,
"time_window": "08:00:00-14:00:00",
"total_service_duration_s": 3600,
"trailer_decoupled": true,
"trailer_used": true,
"type": "anchor"
}
}
}
]
}
Depoda, eklentili rotalama görevleri çözülürken aşağıdaki alanlar ortaya çıkıyor:
Alan |
Açıklama |
|
Çekicinin garajdan nasıl rotaya çıktığını gösteriyor: treylerli veya treylersiz. |
|
Çekicinin depodan treylerle mi yoksa treylersiz mi ayrıldığını gösterir. |
|
Çekiciye yüklenecek siparişlerin listesi. |
|
Treylere yüklenecek siparişlerin listesi. |
Cevap parçası
{
"route": [
{
"arrival_time_s": 0,
"departure_time_s": 5040,
"load_to_head": [
"Order 5",
"Order 6",
"Order 7",
"Order 8"
],
"load_to_trailer": [
"Order 1",
"Order 2",
"Order 3",
"Order 4"
],
"node": {
"type": "depot",
"used_time_window": "00:00:00-1.23:59:59",
"value": {
"finish_service_duration_s": 1800,
"flexible_start_time": true,
"hard_window": true,
"id": "576",
},
"point": {
"lat": 53.400374288503,
"lon": 83.967696868016
},
"preliminary_service_duration_s": 0,
"ref": "",
"service_duration_s": 5040,
"time_window": "00:00:00-1.23:59:59",
"total_service_duration_s": 5040,
"trailer_decoupled": false,
"trailer_used": true
}
}
]
}
Şema
Örnek 1
Örnekte, treylerli bir kamyonun üç siparişi teslim etmesi gerekiyor. Noktalardan birine treylerle yaklaşılabilir (allow_trailers
= true
), diğer ikisine yaklaşılamaz (allow_trailers
= false
). Ancak erişilemeyen yerlerin yakınında treylerin bir süreliğine bırakabileceği noktalar var (type = parking
).
Ortaya çıkan çözümde, kamyon önce bir park noktasına gidiyor, treyleri orada bırakıyor ve daha sonra erişilemeyen konuma yükünü indirmek için gidiyor. Yükü teslim ettikten sonra otoparka dönüyor, treyleri alıyor ve rota boyunca yoluna devam ediyor.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 2
Örnekte, bir treylerli kamyonun dört siparişi teslim etmesi gerekiyor. İki noktaya treyler ile yaklaşılamaz (allow_trailers
= false
), ancak diğer iki noktaya yaklaşılabilir (allow_trailers
= true
). Rota üzerinde treylerin uzun süre bırakılabileceği demirli bir konum (type = anchor
) bulunmaktadır.
Algoritma, erişilemeyen konumları dikkate alarak bir rota oluşturur. İlk olarak, kamyon demirli konuma varır ve treyleri bırakır. Daha sonra siparişleri treyler ile götüremeyeceği noktalara ulaştırıyor. Daha sonra treyler için demirli konuma geri dönüyor ve treylerle gidebileceği konumlara yükü götürüyor.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç
Örnek 3
Örnekte, treylerli bir kamyon, treyler ile ulaşılamayan noktalara dört sipariş teslim etmek zorundadır (allow_trailers
= false
). Rotada demirli konum (type = anchor
) bulunmaktadır. Bununla birlikte siparişlerin toplam ağırlığı aracın taşıma kapasitesinden çok daha yüksektir, yani kamyon bir treyleri kullanmadan tüm siparişleri teslim edemez.
İlk olarak, kamyon demirli konuma gelir, treyleri bırakır ve treyler olmadan iki siparişi teslim eder. Daha sonra demirli konuma geri döner, treylerden çekiciye yükleri aktarır ve kalan siparişleri teslim etmek için treylersiz tekrar ayrılır.
API isteği (JSON) ⋅ API yanıtı ⋅ Haritada aç