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

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

শুরু করার আগে

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

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

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

  • পথের প্রারম্ভিক বিন্দু।
  • এমন একটি বিরতিস্থল যেখানে কোনো কিছু সংগ্রহ বা সরবরাহ করা হয়।
  • পথের শেষ বিন্দু।

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

বাস্তব জগতের পরিস্থিতিগুলোর মডেল তৈরি করুন

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

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

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

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

একটি রাউট অপটিমাইজেশন এপিআই অনুরোধে এটি করার জন্য নিম্নলিখিত ধাপগুলি ব্যবহার করুন:

  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. ক্লিনিং ফ্যাসিলিটি শিপমেন্টের প্রতিটি ভিজিট রিকোয়েস্টের 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 কে একটি বড় মানে সেট করুন। যখন আপনি ডিলে-কে সর্বোচ্চ রাউট সময়কালের চেয়ে বেশি করেন, তখন আপনি কার্যকরভাবে অপটিমাইজারকে একটি রাউটে এই ট্রানজিশনটি ব্যবহার করা থেকে বিরত রাখেন।

    উদাহরণস্বরূপ, যখন মডেলটির সময়সীমা একটি কর্মদিবস হয়, তখন আপনি একটি পরিচ্ছন্নতা কেন্দ্র এবং রুটের শুরু ছাড়া অন্য যেকোনো স্থান থেকে রুটের শেষ প্রান্তে গমন নিষিদ্ধ করতে ২৪ ঘণ্টার (৮৬৪০০ সেকেন্ড) একটি বিলম্ব ব্যবহার করতে পারেন:

    {
      "excluded_src_tag": "CLEANED",
      "dst_tag": "ROUTE_END",
      "delay": "86400s"
    }
    

বিলম্ব এবং খরচের মধ্যে কীভাবে বেছে নেবেন

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

যানবাহন পরিষ্কার করার উদাহরণটিতে একটি খুব দীর্ঘ বিলম্ব ব্যবহার করা হয়েছে, কারণ রুটের শেষে যানবাহনটি পরিষ্কার করা একটি কঠোর আবশ্যকতা এবং এই দীর্ঘ বিলম্ব অপটিমাইজারকে আবশ্যকতাটি উপেক্ষা করা থেকে বিরত রাখে। আপনি যদি শুধুমাত্র একটি খরচ নির্ধারণ করেন, তাহলে অপটিমাইজার পরিষ্কার করার কাজটি বাদ দেওয়ার সিদ্ধান্ত নিতে পারে, যদি সে অন্য কোথাও সেই খরচ পুষিয়ে নেওয়ার কোনো উপায় খুঁজে পায়; যেমন, যানবাহন পরিষ্কার না করার ফলে "বাঁচা" সময়ে আরও বেশি চালান সরবরাহ করার মাধ্যমে।

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

কীভাবে একটি ট্রানজিশন অ্যাট্রিবিউট যোগ করবেন যা সমস্ত ভিজিট অনুরোধের সাথে মেলে

উপরের উদাহরণগুলিতে এমন ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করা হয়েছে যা একটি নির্দিষ্ট ট্যাগযুক্ত লোকেশন, অথবা ট্যাগবিহীন লোকেশনগুলির সাথে মেলে। কিন্তু যদি আপনার এমন ট্রানজিশন অ্যাট্রিবিউট যোগ করার প্রয়োজন হয় যা সমস্ত ট্রানজিশনের ক্ষেত্রে প্রযোজ্য হবে, তাহলে কী হবে?

আপনি ট্যাগগুলো বাদ দিতে পারবেন না, কারণ প্রতিটি TransitionAttributes মেসেজে অবশ্যই TransitionAttributes.src_tagTransitionAttributes.excluded_src_tag এর মধ্যে একটি এবং TransitionAttributes.dst_tagTransitionAttributes.excluded_dst_tag এর মধ্যে একটি থাকতে হবে।

তবে, আপনি TransitionAttributes.excluded_src_tag অথবা TransitionAttributes.excluded_dst_tag কে এমন একটি ট্যাগে সেট করে সমস্ত ট্যাগ মেলাতে পারেন যা মডেলে কোথাও ব্যবহৃত হয়নি। এটি সেই সমস্ত লোকেশনকে মেলাবে যেগুলিতে এই ট্যাগটি নেই, কিন্তু যেহেতু আপনি ইচ্ছাকৃতভাবে এমন একটি ট্যাগ বেছে নিয়েছেন যা কোনো লোকেশন ব্যবহার করে না, তাই এই ট্রানজিশন অ্যাট্রিবিউটগুলি সমস্ত লোকেশনকেই মেলাবে।

আরও পড়ুন