রূপান্তর বৈশিষ্ট্য সহ মডেল ব্যবসা যুক্তি

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

শুরু করার আগে

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

ট্রানজিশন হলো রুটের সেই অংশ যা এক স্থানকে অন্য স্থানের সাথে সংযুক্ত করে।

একটি অবস্থান বলতে একটি গাড়ির রুটের নিম্নলিখিত যেকোনো বিন্দুকে বোঝায়:

  • রুটের শুরুর স্থান।
  • একটি স্টপ যেখানে পিকআপ বা ডেলিভারি করা হয়।
  • রুটের শেষ বিন্দু।

মডেলের জন্য সমস্ত ট্রানজিশন অ্যাট্রিবিউটগুলিকে ShipmentModel.transition_attributes তালিকায় যুক্ত করে সংজ্ঞায়িত করা হয়। তালিকার প্রতিটি উপাদান ট্রানজিশন অ্যাট্রিবিউটের একটি সেট সংজ্ঞায়িত করে এবং এটি ট্রানজিশনের শুরুর অবস্থান এবং শেষের অবস্থানের ট্যাগ ব্যবহার করে রুটে ট্রানজিশনের সাথে মিলিত হয়। ট্রানজিশন অ্যাট্রিবিউট সম্পর্কে আরও জানতে, TransitionAttributes এর রেফারেন্স ডকুমেন্টেশন দেখুন।

বাস্তব-বিশ্বের পরিস্থিতির মডেল তৈরি করুন

এই বিভাগে ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করে বাস্তব-বিশ্বের ব্যবসায়িক সীমাবদ্ধতা কীভাবে বাস্তবায়ন করা যায় তার দুটি ছোট উদাহরণ দেখানো হয়েছে।

পার্কিংয়ের জন্য সময় সংরক্ষণ করুন

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

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

রুট অপ্টিমাইজেশন 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 হয় এবং গাড়িটি পার্ক করতে 150 সেকেন্ড সময় লাগে, তখন আপনি ShipmentModel.transition_attributes এ নিম্নলিখিত এন্ট্রিটি যোগ করবেন:

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

রুটের শেষে বাধ্যতামূলক পরিষ্কারকরণ

এই পরিস্থিতিতে, নিম্নলিখিত অতিরিক্ত সীমাবদ্ধতাগুলি সহ, রুটের শেষে গাড়িটি পরিষ্কার করা প্রয়োজন:

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

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

  1. মডেলের কোথাও ব্যবহার করা হয়নি এমন দুটি নতুন ট্যাগ বেছে নিন, যেমন CLEANED এবং ROUTE_END । প্রথমটি সেই জায়গাগুলির জন্য যেখানে গাড়িটি পরিষ্কার থাকে বা পরিষ্কার হয়ে যায়, এবং দ্বিতীয়টি রুটের শেষের জন্য।
  2. প্রতিটি গাড়ির জন্য, একটি নতুন ডেলিভারি-অনলি চালান যোগ করুন যা নিম্নলিখিত বৈশিষ্ট্য সহ একটি পরিষ্কারের সুবিধা পরিদর্শনের প্রতিনিধিত্ব করে:
    1. প্রতিটি পরিষ্কার-পরিচ্ছন্নতার স্থান এই চালানের ডেলিভারি ভিজিট অনুরোধ হিসাবে উপস্থাপন করা উচিত।
    2. পরিষ্কারের সুবিধার চালানের প্রতিটি ভিজিট অনুরোধের VisitRequest.tagsCLEANED যোগ করুন। এটি ইঙ্গিত দেয় যে এই স্থান থেকে ছেড়ে যাওয়া গাড়িটি পরিষ্কার। মডেলের অন্যান্য ভিজিট অনুরোধগুলিতে এই ট্যাগটি ব্যবহার করা উচিত নয় যাতে গাড়িটি ছেড়ে যাওয়ার সময় "পরিষ্কার নয়" বলে বিবেচিত হয়।
    3. গাড়িটি অন্যথায় অব্যবহৃত থাকলে অপ্টিমাইজারকে এই চালানটি এড়িয়ে যাওয়ার অনুমতি দিন, এর penalty_cost একটি ছোট সংখ্যায় সেট করে।
  3. প্রতিটি গাড়ির জন্য, Vehicle.start_tagsCLEANED যোগ করুন। এটি কোনও পিকআপ বা ডেলিভারি করার আগে গাড়িটিকে পরিষ্কার হিসাবে চিহ্নিত করতে ব্যবহৃত হয়, ধরে নেওয়া হয় যে এটি আগের কর্মদিবসের শেষে পরিষ্কার করা হয়েছে, এবং এটিকে শুরুর ওয়েপয়েন্ট থেকে সরাসরি তার শেষ ওয়েপয়েন্টে যেতে দেয়। এমনকি যদি বাস্তবে এই ধরনের রুট নাও ঘটে, তবুও এই দৃশ্যকল্পটি অপ্টিমাইজারকে আরও দক্ষতার সাথে অপ্টিমাইজ করা রুটগুলি অনুসন্ধান করতে সহায়তা করে।

  4. প্রতিটি গাড়ির জন্য, Vehicle.end_tagsROUTE_END যোগ করুন।

  5. ShipmentModel.transition_attributes এ একটি নতুন এন্ট্রি যোগ করুন যা যানবাহনগুলিকে পরিষ্কার না থাকলে যানবাহনের শেষ ওয়েপয়েন্টে পৌঁছাতে বাধা দেয়, নিম্নলিখিত বৈশিষ্ট্যগুলি সহ:

    1. TransitionAttributes.excluded_src_tag কে CLEANED তে সেট করুন।

    2. TransitionAttributes.dst_tag কে ROUTE_END এ সেট করুন।

    3. 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 কে এমন একটি ট্যাগে সেট করে সমস্ত ট্যাগ মেলাতে পারেন যা মডেলের কোথাও ব্যবহৃত হয় না। এটি সেই সমস্ত অবস্থানের সাথে মিলবে যেখানে এই ট্যাগটি নেই, কিন্তু যেহেতু আপনি ইচ্ছাকৃতভাবে এমন একটি ট্যাগ বেছে নিয়েছেন যা কোনও অবস্থান দ্বারা ব্যবহৃত হয় না, তাই এই রূপান্তর বৈশিষ্ট্যগুলি সমস্ত অবস্থানের সাথে মিলবে।

আরও পড়া