بهینهسازی مسیر پیک و تخصیص سفارش

اگر ده سفارش و سه پیک دارید، چند راه برای تقسیم و ترتیبدادنشان وجود دارد؟
عدد از چیزی که حدس میزنید بزرگتر است — آنقدر بزرگ که امتحانکردن همهٔ حالتها، حتی با سریعترین کامپیوترها، از عمر شما بیشتر طول میکشد. و این فقط ده سفارش است.
این خانواده از مسائل، دهههاست شناخته شده و جواب بهینهٔ قطعی برایشان در مقیاس واقعی پیدا نمیشود. پذیرفتن این واقعیت، اولین قدم درست در چنین پروژهای است.
هدف: بهاندازهٔ کافی خوب، سریع
تفاوت جواب بهینه با جوابی که یک الگوریتم خوب در چند ثانیه میدهد، معمولاً پنج تا ده درصد است. تفاوت هر دو با تخصیص دستی یا «هر که نزدیکتر بود»، معمولاً بیست تا چهل درصد.
پس تلاش برای رسیدن به آن پنج درصد آخر، تقریباً همیشه اسراف است. جواب خوب در سه ثانیه از جواب عالی در سه ساعت بهمراتب ارزشمندتر است — چون در عملیات واقعی، تا سه ساعت بعد دنیا عوض شده: سفارش جدید آمده، پیکی دیر کرده، آدرسی اشتباه بوده.
دو مسئلهٔ متفاوت که قاطی میشوند
تخصیص: کدام سفارش به کدام پیک؟
ترتیبدهی: پیکی که پنج سفارش دارد، به چه ترتیبی برود؟
اینها به هم وابستهاند اما یکی نیستند و در پیادهسازی بهتر است جدا حل شوند: اول تخصیص با یک معیار ساده، بعد ترتیبدهی برای هر پیک بهطور مستقل. حل همزمان هر دو، مسئله را چند برابر سختتر میکند بدون اینکه به همان نسبت جواب بهتر شود.
محدودیتهایی که همیشه فراموش میشوند
مسئلهٔ کتابی «کوتاهترین مسیر بین نقاط» است. مسئلهٔ واقعی اینها را هم دارد:
- پنجرهٔ زمانی. مشتری گفته بین ۴ تا ۶ عصر. سفارش غذا باید داغ برسد.
- ظرفیت. موتور سه بسته میبرد، وانت سی تا.
- نوع بار. یخچالی، شکستنی، سنگین.
- شیفت پیک. کسی که ساعت شش تمام میکند، نباید سفارش ساعت شش بگیرد.
- مبدأهای متعدد. در بازارگاه چندفروشنده، هر سفارش ممکن است از چند نقطه جمع شود — که مسئله را از مسیریابی ساده به مسئلهٔ برداشت و تحویل تبدیل میکند.
- ترافیک، که ثابت نیست. فاصلهای که ساعت ده صبح ده دقیقه است، ساعت شش عصر چهل دقیقه است.
آن مورد آخر مهمترین است: ماتریس فاصله باید زمانمحور باشد، نه مکانمحور. سامانهای که بر اساس کیلومتر بهینه میکند، در ساعت اوج مسیرهای بدی میسازد.
سفارش زنده، مسئلهٔ سختتر
اگر همهٔ سفارشها را صبح داشته باشید و برنامه بریزید — مثل پخش مویرگی — مسئله سخت است اما یک بار حل میشود.
اگر سفارشها لحظهای میآیند — مثل تحویل غذا — هر سفارش جدید باید تصمیم بگیرد که به کدام پیک اضافه شود، بدون اینکه بقیه را خراب کند. اینجا چند تصمیم اضافه لازم است:
صبر کنیم یا فوری بفرستیم؟ اگر سی ثانیه صبر کنید، شاید سفارش دیگری از همان منطقه بیاید و با هم بروند. اگر زیاد صبر کنید، مشتری اول ناراضی است. این پارامتر باید قابل تنظیم باشد و بر اساس داده تنظیم شود، نه بر اساس حدس.
تخصیص را قفل کنیم یا بازچینی کنیم؟ بازچینی جواب بهتری میدهد و پیک را گیج میکند. قاعدهٔ عملی: تا وقتی پیک به مبدأ نرسیده، تغییر آزاد است؛ بعدش قفل.
هوش مصنوعی کجا واقعاً کمک میکند
اینجا لازم است دقیق باشیم، چون این حوزه پر از ادعاست.
خود بهینهسازی مسیر، هوش مصنوعی نیست. الگوریتم است — روشهای ابتکاری شناختهشده که دهها سال است کار میکنند و به یادگیری ماشین نیازی ندارند.
آنچه یادگیری ماشین واقعاً بهتر انجام میدهد، پیشبینی ورودیهای همان الگوریتم است:
- زمان واقعی سفر بین دو نقطه در ساعت و روز مشخص، بر اساس دادههای خودتان. سرویسهای عمومی نقشه، زمان ترافیک شهرهای ایران را خوب تخمین نمیزنند و دادههای تاریخی خود شما دقیقتر است.
- زمان توقف. مدت تحویل در برج مسکونی با خانهٔ ویلایی فرق دارد و این از تاریخچه قابل یادگیری است.
- پیشبینی تقاضا، برای اینکه پیکها را پیش از موج در مناطق درست مستقر کنید.
- تشخیص آدرس اشتباه پیش از اعزام.
نکتهٔ مشترک: مدل، ورودیِ بهتری به الگوریتم میدهد؛ جای الگوریتم را نمیگیرد. و همهشان به دادهای نیاز دارند که فقط از عملیات خودتان میآید. اگر هنوز داده ندارید، اول ثبتش کنید — همان نکتهای که در از نمونهٔ اولیه تا محصول گفتیم.
مسئلهٔ آدرس در ایران
بندی که در هیچ منبع خارجی نیست و در عمل بزرگترین منبع خطاست.
آدرسهای ایرانی اغلب توصیفیاند: «خیابان فلان، کوچهٔ سوم، بعد از سوپرمارکت، پلاک ۱۲، طبقهٔ سوم». تبدیل این به مختصات، خودکار قابل اعتماد نیست.
سه کاری که کمک میکند:
انتخاب نقطه روی نقشه، اجباری. بهترین راهحل و سادهترین. متن آدرس برای پیک بماند، مختصات برای الگوریتم.
ذخیرهٔ مختصات اصلاحشده. وقتی پیک به مقصد رسید، موقعیتش را ثبت کنید و دفعهٔ بعد از همان استفاده کنید. سامانه بهمرور آدرسهای تکراری را یاد میگیرد.
تشخیص ناسازگاری. اگر مختصات با متن آدرس نمیخواند — مثلاً شهر متفاوت است — پیش از اعزام هشدار بدهید، نه بعد از اینکه پیک ده کیلومتر رفت.
از کجا شروع کنیم
مسیر پیشنهادی، به ترتیب بازده:
۱. تخصیص ساده و ثبت کامل داده. نزدیکترین پیک آزاد، و ثبت همهچیز: زمان اعزام، زمان رسیدن، مسیر واقعی. ۲. ترتیبدهی چند توقفی با یک روش ابتکاری استاندارد. اولین جهش واقعی همینجاست. ۳. ماتریس زمان از دادههای خودتان، بهجای فاصلهٔ هوایی یا تخمین عمومی. ۴. محدودیتهای واقعی: پنجرهٔ زمانی، ظرفیت، شیفت. ۵. مدلهای پیشبینی، وقتی چند ماه داده دارید.
قدمهای اول و سوم بیشترین نسبت اثر به هزینه را دارند. قدم پنجم جذابترین است و بدون قدمهای قبلی، چیزی برای بهتر کردن ندارد.
اگر پروژهای در این حوزه دارید و میخواهید بدانید کدام قدم برایتان صرف میکند، تیم هوش مصنوعی ما معمولاً کار را با همان تحلیل دادهٔ موجود شروع میکند — چون تا نبینیم چه ثبت شده، هر پیشنهادی حدس است.