এই নির্দেশিকা ট্রানজিশন অ্যাট্রিবিউটের সম্ভাব্য ব্যবহার দেখায়। এটি আপনাকে শেখাবে কীভাবে দুটি উদাহরণের মাধ্যমে বাস্তব-জগতের পরিস্থিতি মডেল করতে হয়: অপ্টিমাইজ করা রুটে গাড়ি পার্ক করার সময় অন্তর্ভুক্ত করা এবং প্রতিটি রুট একটি নির্দিষ্ট লোকেশনে ভিজিট করার মাধ্যমে শেষ হয় তা নিশ্চিত করা।
শুরু করার আগে
অপ্টিমাইজ করা রুটে নির্দিষ্ট ট্রানজিশনে মডেল-নির্দিষ্ট খরচ ও বিলম্ব যোগ করতে আপনি ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করেন। এই খরচ ও বিলম্ব ট্রানজিশনের সময়সীমা এবং খরচের সাথে যোগ করা হয়। ব্যবহৃত গাড়ির প্যারামিটারের উপর ভিত্তি করে ম্যাপ ডেটা থেকে এই খরচ ও বিলম্ব গণনা করা হয়।
ট্রানজিশন হল রুটের সেই অংশ যা একটি লোকেশনকে পরবর্তী লোকেশনের সাথে কানেক্ট করে।
লোকেশন বলতে কোনও গাড়ির রুটের নিম্নলিখিত যেকোনও পয়েন্টকে বোঝায়:
- রুটের শুরুর পয়েন্ট।
- পিক-আপ বা ডেলিভারি করার জন্য কোনও স্টপ।
- রুটের শেষ পয়েন্ট।
আপনি তালিকায় যোগ করে মডেলের জন্য সব ট্রানজিশন অ্যাট্রিবিউট নির্ধারণ করেন
ShipmentModel.transition_attributes।
তালিকার প্রতিটি এলিমেন্ট ট্রানজিশন অ্যাট্রিবিউটের একটি সেটকে সংজ্ঞায়িত করে এবং এটি
ট্রানজিশনের শুরু ও শেষ লোকেশনে ট্যাগ ব্যবহার করে রুটের ট্রানজিশনের সাথে
ম্যাচ করা হয়। ট্রানজিশন অ্যাট্রিবিউট সম্পর্কে আরও জানতে,
TransitionAttributes-এর জন্য
রেফারেন্স ডকুমেন্টেশন দেখুন।
বাস্তব জগতের পরিস্থিতি নিয়ে মডেল তৈরি করো
এই বিভাগে ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করে বাস্তব জগতের ব্যবসায়িক সীমাবদ্ধতা কীভাবে প্রয়োগ করা যায় তার দুটি ছোট উদাহরণ দেখানো হয়েছে।
পার্কিংয়ের জন্য সময় রিজার্ভ করুন
এই পরিস্থিতিতে, ড্রাইভারকে লোকেশন A-তে যাওয়ার আগে গাড়ি পার্ক করতে হবে। লোকেশন B কাছাকাছি এবং ড্রাইভার দুটি ভিজিটের জন্যই একই পার্কিং স্পট ব্যবহার করতে পারবেন। ড্রাইভার A-এর ঠিক পরেই B-তে গেলে, তার সময় বাঁচবে কারণ তাকে পার্কিং স্পট ছেড়ে যেতে এবং আবার গাড়ি পার্ক করতে হবে না। Route Optimization API-তে, আপনি ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করে গাড়ি পার্ক করার জন্য অতিরিক্ত সময় যোগ করতে পারবেন, তবে শুধুমাত্র তখনই যখন ড্রাইভার এক পার্কিং স্পট থেকে অন্য পার্কিং স্পটে যাবেন।
আপনি যখন ভিজিটের সময়কাল থেকে আলাদাভাবে পার্কিংয়ের সময় মডেল করেন, তখন আপনি এমন রুট তৈরি করেন যেখানে একই পার্কিং ব্যবহার করা ভিজিটগুলি গ্রুপ করা হয় এবং কম সময় নেয়। আপনি মডেলটিকে আরও নিখুঁত করে তোলেন এবং আপনি অপ্টিমাইজারকে এমন রুট পছন্দ করতে বাধ্য করেন যেখানে ভিজিটগুলি গ্রুপ করা হয়।
Route Optimization API অনুরোধে এটি করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
শুধুমাত্র ভিজিট করার জন্য প্রয়োজনীয় সময়টুকু
VisitRequest.durationব্যবহার করুন। যেমন, প্যাকেজটি হস্তান্তর করা এবং গ্রাহকের কাছ থেকে স্বাক্ষর সংগ্রহ করা।মডেলে ব্যবহৃত প্রতিটি স্বতন্ত্র পার্কিং স্পটের জন্য, একটি নতুন ট্যাগ ব্যবহার করুন যা মডেলে অন্য কিছুর জন্য ব্যবহার করা হয় না, যেমন
PARKING_123।এই ট্যাগটি নিম্নলিখিত আইটেমে যোগ করুন:
VisitRequest.tagsএই পার্কিং স্পট ব্যবহার করে এমন সব ভিজিট অনুরোধে।Vehicle.start_tagsগাড়িটি এই পার্কিং স্পট থেকে তার রুট শুরু করলে।Vehicle.end_tagsগাড়িটি এই পার্কিং স্পট থেকে যাত্রা শুরু বা শেষ করলে।
প্রতিটি নতুন পার্কিং ট্যাগের জন্য,
ShipmentModel.transition_attributes-এ একটি এন্ট্রি যোগ করুন যা নিম্নলিখিত কাজগুলি করে অন্য পার্কিং স্পট থেকে আসার সময় পার্কিংয়ের জন্য বিলম্ব যোগ করে:TransitionAttributes.excluded_src_tagএবংTransitionAttributes.dst_tagPARKING_123-এ সেট করুন।গাড়ি পার্ক করার জন্য প্রয়োজনীয় সময় অনুযায়ী
TransitionAttributes.delayসেট করুন।
যেমন, কোনও লোকেশনের ট্যাগ
PARKING_123হলে এবং গাড়ি পার্ক করতে ১৫০ সেকেন্ড সময় লাগলে, আপনিShipmentModel.transition_attributes-এ নিম্নলিখিত এন্ট্রি যোগ করেন:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
রুটের শেষে বাধ্যতামূলকভাবে পরিষ্কার করা
এই পরিস্থিতিতে, নিম্নলিখিত অতিরিক্ত সীমাবদ্ধতা সহ, রুটের শেষে গাড়িটি পরিষ্কার করতে হবে:
- গাড়ির ডিপোতে ফেরার আগে, গাড়িটি একটি বিশেষ ক্লিনিং ফেসিলিটিতে পরিষ্কার করা হয়। অপ্টিমাইজ করা রুটটি তার লোকেশন এবং গাড়ির দ্বারা করা পিকআপ এবং ডেলিভারির লোকেশনের উপর ভিত্তি করে সেরা ক্লিনিং সুবিধা ব্যবহার করে।
- পরিষ্কার করার পরে, গাড়িটি কোনও অতিরিক্ত পিকআপ বা ডেলিভারি করবে না।
- সেখানে গাড়ি চালিয়ে যাওয়া এবং গাড়ি পরিষ্কার করার সময় চালকের কাজের সময়ের মধ্যে ধরা হয় এবং এটি অবশ্যই রুটের সর্বোচ্চ সময়ের মধ্যে হতে হবে।
আপনি এই প্রয়োজনীয়তাটি এমন রুটগুলির অনুমতি দিয়ে মডেল করেন যা খালি বা যার শেষ ভিজিট একটি ক্লিনিং ফেসিলিটিতে। Route Optimization API-তে, আপনি পরিষ্কার করার সুবিধা বা রুটের শুরুর পয়েন্ট ছাড়া অন্য কোনও লোকেশন থেকে রুটের শেষ ওয়েপয়েন্টে ট্রানজিশন নিষিদ্ধ করে এটি করতে পারেন:
- মডেলে কোথাও ব্যবহার করা হয়নি এমন দুটি নতুন ট্যাগ বেছে নিন, যেমন
CLEANEDএবংROUTE_END। প্রথমটি হল সেইসব লোকেশনের জন্য যেখানে গাড়িটি পরিষ্কার আছে বা পরিষ্কার করা হয়েছে এবং দ্বিতীয়টি হল রুটের শেষ। - প্রতিটি গাড়ির জন্য, একটি নতুন শুধু-ডেলিভারি শিপমেন্ট যোগ করুন যা নিম্নলিখিত অ্যাট্রিবিউট সহ
ক্লিনিং ফেসিলিটিতে ভিজিটকে দেখায়:
- প্রতিটি ক্লিনিং ফেসিলিটি লোকেশনকে এই শিপমেন্টের ডেলিভারি ভিজিট অনুরোধ হিসেবে দেখাতে হবে।
- ক্লিনিং ফেসিলিটি শিপমেন্টের প্রতিটি ভিজিট অনুরোধের
VisitRequest.tags-এCLEANEDযোগ করুন। এটি ইঙ্গিত করে যে এই লোকেশন থেকে বেরিয়ে যাওয়া গাড়িটি পরিষ্কার। মডেলের অন্যান্য ভিজিট অনুরোধে এই ট্যাগ ব্যবহার করা উচিত নয় যাতে সেগুলি ছেড়ে যাওয়ার সময় গাড়ি "পরিষ্কার নয়" হিসেবে বিবেচনা করা হয়। - গাড়িটি অন্য কোনও কারণে ব্যবহার না করা হলে, অপ্টিমাইজারকে এই শিপমেন্ট এড়িয়ে যাওয়ার অনুমতি দিন। এর জন্য
penalty_costছোট সংখ্যায় সেট করুন।
প্রতিটি গাড়ির জন্য,
CLEANED-কেVehicle.start_tags-এ যোগ করুন। কোনও পিক-আপ বা ডেলিভারি করার আগে গাড়িটি পরিষ্কার কিনা তা চিহ্নিত করতে এটি ব্যবহার করা হয়, ধরে নেওয়া হয় যে আগের কাজের দিনের শেষে এটি পরিষ্কার করা হয়েছে এবং এটিকে শুরুর ওয়েপয়েন্ট থেকে সরাসরি শেষ ওয়েপয়েন্টে যাওয়ার অনুমতি দেওয়া হয়। এমন রুট বাস্তবে না থাকলেও, এই পরিস্থিতিকে অনুমতি দিলে অপ্টিমাইজার আরও দক্ষতার সাথে অপ্টিমাইজ করা রুট খুঁজতে পারে।প্রতিটি গাড়ির জন্য,
ROUTE_END-কেVehicle.end_tags-এ যোগ করুন।ShipmentModel.transition_attributes-এ নতুন এন্ট্রি যোগ করুন যা নিম্নলিখিত প্রপার্টি সহ, পরিষ্কার না থাকলে গাড়িকে গন্তব্যের ওয়েপয়েন্টে পৌঁছাতে বাধা দেয়:TransitionAttributes.excluded_src_tagCLEANED-এ সেট করুন।TransitionAttributes.dst_tagROUTE_END-এ সেট করুন।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
সেট করে সব ট্যাগ ম্যাচ করতে পারবেন, এমন একটি ট্যাগে যা মডেলে কোথাও ব্যবহার করা হয়নি। এটি এমন সব লোকেশনের সাথে ম্যাচ করবে
যেগুলিতে এই ট্যাগ নেই, তবে আপনি যেহেতু ইচ্ছাকৃতভাবে এমন একটি ট্যাগ বেছে নিয়েছেন যা
কোনও লোকেশন ব্যবহার করে না, তাই এইসব ট্রানজিশন অ্যাট্রিবিউট সব লোকেশনের সাথে ম্যাচ করবে।