স্থানান্তর বৈশিষ্ট্য সহ কাছাকাছি পরিদর্শন অগ্রাধিকার

এই উদাহরণটি দেখায় কিভাবে ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করে এমন রুটগুলোকে অগ্রাধিকার দেওয়া যায়, যেখানে কাছাকাছি পিকআপ এবং ডেলিভারি একই যানবাহন দ্বারা একটি নির্দিষ্ট সময়সীমার মধ্যে সম্পন্ন করা হয়। ট্রানজিশন অ্যাট্রিবিউট সম্পর্কে আরও জানতে, “মডেল বিজনেস লজিক উইথ ট্রানজিশন অ্যাট্রিবিউটস” দেখুন।

এই উদাহরণে:

  • চালান 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 সন্ধ্যায় সম্পন্ন করা যেতে পারে এবং সমাধানটির খরচ একই থাকবে, যেন তিনটিই একই সময়ে সম্পন্ন করা হয়েছে।

একটি নির্দিষ্ট সীমা সহ প্রতি কিলোমিটার খরচ

কাছাকাছি ভিজিটগুলোকে একত্রিত করতে, আপনাকে প্রথমে একটি থ্রেশহোল্ড দূরত্ব নির্বাচন করতে হবে। এটি হলো দুটি ভিজিটের মধ্যেকার সর্বোচ্চ দূরত্ব, যেগুলোকে আপনি কাছাকাছি বলে মনে করেন। এই উদাহরণে ১০০ মিটারের একটি থ্রেশহোল্ড ব্যবহার করা হয়েছে, যা একটি শহুরে এলাকার প্রায় একটি ব্লকের সমান। আপনি আপনার ব্যবসার প্রয়োজন এবং চালকদের পছন্দ অনুযায়ী এই থ্রেশহোল্ড বাড়াতে বা কমাতে পারেন।

১০০ মিটারের মধ্যে থাকা কাছাকাছি ভিজিটগুলোকে একত্রিত করতে, আপনি প্রতিটি ট্রানজিশনের প্রথম ১০০ মিটারের জন্য একটি উচ্চ খরচ এবং ট্রানজিশনের পরবর্তী প্রতিটি মিটারের জন্য একটি নিম্ন খরচ নির্ধারণ করেন। যেহেতু প্রথম ১০০ মিটার সবচেয়ে ব্যয়বহুল, তাই অপটিমাইজার ১০০-মিটারের সীমার চেয়ে ছোট ট্রানজিশন ব্যবহার করে সবচেয়ে বেশি সাশ্রয় করে, এমনকি এর জন্য রুটের মোট দৈর্ঘ্য বাড়াতে হলেও।

খরচ নির্ধারণ করতে, আপনাকে ShipmentModel.transition_attributes এ নিম্নলিখিত প্রোপার্টিগুলো সহ একটি নতুন এন্ট্রি যোগ করতে হবে:

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

সমস্ত সম্ভাব্য ট্রানজিশন মেলানোর জন্য কোনো চালান বা যানবাহন দ্বারা #unused_tag# ট্যাগটি ব্যবহার করা যাবে না। আরও তথ্যের জন্য, “সমস্ত ভিজিট অনুরোধ কীভাবে মেলাতে হয়” দেখুন।

থ্রেশহোল্ডের নিচে উচ্চ খরচ কীভাবে কাজ করে

এই অংশে দেখানো হয়েছে, কীভাবে নির্ধারিত সীমার কম ও বেশি খরচ উদাহরণ পরিস্থিতিটির বিভিন্ন সমাধানের সামগ্রিক খরচকে প্রভাবিত করে।

সমাধান ১: যাওয়ার পথে A ও B করুন, ফেরার পথে C করুন।

এই সমাধানে, চালানগুলো এই রাস্তার দুটি যাতায়াত পথে বিভক্ত করা হয়। সেগুলোর মধ্যে দুটি প্রথম যাতায়াত পথে এবং বাকি একটি দ্বিতীয় যাতায়াত পথে সরবরাহ করা হয়। এখানে ৫টি স্থানান্তর রয়েছে:

রূপান্তর দূরত্ব থ্রেশহোল্ডের নিচে থ্রেশহোল্ডের উপরে
দূরত্ব খরচ দূরত্ব খরচ
ডিপো →এ ১০০০ মিটার ১০০ মিটার ৯০০ মিটার ০.৯
A→B ৫০ মিটার ৫০ মিটার ২.৫ ০ মিটার
B→অন্যান্য ১০৩০ মিটার ১০০ মিটার ৯৩০ মিটার ০.৯৩
অন্যান্য→সি ১০০০ মিটার ১০০ মিটার ৯০০ মিটার ০.৯
সি→ডিপো ১০৮০ মিটার ১০০ মিটার ৯৮০ মিটার ০.৯৮
মোট ৪৫০ মিটার ২২.৫ ৩৭১০ মিটার ৩.৭১

প্রতি কিলোমিটারের দুটি খরচের যোগফল হিসেবে মোট খরচ গণনা করা হয়:

  • থ্রেশহোল্ডের (50) নীচে প্রতি কিলোমিটারের খরচ গুণ থ্রেশহোল্ডের নীচে মোট ভ্রমণ করা দূরত্ব (450 মি = 0.45 কিমি),
  • থ্রেশহোল্ডের (1) উপরে প্রতি কিলোমিটারের খরচ গুণ থ্রেশহোল্ডের উপরে মোট অতিক্রান্ত দূরত্ব (3710 মি = 3.71 কিমি)।

সুতরাং, মোট খরচ হলো ০.৪৫ * ৫০ + ৩.৭১ * ১ = ২২.৫ + ৩.৭১ = ২৬.২১।

সমাধান ২: যাওয়ার পথে A, B, C করুন, ফেরার পথে কিছুই করবেন না।

এই সমাধানে, সমাধান ১-এর থেকে ভিন্ন, তিনটি চালানই রাস্তাটি একবার অতিক্রম করার সময়ে 'একসাথে' পৌঁছে দেওয়া হয়। অন্যবার অতিক্রম করার সময়, যানটি একেবারেই থামে না। এখানেও ৫টি স্থানান্তর রয়েছে, কিন্তু সেগুলোর দৈর্ঘ্য এবং গঠন ভিন্ন:

রূপান্তর দূরত্ব থ্রেশহোল্ডের নিচে থ্রেশহোল্ডের উপরে
দূরত্ব খরচ দূরত্ব খরচ
ডিপো →এ ১০০০ মিটার ১০০ মিটার ৯০০ মিটার ০.৯
A→B ৫০ মিটার ৫০ মিটার ২.৫ ০ মিটার
B→C ৩০ মিটার ৩০ মিটার ১.৫ ০ মিটার
C→অন্যান্য ১০০০ মিটার ১০০ মিটার ৯০০ মিটার ০.৯
অন্যান্য→ডিপো ২০৮০ মিটার ১০০ মিটার ১৯৮০ মিটার ১.৯৮
মোট ৩৮০ মিটার ১৯ ৩৭৮০ মিটার ৩.৭৮

সমাধান ১-এর মতো একই গণনা ব্যবহার করে, মোট খরচ হলো ০.৩৮ * ৫০ + ৩.৭৮ * ১ = ১৯ + ৩.৭৮ = ২২.৭৮, এবং দুটি ভাগে ভাগ করে সবগুলো পরিদর্শন করার চেয়ে একবারে সবগুলো পরিদর্শন করার খরচ কম। আপনি DistanceLimit.cost_per_kilometer_below_soft_max বাড়িয়ে এই প্রভাবকে আরও জোরদার করতে পারেন।

কেন নির্ধারিত সীমার নিচে প্রতি কিলোমিটারে কম খরচ কার্যকর হয় না

যেহেতু আপনি দীর্ঘ ট্রানজিশনের চেয়ে ছোট ট্রানজিশনকে বেশি প্রাধান্য দিতে চান, তাই আপনার মনে হতে পারে যে দীর্ঘ ট্রানজিশনের জন্য প্রতি কিলোমিটারে খরচ বেশি এবং ছোট ট্রানজিশনের জন্য প্রতি কিলোমিটারে খরচ কম রাখা উচিত। কিন্তু বাস্তবে এর প্রভাবটি বিপরীত: যেহেতু ট্রানজিশনের প্রথম ১০০ মিটার সবচেয়ে সস্তা, তাই অপটিমাইজার এই "সস্তা" মিটারগুলোকে সবচেয়ে কার্যকরভাবে ব্যবহার করে ১০০ মিটারের কাছাকাছি বা তার বেশি দৈর্ঘ্যের ট্রানজিশনগুলোকে বেশি প্রাধান্য দেয়।

আপনি দুটি উদাহরণ সমাধানে এই প্রভাবটি দেখতে পারেন। যদি আপনি থ্রেশহোল্ডের নীচে এবং উপরে প্রতি কিলোমিটারের খরচ অদলবদল করেন, তাহলে রুটের খরচ পরিবর্তিত হয়:

নির্ধারিত সীমার উপরে উচ্চ ব্যয় থ্রেশহোল্ডের নিচে উচ্চ ব্যয়
সমাধান ১ সমাধান ২ সমাধান ১ সমাধান ২
থ্রেশহোল্ডের নিচে কিলোমিটার ০.৪৫ ০.৩৮ ০.৪৫ ০.৩৮
নির্ধারিত সীমার নিচে প্রতি কিলোমিটার খরচ ১.০০ ১.০০ ৫০.০০ ৫০.০০
থ্রেশহোল্ডের উপরে কিলোমিটার ৩.৭১ ৩.৭৮ ৩.৭১ ৩.৭৮
নির্ধারিত সীমার উপরে প্রতি কিলোমিটার খরচ ৫০.০০ ৫০.০০ ১.০০ ১.০০
মোট খরচ ১৮৫.৯৫ ১৮৯.৩৮ ২৬.২১ ২২.৭৮

প্রতিটি সংস্করণের জন্য, দুটি সমাধানের মোট খরচের মধ্যে যেটি কম, সেটি গাঢ় অক্ষরে হাইলাইট করা হয়েছে। আপনি দেখতে পাচ্ছেন যে, যখন আপনি থ্রেশহোল্ডের উপরে একটি উচ্চ খরচ ব্যবহার করেন, তখন যে রুটে ভিজিটগুলো গ্রুপ করা হয়েছে, সেই রুটের মোট খরচ এখন বেশি হয়ে যায়, যা আপনি যা অর্জন করতে চেয়েছিলেন তার বিপরীত।