Olası lojistik senaryolar

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:

  1. 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.

  2. 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 noktada pickup sona erecektir. Ayrıca, hiçbir şeyin ek olarak yapılandırılması gerekmez.

  3. 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 teslimat pickup_must_reach_depot = true belirtiliyor veya delivery_deadlinesipariş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şi pickup_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 çoklu delivery.

Ö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:

  1. Bir kurye, 2 numaralı depodan 1 ve 2 numaralı siparişleri işlemektedir.
  2. 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:

  1. Kuryeler ana depo 1’den başlar.

  2. Bazı kuryeler doğrudan teslimata gider.

  3. Bazı kuryeler, bazı müşterilerin siparişlerinin bulunduğu depo 2’ye gönderi almak için uğrar.

  4. 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ğer false.

  • 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 veya vehicle.finish_run_in_starting_depot – rotayı veya seferi kuryenin başladığı aynı depoda tamamlama ihtiyacı. Varsayılan değer false’dir. Bu parametreleri yalnızca allow_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:

  1. Depo 2’de başlar ve burada 2, 3 ve 4 numaralı siparişleri yükler.
  2. Yol üzerinde 3 nolu siparişi teslim eder.
  3. Ek gönderi almak için Depo 1’e uğrar.
  4. Kalan siparişleri teslim eder.

Planlama sonucunda picked_orders alanında aşağıdaki değerleri göreceksiniz:

  • Depot 2 için Order 3, Order 4, Order 2;
  • Order 1 için Depot 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:

  1. Depo 2’de başlar ve burada 2, 3 ve 4 numaralı siparişleri yükler.
  2. Depo 1’e ek yükleme için uğrar ve buradan sipariş 1’i alır.
  3. 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:

  1. Depo 2’de başlar ve buradan sipariş 1’i alır.
  2. Sırayla 3. ve 4. gel al siparişlerini alır.
  3. Ara depo 3’e gider, burada sipariş 3’ü bırakır ve sipariş 2’yi alır.
  4. Sırayla 2 ve 1 numaralı siparişleri alır.
  5. 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:

  1. 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.
  2. 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).

  • 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

Ş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.

    API isteği (JSON)API yanıtıHaritada aç

  • 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:

    2. Çapraz yükleme deposundan teslim edilmesi gereken siparişler için:

    Çapraz yükleme işlemlerini gerçekleştirmek için delivery_deadline ve depot_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çin vehicle.max_runs = 2 belirtilmiştir.

    API isteği (JSON)API yanıtıHaritada aç

Ş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 ve transit 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ıca location.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 parametre vehicle.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/veya vehicle.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 ve max_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 ve max_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 ve max_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 ve duration_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 ve distance_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 gelen search_radius_m değerini aşarsa, search_radius_m ila soft_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

trailer_used

Çekicinin depodan treylerle mi yoksa treylersiz mi ayrıldığını gösterir. true/false değerlerini alır. Çekici treylersiz yola çıktıysa, erişim yolu olmayan bir yere varabilir (trailer_used = false).

trailer_decoupled

Çekicinin treylerle yola çıktığı bir durumu anlatır. Yolda treyleri ayırıp ayırmadığını gösteriyor. true/false değerlerini alır. Treyleri ayırdıysa, çekici erişimi olmayan bir yere varabilir (trailer_decoupled = true).

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

anchor_mode

Demirli bağlantı noktası kullanım modu. Değerleri alır:

  • Decoupling – treyleri ayır ve yola devam et.
  • Coupling – treyleri bağla ve yola devam et.
  • Rolling – treyleri bağla, aktarma yap, treyleri ayır ve yola devam et.

load_to_head

Treylerden çekiciye aktarılacak siparişlerin bir listesini içerir (yalnızca anchor_mode = Rolling noktaları için). Bununla birlikte sipariş çekiciye kısmen aktarılabilir. Tamamı taşındıktan sonra çekicinin kapasitesi aşılacaksa, bu tür bir siparişin bir kısmı treylerde kalacaktır .

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

trailer_used

Çekicinin garajdan nasıl rotaya çıktığını gösteriyor: treylerli veya treylersiz. true/false değerlerini alır. Rota sırasında değişebilir .

trailer_decoupled

Çekicinin depodan treylerle mi yoksa treylersiz mi ayrıldığını gösterir. true/false değerlerini alır. Rota sırasında değişebilir .

load_to_head

Çekiciye yüklenecek siparişlerin listesi.

load_to_trailer

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ç

Destek birimine yaz