منطق کسب‌وکار مدل با مشخصه‌های انتقال

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

قبل‌از شروع

از مشخصه‌های گذر برای افزودن هزینه‌ها و تأخیرهای مختص مدل به گذرها خاصی در مسیرهای بهینه‌سازی‌شده استفاده می‌کنید. این هزینه‌ها و تأخیرها علاوه بر مدت زمان انتقال و هزینه‌هایی است که براساس داده‌های نقشه و براساس پارامترهای خودروی استفاده‌شده محاسبه می‌شود.

گذار بخشی از مسیر است که یک مکان را به مکان بعدی متصل می‌کند.

مکان به هریک از نقاط زیر در مسیر خودرو اشاره دارد:

  • نقطه شروع مسیر.
  • ایستگاهی که در آن تحویل یا ارسال انجام می‌شود.
  • نقطه پایان مسیر.

همه مشخصه‌های انتقال را برای مدل با افزودن آن‌ها به فهرست ShipmentModel.transition_attributes تعریف می‌کنید. هر عنصر فهرست یک مجموعه از مشخصه‌های انتقال را تعریف می‌کند و بااستفاده از برچسب‌های مکان شروع و مکان پایان انتقال، با انتقال‌های مسیرها مطابقت داده می‌شود. برای کسب اطلاعات بیشتر درباره مشخصه‌های انتقال، به اسناد مرجع برای TransitionAttributes مراجعه کنید.

مدل‌سازی سناریوهای دنیای واقعی

این بخش دو مثال کوچک از نحوه پیاده‌سازی محدودیت‌های کسب‌وکار واقعی بااستفاده از مشخصه‌های انتقال را نشان می‌دهد.

رزرو زمان برای پارکینگ

در این سناریو، راننده باید خودرو را پارک کند تا بتواند از مکان الف بازدید کند. مکان «ب» در همان نزدیکی است و راننده می‌تواند از همان جای پارک برای هر دو بازدید استفاده کند. اگر راننده بلافاصله بعداز «الف» از «ب» بازدید کند، در زمان صرفه‌جویی می‌کند چون نیازی نیست جای پارک را ترک کند و دوباره خودرو را پارک کند. در Route Optimization API، می‌توانید از ویژگی‌های انتقال برای افزودن زمان اضافی برای پارک کردن خودرو فقط زمانی که راننده از یک جای پارک به جای پارک دیگر می‌رود استفاده کنید.

وقتی زمان توقف را جدا از مدت بازدید مدل‌سازی می‌کنید، مسیرهایی می‌سازید که در آن‌ها بازدیدهایی که از توقف یکسان استفاده می‌کنند گروه‌بندی می‌شوند و زمان کمتری می‌برند. مدل را دقیق‌تر می‌کنید و بهینه‌ساز را نیز وادار می‌کنید مسیرهایی را ترجیح دهد که در آن‌ها بازدیدها گروه‌بندی شده‌اند.

برای انجام این کار در درخواست Route Optimization API، از مراحل زیر استفاده کنید:

  1. فقط برای مدت زمان لازم برای انجام بازدید از VisitRequest.duration استفاده کنید. برای مثال، برای تحویل بسته و دریافت امضای مشتری.

  2. برای هر جای پارک متمایز استفاده‌شده در مدل، از برچسب جدیدی استفاده کنید که برای چیز دیگری در مدل استفاده نشده باشد، برای مثال PARKING_123.

  3. این برچسب را به موارد زیر اضافه کنید:

    1. VisitRequest.tags در همه درخواست‌های بازدید که از این جای پارک استفاده می‌کنند.

    2. Vehicle.start_tags اگر خودرو مسیرش را از این جای پارک شروع کند.

    3. Vehicle.end_tags اگر خودرو در این جای پارک سفرش را شروع یا تمام کند.

  4. برای هر برچسب پارکینگ جدید، ورودی‌ای به ShipmentModel.transition_attributes اضافه کنید که با انجام کارهای زیر، تأخیری برای پارک کردن هنگام آمدن از جای پارک دیگری اضافه کند:

    1. TransitionAttributes.excluded_src_tag و TransitionAttributes.dst_tag را روی PARKING_123 تنظیم کنید.

    2. TransitionAttributes.delay را روی زمان موردنیاز برای پارک کردن خودرو تنظیم کنید.

    برای مثال، وقتی برچسب مکان PARKING_123 و پارک کردن خودرو ۱۵۰ ثانیه طول می‌کشد، ورودی زیر را به ShipmentModel.transition_attributes اضافه می‌کنید:

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

تمیز کردن اجباری در پایان مسیر

در این سناریو، خودرو باید در پایان مسیر تمیز شود، با محدودیت‌های اضافی زیر:

  • نظافت در تأسیسات نظافت تخصصی قبل‌از بازگشت به انبار خودرو انجام می‌شود. مسیر بهینه‌سازی‌شده از بهترین مرکز نظافت براساس مکان آن و مکان‌های تحویل گرفتن و تحویل دادن انجام‌شده توسط خودرو استفاده می‌کند.
  • پس‌از تمیز کردن، خودرو نباید هیچ‌گونه سوار کردن یا تحویل دادن دیگری انجام دهد.
  • زمان رانندگی تا آنجا و تمیز کردن خودرو جزو ساعات کاری راننده محسوب می‌شود و باید در حداکثر مدت‌زمان مسیر بگنجد.

این الزام را با مجاز کردن فقط مسیرهایی که یا خالی هستند یا آخرین بازدید آن‌ها از تأسیسات پاک‌سازی است مدل‌سازی می‌کنید. در «میانای برنامه‌سازی کاربردی بهینه‌سازی مسیر»، این کار را با ممنوع کردن انتقال به ایستگاه بین راهی پایانی مسیر از هر مکانی به‌جز از تأسیسات نظافت یا از نقطه شروع مسیر انجام می‌دهید:

  1. دو برچسب جدید انتخاب کنید که در هیچ کجای مدل استفاده نشده باشند، برای مثال CLEANED و ROUTE_END. اولی برای مکان‌هایی است که خودرو تمیز است یا تمیز می‌شود، و دومی برای پایان مسیر است.
  2. برای هر خودرو، یک محموله جدید فقط برای تحویل اضافه کنید که نشان‌دهنده بازدید از مرکز نظافت با مشخصه‌های زیر باشد:
    1. هر مکان تأسیسات تمیزکاری باید به‌عنوان درخواست بازدید تحویل این محموله نشان داده شود.
    2. CLEANED را به VisitRequest.tags هر درخواست بازدید از محموله تأسیسات نظافت اضافه کنید. این نشان می‌دهد که وسیله نقلیه‌ای که این مکان را ترک می‌کند پاک است. درخواست‌های بازدید دیگر در مدل نباید از این برچسب استفاده کنند تا وقتی خودرو از آن‌ها خارج می‌شود، «تمیز» درنظر گرفته نشود.
    3. با تنظیم penalty_cost روی عددی کوچک، به بهینه‌ساز اجازه دهید وقتی خودرو به‌طور دیگری استفاده نمی‌شود، از این محموله صرف‌نظر کند.
  3. برای هر وسیله نقلیه، CLEANED را به Vehicle.start_tags اضافه کنید. این مورد برای علامت‌گذاری وسیله نقلیه به‌عنوان تمیز قبل‌از انجام هرگونه تحویل یا تحویل گرفتن استفاده می‌شود، با این فرض که در پایان روز کاری قبلی تمیز شده است، و به آن اجازه می‌دهد مستقیماً از ایستگاه بین راهی شروع به ایستگاه بین راهی پایان برود. حتی اگر چنین مسیرهایی در عمل اتفاق نیفتد، مجاز کردن این سناریو به بهینه‌ساز کمک می‌کند تا مسیرهای بهینه‌شده را با کارایی بیشتری جستجو کند.

  4. برای هر وسیله نقلیه، ROUTE_END را به Vehicle.end_tags اضافه کنید.

  5. ورودی جدیدی به ShipmentModel.transition_attributes اضافه کنید که ورود خودروها به ایستگاه بین راهی پایانی خودرو را درصورتی‌که خودرو پاک نباشد با ویژگی‌های زیر ممنوع می‌کند:

    1. TransitionAttributes.excluded_src_tag را روی CLEANED تنظیم کنید.

    2. TransitionAttributes.dst_tag را روی ROUTE_END تنظیم کنید.

    3. 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 روی برچسبی که در هیچ‌کجای مدل استفاده نشده است، همه برچسب‌ها را مطابقت دهید. این کار با همه مکان‌هایی که این برچسب را ندارند مطابقت خواهد داشت، اما ازآنجایی‌که شما به‌طور عمدی برچسبی را انتخاب کرده‌اید که هیچ مکانی از آن استفاده نمی‌کند، این مشخصه‌های انتقال با همه مکان‌ها مطابقت خواهد داشت.

مطالعه بیشتر