দক্ষ বাস লোড হচ্ছে


10

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

সমস্যা:

বাস ট্র্যাভেল সংস্থার বিভিন্ন যাত্রীর সক্ষমতা সহ বেশ কয়েকটি বাস রয়েছে (উদাঃ 15 50-যাত্রী বাস, 25 30-যাত্রী বাস ... ইত্যাদি)) তারা খুব বড় গ্রুপগুলিতে পরিবহন সরবরাহের ক্ষেত্রে বিশেষজ্ঞ ছিল (প্রতি গ্রুপে 300+ যাত্রী)। যেহেতু প্রতিটি গ্রুপকে একসাথে ভ্রমণ করতে হবে তাদের বর্জ্য হ্রাস করার জন্য দক্ষতার সাথে তাদের বহর পরিচালনা করতে হবে।

উদাহরণস্বরূপ, দুটি 50-যাত্রী বাস (12 খালি আসন) এর চেয়ে 88 টি যাত্রী তিনটি 30-যাত্রী বাস (2 খালি আসন) দ্বারা আরও ভালভাবে পরিবেশন করা হয়েছে। আর একটি উদাহরণ, 50৫ জন যাত্রী একটি ৫০-যাত্রীবাহী বাস এবং একটি ৩০-যাত্রীবাহী বাসের মাধ্যমে আরও ভালভাবে পরিবেশন করা হবে, যা মিশ্রণের একটি ধরণের মিশ্রণ।

এটি করার জন্য একটি ভাল অ্যালগরিদম কী?


3
বাছাই করা ঠিক নয়, তবে আমি বাস সংস্থার দৃষ্টিকোণ থেকে সন্দেহ করব যে, 2 50 টি যাত্রীবাহী বাস আরও কার্যকর হবে যেহেতু গ্যাসের ব্যয় কেবল 3 এর পরিবর্তে 2 টি বাসের দিকে চলেছে তাই আপনি কীভাবে এটি করেছিলেন?
ডঙ্ক

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

@ ডাঙ্ক - আমি প্রথমে স্বীকার করব যে বাস এবং ট্যুর লজিস্টিক সম্পর্কে আমার কোনও ধারণা নেই, তবে এটি ছিল তাদের প্রয়োজনীয়তা। এমনকি তাদের কাছে অত্যন্ত বেতনের পরামর্শদাতাও ছিল যারা ম্যানুয়ালি এটি করেছিলেন।
সিস্টেম ডাউন

খালি আসন অপ্রাসঙ্গিক, কী গণনা পরিচালনা করছে ব্যয়। এইভাবে ফিলসোডাদের উত্তর দেখুন।
লরেন পেচটেল

@ লরেনপেকটেল - যেমনটি আমি আগে বলেছি, আমি ব্যবসায়ের বিধি নিষেধ করি না, আমি কেবল সেগুলি বাস্তবায়ন করি।
সিস্টেম ডাউন

উত্তর:


8

এটি (সাজানোর) বিন প্যাকিং সমস্যার উদাহরণ, যা ঘন ঘন ন্যাপস্যাক সমস্যার সাথে বিভ্রান্ত হয়। বিন প্যাকিংয়ে, আপনার একটি নির্দিষ্ট ক্ষমতাের বিন রয়েছে এবং আপনি বিভিন্ন আকারের বস্তুগুলিকে বিনগুলিতে বিতরণের চেষ্টা করছেন। ধারণাটি হ'ল কমপক্ষে সম্ভাব্য সংখ্যক বিন ব্যবহার করা।

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

এটা খুব খারাপ হচ্ছে. আপনার যদি 20,30 এবং 50 টি যাত্রীবাহী বাস থাকে তবে কী হবে। প্রত্যেকেই বিভিন্ন পরিমাণে জ্বালানী ব্যবহার করে, তবে ২০ এবং একটি ৩০ চালানোর চেয়ে একটি ৫০ চালানো আরও দক্ষ। তবে আমাদের একক পরিমাপ (খালি আসনের কমপক্ষে) থেকে, এটি ৫০ এর জন্য চালনা করা বোধগম্য হয় যাত্রী ভ্রমণ

এছাড়াও, 28 বা 39 এর মতো অদ্ভুত সংখ্যাযুক্ত বাসগুলি আমাদের প্রচুর শর্টকাটকে স্কু করে।

সুতরাং, পরিস্থিতির জটিলতার উপর নির্ভর করে আপনি দুটি কাজের মধ্যে একটি করতে পারেন:

প্রথম এবং সম্পূর্ণ অনুসন্ধান গাছ: বাসের প্রতিটি সম্ভাব্য সংমিশ্রণটি ব্যবহার করুন। আপনার যদি কেবল 3 বা 4 টি বাস আকার থাকে তবে এটি সম্ভবত একটি যুক্তিসঙ্গত সমাধান। অন্যথায়, সেরা ফিট হ্রাস করার মতো কিছু যুক্তিসঙ্গত, তবে অনুকূল নয়, ফলাফল দেয়।


এই উত্তরটি কেন হ্রাস পেয়েছে তা আমি ভাবতে পারি না। ক্ষতিপূরণ দিতে অগ্রসর হওয়া। সাবাশ.
ডেভিড কনরাড

1

পাইথনে একটি দ্রুত এবং নোংরা সমাধান এখানে:

def add50(passengers, buses):
    proposed = buses + [50]
    if sum(proposed) < passengers:
        return add50(passengers, proposed)
    return proposed

def add30(passengers, buses):
    proposed = buses + [30]
    if sum(proposed) < passengers:
        proposed30 = add30(passengers, proposed)
        proposed50 = add50(passengers, proposed)
        return proposed30 if sum(proposed30) < sum(proposed50) else proposed50
    return proposed

print add30(88, [])
print add30(75, [])
print add30(105, [])

আমি যখন এটি চালাই, আমি পাই:

[30, 30, 30]
[30, 50]
[30, 30, 50]

কোডটি সম্ভাব্য দৃশ্যের মাধ্যমে একটি গভীরতার সাথে প্রথম অনুসন্ধান করছে। যেহেতু অর্ডারটি গুরুত্বপূর্ণ নয় ( [30, 50]একই একই [50, 30]) তবে আমরা একই আকার বা বৃহত্তর বাসগুলি যুক্ত করে অনুসন্ধানের জায়গাটি অনেক ছোট করে তুলতে পারি। এজন্য add30()কল করা যায় add50(), তবে অন্যদিকে নয়।


0

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

এর কারণে, আমি অনুরোধ করা অসংখ্য যাত্রীর সংখ্যার উপর ভিত্তি করে আমার নিজস্ব অনুসন্ধান সারণী তৈরি করতে সক্ষম হতে চাই এবং আমি সেরা বাস সংমিশ্রনের জন্য আমার নিজস্ব সেটিংস তৈরি করব। উদাহরণ: 31-50 = 1 এক্স 50, 51-60 = 2 এক্স 30. এটি কি সত্যই গণনা করা দরকার? আসন, গ্যাস এবং চালকদের ফর্মুলারগুলির একগুচ্ছের চেয়ে সেটিংস পরিবর্তন করা সহজ। সেরা সংমিশ্রণটি খুঁজে বের করুন এবং এটি দিয়ে কাজ করুন এবং ব্যবহারকারীরা যেমন উপযুক্ত হবে তেমন এই সেটিংস পরিবর্তন করার জন্য প্রচুর জায়গা পাবেন have

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

তারা তাদের সূত্রে একটি ভিন্ন যুক্তি সহ একটি নতুন পরামর্শক নিয়োগ করে এবং আপনার অ্যাপ্লিকেশনটি আবার লেখার প্রয়োজন হতে পারে। আপনি বোঝাতে পার্কিং খরচ ব্যয় করতে হবে?


এটি কাজ করে না: 31-50 = 50 সিট বাস, যদি না তারা ইতিমধ্যে অন্য গোষ্ঠীগুলির জন্য ব্যবহার করা হয়, না চাকরির বাইরে, বা অন্যান্য কারণে অনুপলব্ধ। প্রশ্ন থেকে বাস সংস্থা, 15 50-যাত্রী বাস সহ খুব সম্ভবত একবারে একাধিক গ্রাহক থাকবে।
এমসাল্টার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.