Python'da Birden Fazla Depodan Son Adım Teslimatı

PuLP ve VeRoViz Kullanarak Matematiksel Modelleme, Çözüm ve Görselleştirme

Fotoğraf Marcin Jozwiak on Unsplash

Çevrimiçi alışverişin hızla büyümesiyle birlikte şirketler, hızlı ve düşük maliyetli teslimata yönelik giderek artan taleplerle karşı karşıya kalıyor. Son mil teslimatı Paketlerin depodan müşterinin kapısına kadar teslim edildiği tedarik zincirinin son aşamasını ifade eder. Bu, paketlerin kamyonlara nasıl atanacağını ve kamyonların müşterilere nasıl yönlendirileceğini ortaklaşa belirlemeyi içeren karmaşık bir taktiksel sorundur. Aynı zamanda çok pahalı bir sorundur son tahminler Son mil teslimatını toplam nakliye maliyetinin %53'üne yerleştirmek. Bu, verimli teslimat planları oluşturma ihtiyacının altını çiziyor.

Bu problemin klasik şekli, tüm kamyonların yüklendiği ve teslimatlarına gönderildiği tek bir depoyu (genellikle bir depo) içerir. Daha karmaşık bir versiyon, örneğin perakende zincirlerinin mağaza konumlarından teslimat yaptığı durumlarda, birbirine yakın birden fazla depoyu içerir. Bu durumda, belirli bir müşteriye birden fazla depodan hizmet verilebilir, dolayısıyla şirketin hangi depoların hangi müşterilere sevkiyat yapacağını da belirlemesi gerekir. Bazen müşterinin siparişindeki tüm ürünler tek bir depoda mevcut olmayabilir ve bu da siparişin birden fazla depoya bölünmesini gerektirir.

Aşağıda bu daha karmaşık çok depolu problem formunun nasıl modelleneceğini ve çözüleceğini tartışacağız. Tamsayılı programlama (IP). Bu sorunun aşağıdaki yönleri vardır:

  1. Bir dizi kamyon, depo, müşteri ve ürün var.
  2. Her müşteri her üründen belirli miktarda sipariş vermiştir ve her depoda her üründen belirli miktarda mevcuttur.
  3. Her kamyon tam olarak bir depoda bulunur (yani rotası her zaman üssünde başlar ve biter). Üstelik kamyonların aynı olması gerekmez; her kamyonun farklı hacim kapasitesi ve mil başına maliyeti olabilir.

Amaç, 1) her depodan her müşteriye gönderilecek ürünleri, 2) paketlerin kamyonlara nasıl atanacağını ve 3) her kamyonun müşterilerine nasıl yönlendirileceğini eş zamanlı olarak en düşük toplamı sağlayacak şekilde belirlemektir. Teslimat maliyeti mümkün.

Bir IP modelini uygulayıp çözeceğiz PUP ve kullan VeRoViz Kamyon rotalarını görselleştirmek için. Başlamak için gerekli kütüphaneleri içe aktarıyoruz:

Örnek Senaryo

Bir mobilya şirketinin Fredericksburg, VA bölgesinde teslim edilmesi gereken sekiz müşteri siparişi bulunan iki deposu vardır. Veriler ve harita aşağıda gösterilmiştir. Not: The düğümlerDizi değişken ile hazırlanmıştır. VeRoViz Çizim Aracıkonum verilerinin grafiksel olarak oluşturulmasını ve Python'a aktarılmasını sağlar.

Senaryo Haritası: Mavi işaretleyiciler depoları, turuncu işaretleyiciler ise müşterileri gösterir.

Problemin Modellenmesi

Bu soruna yaklaşmanın çeşitli yolları olsa da, bir tamsayı programlama modeli oluşturup çözeceğiz. Bu, problemin kesin bir matematiksel spesifikasyonunu verir ve orta büyüklükteki problem örneklerinin kullanıma hazır çözücüler kullanılarak en iyi şekilde çözülmesine olanak tanır (her ne kadar bizim kapsamımız dışında olsa da, daha büyük örnekler genellikle hazır çözücülerle hızlı bir şekilde çözülemez ve özel olarak gerektirir). -tasarlanmış çözüm algoritmaları). Model girdileriyle başlıyoruz:

Daha sonra karar değişkenlerimizi tanımlıyoruz:

Son olarak optimizasyon modelini tanımlıyoruz:

Bu modelde, minimize etmek istediğimiz amaç fonksiyonu (1), katlanılan tüm seyahat maliyetlerinin toplamıdır. (2)'deki kısıtlamalar, her konum için belirli bir kamyonun konuma ulaşması durumunda kamyonun da ayrılmasını sağlar. (3)'teki kısıtlamalar, hiçbir kamyonun kendi üssü olmayan bir depodan ayrılmamasını sağlar. (4)'teki kısıtlamalar her müşterinin sipariş ettiği tüm ürünleri almasını sağlar. (5)'teki kısıtlamalar herhangi bir rotada alt devrelerin oluşmamasını sağlar. Bir devre oluşturan bir grup konum, düğümlerle aynı sayıda kenara sahip olacağından, bunun her kamyon için boş olmayan tüm müşteri alt kümelerinde meydana gelmesini önlüyoruz. (6)'daki kısıtlamalar, her bir depo ve ürün için kamyonlara yüklenen ve o depodan müşterilere gönderilen toplam ürün miktarının depodaki kullanılabilirliği aşmamasını sağlar. (7)'deki kısıtlamalar, kamyon müşteriyi ziyaret etmediği sürece herhangi bir ürünün hiçbir biriminin bir kamyona yüklenmemesini ve müşteriye sevk edilmemesini sağlar. (8)'deki kısıtlamalar, her bir kamyon için, gemiye yüklenen ürünlerin toplam hacminin, kamyonun kapasitesini aşmamasını sağlar. Son olarak, (9-10)'daki kısıtlamalar karar değişkenleri için alanları belirtir (ikili x değişkenler; için negatif olmayan tamsayı u değişkenler).

Kolaylık ve yeniden kullanılabilirlik için, belirli girdi verileri için bu modelin örneklerini oluşturmak üzere bir Python işlevi oluşturacağız. PUP:

Örnek Senaryo Problemini Çözme

Artık modeli formüle ettiğimize göre, onu senaryomuz için en uygun çözümü bulmak için kullanabiliriz. Aşağıda, birlikte verilen CBC çözücüyü kullanıyoruz PUP. En uygun çözümü bulmak 15-45 saniye sürebilir. Daha güçlü olana erişiminiz varsa CPLEX çözücüde, çok daha hızlı bir çözüme ulaşmak için yorum yapılan satırları kullanabilirsiniz.

Bunu çalıştırmak bize aşağıdaki çıktı mesajını verir:

Kamyon Yol Programlarını Çıkarma ve Görüntüleme

Şimdi çözülmüş modeldeki karar değişkenlerinden kamyon güzergahlarını çıkarmamız gerekiyor. Her kamyonun duraklarını ve her durakta hangi ürünlerin teslim edileceğini bilmek istiyoruz. Bu bilgiyi elde etmek için sıfır olmayan karar değişkenlerini elememiz gerekir.

Bu, aşağıdaki kamyon güzergahlarını oluşturur:

C1 müşterisinin iki kamyon (T2 ve T4) tarafından ziyaret edildiğini ve dolayısıyla bölünmüş bir sipariş olduğunu unutmayın. Eş zamanlı müşteri talepleri ve mevcut kaynaklar göz önüne alındığında, bunun optimal bir karar olduğu ortaya çıkıyor. Bu, örneğin bir siparişin tek bir depoda bulunmayan bir dizi öğeyi içermesi durumunda da gerekli olabilir.

Kamyon Rotalarını Görselleştirme

Son adımımız olarak şunu kullanıyoruz: VeRoViz Kamyon rotalarına yönelik güzel bir görselleştirme oluşturmak için:

Sonuç

Bu problemin birçok varyasyonu mümkün olmasına rağmen, bu örnek böyle bir problemi tamsayılı programlama kullanarak nasıl modelleyip çözebileceğimizi göstermektedir. Ayrıca Python'un aşağıdaki gibi güçlü bileşenleri bir araya yapıştırmak için nasıl kullanılabileceğini de gösteriyor: PUP ve VeRoViz hızlı bir şekilde faydalı karar destek sistemleri oluşturmak. Mutlu teslimat!

Kaynak kodu bir not defterinde görüntülenebilir okuyun veya indirildi okuyun.

Python'daki Birden Çok Depodan Son Kilometre Teslimatı Kaynak https://towardsdatascience.com/last-mile-delivery-from-multiple-depots-in-python-26c4325407b4?source=rss—-7f60cf5620c9—4 adresinden https:// aracılığıyla yayımlandı. doğrudatascience.com/feed

<!–

->

Zaman Damgası:

Den fazla Blockchain Danışmanları