تحویل آخرین مایل از چندین انبار در پایتون

مدلسازی ریاضی، حل، و تجسم با استفاده از PuLP و VeRoViz

عکس مارسین جوزویاک on می Unsplash

با رشد سریع خرید آنلاین، شرکت ها با تقاضای فزاینده ای برای تحویل سریع و کم هزینه مواجه هستند. تحویل مایل آخر به مرحله نهایی زنجیره تامین اشاره دارد، جایی که بسته ها از انبار به درب منزل تحویل می شوند. این یک مشکل تاکتیکی پیچیده است که شامل تعیین مشترک نحوه تخصیص بسته ها به کامیون ها و نحوه مسیریابی کامیون ها به مشتریان است. این نیز یک مشکل بسیار گران است، با تخمین های اخیر قرار دادن تحویل آخرین مایل با 53٪ از کل هزینه حمل و نقل. این امر بر نیاز به ایجاد برنامه های تحویل کارآمد تأکید می کند.

شکل کلاسیک این مشکل شامل یک انبار منفرد (معمولا یک انبار) است که تمام کامیون ها از آن بارگیری می شوند و در هنگام تحویل به خارج ارسال می شوند. یک نسخه پیچیده تر شامل انبارهای متعدد در مجاورت یکدیگر است - برای مثال، زمانی که زنجیره های خرده فروشی از مکان های فروشگاه تحویل می گیرند. در این حالت، ممکن است به یک مشتری معین توسط بیش از یک انبار خدمات داده شود، بنابراین شرکت باید تعیین کند که کدام انبارها به کدام مشتریان ارسال خواهد کرد. گاهی اوقات هیچ دپوی واحدی تمام اقلام سفارش مشتری را در دسترس نخواهد داشت و باید سفارش بین چندین انبار تقسیم شود.

در زیر به نحوه مدل‌سازی و حل این فرم پیچیده‌تر مشکل چند انباری با استفاده از آن می‌پردازیم برنامه نویسی عدد صحیح (IP). این مشکل دارای جنبه های زیر است:

  1. مجموعه ای از کامیون ها، انبارها، مشتریان و محصولات وجود دارد.
  2. هر مشتری مقدار مشخصی از هر محصول را سفارش داده است و در هر دپو مقدار مشخصی از هر محصول موجود است.
  3. هر کامیون دقیقاً در یک انبار مستقر است (به این معنی که مسیر آن همیشه در پایگاه خود شروع می شود و به پایان می رسد). علاوه بر این، کامیون ها نباید یکسان باشند - هر کامیون ممکن است ظرفیت حجم و هزینه هر مایل متفاوتی داشته باشد.

هدف این است که به طور همزمان 1) محصولاتی که باید از هر انبار به هر مشتری ارسال شود، 2) نحوه تخصیص بسته ها به کامیون ها، و 3) نحوه مسیریابی هر کامیون به مشتریان خود، همه به گونه ای که کمترین مقدار را به دست آورد، تعیین شود. هزینه تحویل امکان پذیر است

ما یک مدل IP را پیاده سازی و حل خواهیم کرد پالپ و استفاده کنید VeRoViz برای تجسم مسیرهای کامیون برای شروع، کتابخانه های لازم را وارد می کنیم:

یک سناریو نمونه

یک شرکت مبلمان دارای دو انبار در منطقه Fredericksburg، VA با هشت سفارش مشتری است که باید تحویل داده شود. داده ها و نقشه در زیر نشان داده شده است. توجه داشته باشید: La nodesArray متغیر با استفاده از ابزار اسکچ VeRoViz، که ایجاد گرافیکی داده های مکان و صادرات به پایتون را امکان پذیر می کند.

نقشه سناریو: نشانگرهای آبی نشانگر انبارها و نشانگرهای نارنجی نشانگر مشتریان هستند.

مدل سازی مسئله

در حالی که روش‌های مختلفی وجود دارد که می‌توان به این مشکل برخورد کرد، ما یک مدل برنامه‌نویسی عدد صحیح را می‌سازیم و حل می‌کنیم. این یک مشخصات ریاضی دقیق از مسئله را ارائه می دهد و به نمونه های مسئله با اندازه متوسط ​​اجازه می دهد تا با استفاده از حل کننده های خارج از قفسه به طور بهینه حل شوند (اگرچه فراتر از محدوده ما، نمونه های بزرگتر اغلب نمی توانند به سرعت با حل کننده های خارج از قفسه حل شوند و به ویژه نیاز دارند. الگوریتم های حل طراحی شده). ما با ورودی های مدل شروع می کنیم:

بعد، متغیرهای تصمیم خود را تعریف می کنیم:

در نهایت مدل بهینه سازی را تعریف می کنیم:

در این مدل، تابع هدف (1) که می‌خواهیم آن را به حداقل برسانیم، صرفاً مجموع تمام هزینه‌های سفر است. محدودیت های موجود در (2) تضمین می کند که برای هر مکان، اگر کامیون خاصی به محل برسد، کامیون نیز حرکت می کند. محدودیت های موجود در (3) تضمین می کند که هیچ کامیونی از انباری که پایگاه آن نیست خارج نمی شود. محدودیت های موجود در (4) تضمین می کند که هر مشتری تمام محصولاتی را که سفارش داده است دریافت می کند. محدودیت های موجود در (5) تضمین می کند که هیچ مدار فرعی در هیچ مسیری رخ نمی دهد. از آنجایی که گروهی از مکان‌ها که یک مدار را تشکیل می‌دهند، دارای تعداد لبه‌های یکسانی با گره‌ها هستند، ما از وقوع این امر در هر زیرمجموعه غیرخالی مشتریان برای هر کامیون جلوگیری می‌کنیم. محدودیت‌های (6) تضمین می‌کند که برای هر انبار و محصول، مجموع واحدهای محصول بارگیری شده در کامیون‌ها و ارسال شده به مشتریان از آن انبار از میزان موجود در انبار تجاوز نمی‌کند. محدودیت های موجود در (7) تضمین می کند که هیچ واحدی از هیچ محصولی روی کامیون بارگیری نمی شود و برای مشتری ارسال می شود مگر اینکه کامیون از مشتری بازدید کند. محدودیت های (8) تضمین می کند که برای هر کامیون، حجم کل محصولات بارگیری شده در کشتی از ظرفیت آن تجاوز نمی کند. در نهایت، محدودیت‌های موجود در (9-10) دامنه‌های متغیرهای تصمیم را مشخص می‌کند (باینری برای x متغیرها؛ عدد صحیح غیر منفی برای u متغیرها).

برای سهولت و قابلیت استفاده مجدد، یک تابع پایتون برای ساختن نمونه هایی از این مدل برای داده های ورودی خاص با استفاده از پالپ:

حل مشکل سناریوی مثال

اکنون که مدل را فرموله کرده ایم، می توانیم از آن برای یافتن راه حل بهینه برای سناریوی خود استفاده کنیم. در زیر از حل کننده CBC استفاده می کنیم که همراه با آن است پالپ. این ممکن است 15 تا 45 ثانیه طول بکشد تا راه حل بهینه پیدا شود. اگر به قدرتمندتر دسترسی دارید CPLEX حل کننده، می توانید به جای آن از خطوط نظر داده شده استفاده کنید تا راه حلی بسیار سریعتر به دست آورید.

با اجرای این پیغام خروجی زیر به ما می دهد:

استخراج و مشاهده برنامه های سفر کامیون

حال باید برنامه های سفر کامیون را از متغیرهای تصمیم در مدل حل شده استخراج کنیم. برای هر کامیون، ما می خواهیم بدانیم که چه محصولاتی را باید در هر ایستگاه تحویل دهیم. برای به دست آوردن این اطلاعات، باید متغیرهای تصمیم غیر صفر را غربال کنیم.

این برنامه سفرهای کامیون زیر را ایجاد می کند:

توجه داشته باشید که مشتری C1 توسط دو کامیون (T2 و T4) بازدید می شود - از این رو، یک سفارش تقسیم می شود. با توجه به نیازهای مشتری و منابع موجود، این تصمیم بهینه است. این ممکن است زمانی نیز ضروری باشد که، برای مثال، یک سفارش شامل مجموعه‌ای از اقلام است که در هیچ انباری یافت نمی‌شود.

تجسم مسیرهای کامیون

به عنوان آخرین مرحله، ما استفاده می کنیم VeRoViz برای ایجاد یک تجسم خوب برای مسیرهای کامیون:

نتیجه

اگرچه تغییرات زیادی در مورد این مسئله امکان پذیر است، این مثال نشان می دهد که چگونه می توانیم چنین مشکلی را با استفاده از برنامه نویسی عدد صحیح مدل سازی و حل کنیم. همچنین نشان می دهد که چگونه می توان از پایتون برای چسباندن اجزای قدرتمندی مانند پالپ و VeRoViz برای ایجاد سریع سیستم های پشتیبانی تصمیم گیری مفید. تحویل مبارک!

کد منبع را می توان در یک نوت بوک مشاهده کرد اینجا کلیک نمایید یا دانلود شده است اینجا کلیک نمایید.

آخرین مایل تحویل از چندین انبار در پایتون بازنشر شده از منبع https://towardsdatascience.com/last-mile-delivery-from-multiple-depots-in-python-26c4325407b4?source=rss—-7f60cf5620c9—4 todatascience.com/feed

<!–

->

تمبر زمان:

بیشتر از مشاوران بلاک چین