اولویت‌بندی بازدیدهای نزدیک با ویژگی‌های انتقال، اولویت‌بندی بازدیدهای نزدیک با ویژگی‌های انتقال

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

در این مثال:

  • تحویل محموله های A، B و C در یک جاده نزدیک به یکدیگر است.
  • تحویل های اضافی در ادامه راه است.
  • تحویل ها زمان تحویل مشخصی ندارند.
  • صرف نظر از برنامه بازدید، وسیله نقلیه باید دو بار در این جاده حرکت کند: یک بار صبح در راه از انبار و یک بار در عصر در راه بازگشت.
  • مسافت کلی سفر و مدت زمان بدون توجه به زمان انجام A، B و C همیشه یکسان است.

Example with deliveries of shipments on the same road. There are three
shipments A, B, and C on the road from the depot towards other shipments. A is
1000m from the depot, B is 50 meters further away from the depot, and C is 30
meters further in the same direction. There are other shipments 1000m far from
C.

در این شرایط و برای درخواستی که فقط از هزینه در ساعت و هزینه هر کیلومتر استفاده می‌کند، مسیر بهینه‌سازی شده می‌تواند A و B را در صبح و C را در عصر انجام دهد و هزینه راه‌حل به همان اندازه خواهد بود که اگر همه سه به طور همزمان رسیدگی می شود.

هزینه هر کیلومتر با آستانه

برای گروه بندی بازدیدهای نزدیک، ابتدا باید فاصله آستانه را انتخاب کنید. این حداکثر فاصله بین دو بازدیدی است که در نظر شما نزدیک است. این مثال از آستانه 100 متری استفاده می کند که تقریباً با یک بلوک در یک منطقه شهری مطابقت دارد. شما می توانید آستانه را افزایش یا کاهش دهید تا با نیازهای تجاری خود و ترجیحات رانندگان مطابقت داشته باشد.

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

برای تنظیم هزینه ها، یک ورودی جدید به ShipmentModel.transition_attributes با ویژگی های زیر اضافه می کنید:

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

برچسب #unused_tag# نباید توسط هیچ محموله یا وسیله نقلیه ای برای مطابقت با همه انتقال های ممکن استفاده شود. برای اطلاعات بیشتر، به نحوه مطابقت همه درخواست‌های بازدید مراجعه کنید.

هزینه بالا زیر آستانه چگونه کار می کند

این بخش نشان می دهد که چگونه هزینه زیر و بالاتر از آستانه بر هزینه کلی راه حل های مختلف سناریوی مثال تأثیر می گذارد.

راه حل 1: A، B را در راه، C در راه بازگشت اجرا کنید

در این راه حل، محموله ها به دو تراورس این جاده تقسیم می شوند. دو تا از آنها در پیمایش اول و بقیه در پیمایش دوم تحویل داده می شوند. 5 انتقال وجود دارد:

انتقال فاصله زیر آستانه بالاتر از آستانه
فاصله هزینه فاصله هزینه
انبار → A 1000 متر 100 متر 5 900 متر 0.9
A→B 50 متر 50 متر 2.5 0 متر 0
B→ دیگر 1030 متر 100 متر 5 930 متر 0.93
دیگر → C 1000 متر 100 متر 5 900 متر 0.9
C← انبار 1080 متر 100 متر 5 980 متر 0.98
مجموع 450 متر 22.5 3710 متر 3.71

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

  • هزینه هر کیلومتر زیر آستانه (50) برابر کل مسافت طی شده زیر آستانه (450 متر = 0.45 کیلومتر)،
  • هزینه هر کیلومتر بالاتر از آستانه (1) برابر کل مسافت طی شده بالاتر از آستانه (3710 متر = 3.71 کیلومتر).

بنابراین هزینه کلی 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21 است.

راه حل 2: A، B، C را در راه انجام دهید، هیچ چیز در راه بازگشت

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

انتقال فاصله زیر آستانه بالاتر از آستانه
فاصله هزینه فاصله هزینه
انبار → A 1000 متر 100 متر 5 900 متر 0.9
A→B 50 متر 50 متر 2.5 0 متر 0
B→C 30 متر 30 متر 1.5 0 متر 0
ج → دیگر 1000 متر 100 متر 5 900 متر 0.9
دیگر → انبار 2080 متر 100 متر 5 1980 متر 1.98
مجموع 380 متر 19 3780 متر 3.78

با استفاده از محاسبات مشابه در راه حل 1، هزینه کلی 0.38 * 50 + 3.78 * 1 = 19 + 3.78 = 22.78 است و انجام کلیه بازدیدها در یک بلوک زمانی هزینه کمتری نسبت به انجام آنها در دو گروه دارد. می‌توانید این اثر را با افزایش DistanceLimit.cost_per_kilometer_below_soft_max تقویت کنید.

چرا هزینه کم به ازای هر کیلومتر زیر آستانه کار نمی کند

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

می توانید این اثر را در دو راه حل مثال مشاهده کنید. اگر هزینه هر کیلومتر را در زیر و بالاتر از آستانه تعویض کنید، هزینه های مسیر تغییر می کند:

هزینه بالا بالاتر از آستانه هزینه بالا زیر آستانه
راه حل 1 راه حل 2 راه حل 1 راه حل 2
کیلومترهای زیر آستانه 0.45 0.38 0.45 0.38
هزینه به ازای هر کیلومتر زیر آستانه 1.00 1.00 50.00 50.00
کیلومترهای بالاتر از آستانه 3.71 3.78 3.71 3.78
هزینه هر کیلومتر بالاتر از آستانه 50.00 50.00 1.00 1.00
هزینه کل 185.95 189.38 26.21 22.78

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