Periyodik ek planlama

Ek planlama, önceden planlanmış bir rotaya siparişlerin eklenmesidir. Ek planlama görevi aşağıdaki durumlarda ortaya çıkar:

  • siparişlerin bir kısmı halihazırda rotalara tahsis edilmiştir, ancak yeni siparişler ortaya çıkmıştır;
  • kurye, bekleme süresini en aza indirmek için siparişlerin bir kısmını bırakır ve yeni siparişler rotaya daha sonra eklenir.

Not

Bu senaryo yalnızca API istekleri aracılığıyla uygulanır.

Yeni planlama görevine aktarılır:

  • genel sipariş listesi (eski ve yeni siparişler);
  • bu rotanın değiştirilip değiştirilemeyeceğini belirleyen bir önceki planlama ve ayarlama aşamasında elde edilen rota;
  • kuryenin mevcut konumu (gerekirse).

Ek planlama görevi zaman içinde farklı noktalarda ve farklı koşullar altında ortaya çıkabilir:

  • Seçenek 1: Kurye depodadır, halihazırda dağıtılan siparişlerin sırası sabittir, yeni siparişler rotanın sonuna eklenir:

  • Seçenek 2: Kurye depodadır, halihazırda dağıtılmış siparişlerin sırası sabit değildir, yeni siparişler herhangi bir sırada eklenir:

  • Seçenek 3: Kurye yolda, halihazırda dağıtılan siparişlerin sırası sabittir, yeni siparişler rotanın sonuna eklenir:

  • Seçenek 4: Kurye yolda, siparişlerin bir kısmı zaten yerine getirildi, kalan siparişlerin sırası sabit değil, yeni siparişler herhangi bir sırada rotanın geri kalanına eklenir:

– yeni sipariş.

– sabit bir sırada sipariş.

– sabit sırası olmayan sipariş.

Tüm seçeneklerde, rotanın ortasında ek bir depoya uğramak mümkündür.

Ek planlama kullanılıyorsa, ilk sipariş tahsisinde aşağıdakiler düşünülmelidir:

  • yeni siparişler için araçta boş alan bulunması (daha küçük kapasite belirtilmeli);
  • boş zaman mevcudiyeti (azaltılmış kurye vardiya süresi belirtilmeli);
  • yeni siparişlerin kuryeler arasında eşit dağılımı (dengeleme seçenekleri).

Uyarı

İlk planlamada araçların yapay olarak az yüklenmesi için getirilen tüm ek kısıtlamalar ek planlamada kaldırılmalıdır.

Siparişlerin herhangi bir seçili araçlara eklenmesini önlemek için etiket işlevini kullanabilirsiniz. Ayrıntılar için Araç etiketleri bölümüne bakın.

Senaryo nasıl gerçekleştirilir

Ek planlama sorgusunda nesne locations ile daha önce planlanmış olanlar ve ek planlanması gerekenler olmak üzere genel bir sipariş listesinin iletilmesi gerekir.

Aynı şekilde sorguya, başlangıçta planlanan seferlerle ilgili verileri içeren bir nesne initial_routes de eklenmelidir. Bu veriler, ilk planlama görevi kapsamındaki API yanıtında yer alan result.routes nesnesinden kopyalanabilir. Her sefer için nesnelerin aktarılması gerekir:

  • route – seferde durakların dizisi,
  • run_number – sefer numarası,
  • shift – kurye deği̇şi̇kli̇ği̇,
  • vehicle_id – kurye tanımlayıcısı.

Siparişlerin sırasını sabitleme

Önceden planlanmış bir uçuşu değiştirmeden tutmak istiyorsanız, initial_routes nesnesinde immutable = true özniteliğini belirtin. Bir seferdeki durakların sırasını değiştiremiyorsanız, fixed_order = true olarak belirtin.

Seferin tamamını değil de bir kısmını (ardışık duraklar dizisi) değiştirmek istemiyorsanız, bu durakların her biri için node.value.fixed_position = true belirleyin.

Siparişin başlangıçta planlanan kurye tarafından teslim edilmesi için, sipariş için fixed_vehicle = true; siparişin aynı vardiyada bırakılması için, fixed_shift = true; aynı seferde bırakılması için fixed_run = true belirtin. Yukarıdaki özelliklerden hiçbiri belirtilmemişse, yeni siparişler eski siparişlerle rastgele sırayla karıştırılabilir.

Kuryenin mevcut konumu

Kurye yoldaysa, ek planlama sırasında mevcut konumunu dikkate almak önemlidir. Kuryenin mevcut konumu type = courier türünde ayrı bir noktada node ayarlanır – value.location_id alanında ya kurye tarafından ziyaret edilen son siparişin tanımlayıcısını ya da kuryenin koordinatlarını içeren noktanın tanımlayıcısını belirtmelisiniz. Kuryenin bu noktada kalma süresi actual_departure_time_s alanında belirtilir. Ek planlama sırasında bazı siparişler zaten teslim edilmişse, ziyaret süreleri aşağıdaki alanlarda belirtilir:

  • actual_arrival_time_s – siparişe varış süresi;
  • actual_service_start_time_s – siparişe hizmet vermeye başlama zamanı;
  • actual_departure_time_s – siparişten ayrılma zamanı.

arrival_time_s ve departure_time_s alanları da kullanılabilir. Bu alanlar ya seferdeki tüm noktalar için belirtilmeli ya da hiçbiri belirtilmemelidir. Varış ve ayrılış saatleri tüm siparişler için benzersiz olmalıdır. Bu nedenle ek planlama sırasında çoklu sipariş kullanmamak daha iyidir. Kuryenin vardiyası ilk siparişinin ziyaret saatinden daha geç başlarsa, ek programlama sırasında bir hata meydana gelecektir.

Yüklenen siparişler

Depodan ayrılmadan önce araca yüklenen siparişlerin tanımlayıcıları node noktası için loaded_orders alanında depot tipi ile listelenmelidir. Yeni sipariş listede loaded_orders yoksa, kuryenin bu siparişi yüklemek için depoya ek bir yolculuk yapması planlanacaktır. loaded_orders ayarlanmazsa, tüm siparişlerin depoda yüklendiği varsayılır.

Bir sipariş ilk planlandığında bir araca yüklenebilir, ancak ek planlamada tahsis edilmemiş olabilir. Bununla birlikte sipariş araçta yer kaplayacaktır. Algoritmanın bunu dikkate almasını sağlamak için, sipariş için keep_in_vehicle = true özniteliğini belirtin.

Not

Ek planlamaya sahip siparişlerin sayısı, verilen zaman aralıklarında mevcut kuryelerin teslimat kapasitesini aşarsa, bazı siparişler tahsis edilmemiş olarak kalabilir. Siparişin mutlaka teslim edilmesi gerekiyorsa, sipariş için undroppable = true belirtin.

Örnek

İlk planlamada kurye depodan 10 siparişi teslim alır ve teslim eder.

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

Ek planlamaya 4 sipariş daha eklendi. Ek planlama yapıldığında, kurye ilk iki siparişi çoktan teslim etmişti. Bunu belirtmek için, initial_routes nesnesi depo ve ilk iki sipariş için fixed_position = true belirtir. Yeni çözümde geri kalan siparişlerin teslimat sırası değişti.

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

Destek birimine yaz