این راهنما کاربردهای احتمالی مشخصههای انتقال را نشان میدهد. این آموزش به شما یاد میدهد که چگونه سناریوهای دنیای واقعی را با دو مثال مدلسازی کنید: گنجاندن زمان پارک خودرو در مسیرهای بهینهشده، و اطمینان از اینکه هر مسیر با بازدید از یک مکان خاص به پایان میرسد.
قبلاز شروع
از مشخصههای انتقال برای افزودن هزینهها و تأخیرهای خاص مدل به انتقالهای خاص در مسیرهای بهینهشده استفاده میکنید. این هزینهها و تأخیرها به مدت زمان انتقال و هزینههای محاسبهشده از دادههای نقشه براساس پارامترهای خودرو مورداستفاده اضافه میشود.
گذار بخشی از مسیر است که یک مکان را به مکان بعدی متصل میکند.
مکان به هریک از نقاط زیر در مسیر خودرو اشاره دارد:
- نقطه شروع مسیر.
- ایستگاهی که در آن تحویل یا ارسال انجام میشود.
- نقطه پایان مسیر.
همه مشخصههای انتقال را برای مدل با افزودن آنها به فهرست
ShipmentModel.transition_attributes تعریف میکنید.
هر عنصر فهرست یک مجموعه از مشخصههای انتقال را تعریف میکند و بااستفاده از برچسبهای مکان شروع و مکان پایان انتقال، با انتقالهای موجود در مسیرها مطابقت داده میشود. برای کسب اطلاعات بیشتر درباره مشخصههای انتقال،
سند مرجع
TransitionAttributes را ببینید.
مدلسازی سناریوهای دنیای واقعی
این بخش دو مثال کوچک از نحوه پیادهسازی محدودیتهای کسبوکار در دنیای واقعی بااستفاده از مشخصههای انتقال را نشان میدهد.
رزرو زمان برای پارکینگ
در این سناریو، راننده باید خودرو را پارک کند تا بتواند از مکان الف بازدید کند. مکان «ب» در همین نزدیکی است و راننده میتواند از همان جای پارک برای هر دو بازدید استفاده کند. اگر راننده بلافاصله بعداز «الف» از «ب» بازدید کند، در زمان صرفهجویی میکند چون نیازی نیست جای پارک را ترک کند و دوباره خودرو را پارک کند. در 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است و پارک کردن خودرو ۱۵۰ ثانیه طول میکشد، ورودی زیر را به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را روی مقدار بزرگی تنظیم کنید. وقتی تأخیر را طولانیتر از حداکثر مدت مسیر قرار میدهید، درواقع بهینهساز را از استفاده از این انتقال در مسیر منع میکنید.
برای مثال، وقتی مقیاس زمانی مدل یک روز کاری است، میتوانید از تأخیر ۲۴ ساعته (۸۶۴۰۰ ثانیه) برای ممنوع کردن انتقال به پایان مسیر از هرجایی بهجز مرکز نظافت و شروع مسیر استفاده کنید:
{ "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
روی برچسبی که در هیچکجای مدل استفاده نشده است، همه برچسبها را مطابقت دهید. این کار با همه مکانهایی که این برچسب را ندارند مطابقت خواهد داشت، اما چون شما عمداً برچسبی را انتخاب کردهاید که هیچ مکانی از آن استفاده نمیکند، این مشخصههای انتقال با همه مکانها مطابقت خواهد داشت.