این راهنما استفاده های احتمالی از ویژگی های انتقال را نشان می دهد. این به شما یاد می دهد که چگونه سناریوهای دنیای واقعی را بر اساس دو مثال مدل کنید: گنجاندن زمان پارک خودرو در مسیرهای بهینه شده و اطمینان از اینکه هر مسیر با بازدید از یک مکان خاص به پایان می رسد.
قبل از شروع
شما از ویژگیهای انتقال برای اضافه کردن هزینهها و تأخیرهای خاص مدل به برخی انتقالها در مسیرهای بهینهسازی شده استفاده میکنید. این هزینه ها و تأخیرها به مدت زمان انتقال و هزینه های محاسبه شده از داده های نقشه بر اساس پارامترهای وسیله نقلیه مورد استفاده اضافه می شوند.
انتقال بخشی از مسیر است که یک مکان را به مکان بعدی متصل می کند.
مکان به هر یک از نقاط زیر در مسیر وسیله نقلیه اشاره دارد:
- نقطه شروع مسیر.
- توقفی که در آن وانت یا تحویل انجام می شود.
- نقطه پایان مسیر.
شما با افزودن آنها به لیست ShipmentModel.transition_attributes
، تمام ویژگی های انتقال را برای مدل تعریف می کنید. هر عنصر از لیست یک مجموعه از ویژگیهای انتقال را تعریف میکند و با انتقالها در مسیرها با استفاده از برچسبهای محل شروع و مکان پایان انتقال مطابقت داده میشود. برای کسب اطلاعات بیشتر در مورد ویژگی های انتقال، به مستندات مرجع برای TransitionAttributes
مراجعه کنید.
مدلسازی سناریوهای دنیای واقعی
این بخش دو مثال کوچک از نحوه پیاده سازی محدودیت های کسب و کار در دنیای واقعی با استفاده از ویژگی های انتقال را نشان می دهد.
زمان را برای پارکینگ رزرو کنید
در این سناریو، راننده باید قبل از اینکه بتواند از مکان A بازدید کند، وسیله نقلیه را پارک کند. مکان B در نزدیکی است و راننده می تواند برای هر دو بازدید از یک مکان پارک استفاده کند. اگر راننده بلافاصله بعد از A به B مراجعه کند، در زمان صرفه جویی می کند زیرا نیازی به ترک محل پارک و پارک مجدد خودرو ندارد. در Route Optimization API، میتوانید از ویژگیهای انتقال برای اضافه کردن زمان اضافی برای پارک خودرو استفاده کنید، فقط زمانی که راننده از یک نقطه پارک به نقطه دیگر حرکت میکند.
وقتی زمان پارک را جدا از مدت زمان بازدید مدل میکنید، مسیرهایی را ایجاد میکنید که بازدیدهایی که از پارکینگ یکسانی گروهبندی میشوند زمان کمتری میبرند. شما مدل را دقیقتر میکنید و همچنین باعث میشوید بهینهساز مسیرهایی را که بازدیدها در آن گروهبندی میشوند ترجیح دهد.
برای انجام این کار در درخواست Route Optimization API از مراحل زیر استفاده کنید:
فقط برای زمان مورد نیاز برای انجام بازدید
VisitRequest.duration
استفاده کنید. مثلا بسته را تحویل بگیرید و از مشتری امضا بگیرید.برای هر نقطه پارک متمایز استفاده شده در مدل، از یک برچسب جدید استفاده کنید که برای هیچ چیز دیگری در مدل استفاده نمی شود، به عنوان مثال
PARKING_123
.این تگ را به موارد زیر اضافه کنید:
VisitRequest.tags
در تمام درخواست های بازدید که از این محل پارکینگ استفاده می کنند.اگر وسیله نقلیه مسیر خود را از این نقطه پارکینگ شروع کند،
Vehicle.start_tags
Vehicle.end_tags
اگر وسیله نقلیه شروع شود مسیر خود را در این نقطه پارکینگ به پایان می رساند.
برای هر تگ پارکینگ جدید، یک ورودی به
ShipmentModel.transition_attributes
اضافه کنید که با انجام کارهای زیر، تاخیری برای پارک کردن هنگام آمدن از یک نقطه پارکینگ دیگر اضافه میکند:TransitionAttributes.excluded_src_tag
وTransitionAttributes.dst_tag
را رویPARKING_123
تنظیم کنید.TransitionAttributes.delay
را روی زمان لازم برای پارک خودرو تنظیم کنید.
برای مثال، وقتی برچسب یک مکان
PARKING_123
است و پارک کردن وسیله نقلیه 150 ثانیه طول میکشد، ورودی زیر را بهShipmentModel.transition_attributes
اضافه میکنید:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
نظافت اجباری در انتهای مسیر
در این سناریو، وسیله نقلیه باید در انتهای مسیر با محدودیتهای اضافی زیر تمیز شود:
- تمیز کردن قبل از بازگشت به انبار خودرو در یک مرکز تمیز کردن تخصصی انجام می شود. مسیر بهینه شده از بهترین امکانات تمیز کردن بر اساس موقعیت مکانی آن و مکان های وانت و تحویل توسط وسیله نقلیه استفاده می کند.
- پس از تمیز کردن، خودرو نباید هیچ گونه تحویل یا تحویل اضافی انجام دهد.
- زمان رانندگی در آنجا و تمیز کردن وسیله نقلیه در ساعت کاری راننده حساب می شود و باید با حداکثر مدت مسیر مطابقت داشته باشد.
شما این نیاز را با اجازه دادن به مسیرهایی که خالی هستند یا آخرین بازدید آنها از یک مرکز تمیز کردن است، مدل میکنید. در Route Optimization API، شما این کار را با ممنوع کردن انتقال به نقطه پایانی مسیر از هر مکانی به جز از محل تمیز کردن یا از نقطه شروع مسیر انجام می دهید:
- دو تگ جدید را انتخاب کنید که در هیچ کجای مدل استفاده نمی شوند، به عنوان مثال
CLEANED
وROUTE_END
. اولی برای مکان هایی است که وسیله نقلیه تمیز می شود یا تمیز می شود و دومی برای انتهای مسیر است. - برای هر وسیله نقلیه، یک محموله جدید فقط برای تحویل اضافه کنید که نشان دهنده بازدید از یک مرکز تمیز کردن با ویژگی های زیر است:
- هر مکان تأسیسات تمیز کردن باید به عنوان درخواست بازدید از تحویل این محموله نشان داده شود.
-
CLEANED
بهVisitRequest.tags
هر درخواست بازدید از محموله تسهیلات تمیز کردن اضافه کنید. این نشان می دهد که وسیله نقلیه ای که از این مکان خارج می شود تمیز است. سایر درخواستهای بازدید در مدل نباید از این برچسب استفاده کنند تا خودرو هنگام خروج از آنها "غیر تمیز" در نظر گرفته شود. - با تنظیم
penalty_cost
آن بر روی یک عدد کوچک، به بهینه ساز اجازه دهید از این محموله صرف نظر کند، زمانی که وسیله نقلیه در غیر این صورت استفاده نشده است.
برای هر وسیله نقلیه،
CLEANED
بهVehicle.start_tags
اضافه کنید. این برای علامت گذاری تمیز بودن وسیله نقلیه قبل از انجام هر گونه تحویل یا تحویل، با فرض اینکه در پایان روز کاری قبل تمیز شده است، استفاده می شود و به آن اجازه می دهد از نقطه شروع به طور مستقیم به نقطه پایانی خود برود. حتی اگر چنین مسیرهایی در عمل اتفاق نیفتند، اجازه دادن به این سناریو به بهینهساز کمک میکند تا مسیرهای بهینهشده را با کارایی بیشتری جستجو کند.برای هر وسیله نقلیه،
ROUTE_END
بهVehicle.end_tags
اضافه کنید.یک ورودی جدید به
ShipmentModel.transition_attributes
اضافه کنید که از رسیدن وسایل نقلیه به نقطه پایانی وسیله نقلیه در زمانی که تمیز نیستند، با ویژگی های زیر منع می کند:TransitionAttributes.excluded_src_tag
را رویCLEANED
تنظیم کنید.TransitionAttributes.dst_tag
را رویROUTE_END
تنظیم کنید.TransitionAttributes.delay
را روی یک مقدار بزرگ تنظیم کنید. هنگامی که تاخیر را بیشتر از حداکثر مدت زمان مسیر می کنید، عملاً بهینه ساز را از استفاده از این انتقال در یک مسیر منع می کنید.
به عنوان مثال، زمانی که مقیاس زمانی مدل یک روز کاری است، میتوانید از تأخیر 24 ساعته (86400 ثانیه) برای جلوگیری از انتقال به انتهای مسیر از هر نقطهای به جز یک مرکز تمیز کردن و شروع مسیر استفاده کنید:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
نحوه انتخاب بین تاخیر و هزینه
انتخاب بین تاخیرها و هزینه ها به ماهیت منطق تجاری و محدودیت های اجرا شده بستگی دارد. تنظیم TransitionAttributes.delay
برای اجرای محدودیت های سخت یا بیان یک مبادله بر حسب زمان صرف شده بهترین است. TransitionAttributes.cost
هنگام اجرای ترجیحات نرم یا مبادلاتی که به عنوان هزینه اضافی بیان می شود، بهتر می شود. شما میتوانید تاخیرها و هزینهها را خودسرانه با هم ترکیب کنید که هم زمان صرف شده و هم هزینه مربوط میشود.
مثال تمیز کردن خودرو از تاخیر بسیار طولانی استفاده می کند، زیرا تمیز کردن خودرو در انتهای مسیر یک نیاز سخت است و تاخیر طولانی مانع از نادیده گرفتن نیاز بهینه ساز می شود. اگر فقط هزینه تعیین کنید، بهینهساز میتواند از تمیز کردن صرفنظر کند، اگر راهی برای جبران هزینه در جای دیگری پیدا کند، برای مثال با تحویل محمولههای بیشتر در زمان «صرفهجویی» با تمیز نکردن خودرو.
مثال پارکینگ از تاخیر کوتاهی استفاده می کند که مطابق با زمان اضافی مورد نیاز برای پارک خودرو است. اگر راننده در پارکینگ پولی توقف کند، میتوانید از هزینهها همراه با تأخیر استفاده کنید.
نحوه اضافه کردن یک ویژگی انتقال که با تمام درخواستهای بازدید مطابقت دارد
مثالهای بالا از ویژگیهای انتقالی استفاده میکنند که مکانهایی را که دارای یک برچسب هستند یا مکانهایی که برچسب ندارند مطابقت میدهند. اما اگر نیاز به افزودن ویژگیهای انتقالی داشته باشید که برای همه انتقالها اعمال میشود، چه؟
شما نمی توانید فقط برچسب ها را حذف کنید، زیرا هر پیام TransitionAttributes
باید یکی از TransitionAttributes.src_tag
و TransitionAttributes.excluded_src_tag
و یکی از TransitionAttributes.dst_tag
و TransitionAttributes.excluded_dst_tag
را داشته باشد.
با این حال، میتوانید همه برچسبها را با تنظیم TransitionAttributes.excluded_src_tag
یا TransitionAttributes.excluded_dst_tag
با برچسبی که در هیچ کجای مدل استفاده نمیشود مطابقت دهید. این با همه مکانهایی که این برچسب را ندارند مطابقت دارد، اما از آنجایی که شما عمداً برچسبی را انتخاب کردهاید که توسط هیچ مکانی استفاده نمیشود، این ویژگیهای انتقال با همه مکانها مطابقت خواهند داشت.