কোন কে-সেরাতমতম-পথের অ্যালগরিদমগুলি বিবেচনা করা উচিত?


13

আমি একটি গ্রাফ-অনুসন্ধান অপ্টিমাইজেশান সমস্যা সমাধান করছি। আমাকে একটি নির্দেশিত ওজনযুক্ত গ্রাফের মাধ্যমে কে সেরা অ্যাসাইক্লিক সংক্ষিপ্ততম পাথগুলি সন্ধান করতে হবে।

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

আমার সমস্যার বিশিষ্ট দিকগুলি:

  • গ্রাফটি প্রায় 160 টি উল্লম্ব দ্বারা গঠিত।

  • গ্রাফটি সম্পূর্ণরূপে সংযুক্ত (দ্বিদ্বারা, তাই ~ 160 ^ 2 ~ = 25 কেজি)

  • কে বেশ ছোট হবে (সম্ভবত 10 এর কম)

  • সর্বাধিক পাথের দৈর্ঘ্য সম্ভবত সীমিত এবং খুব ছোট হবে (যেমন 3-5 প্রান্ত)

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

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

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

এবং আপনার যদি জাভা বাস্তবায়নের দিকে পয়েন্টার থাকে তবে আরও ভাল।


+1, কারণ আমি লোকদের দেওয়া পরামর্শগুলিতে আগ্রহী এবং এটি এই সাইটের জন্য সঠিক ধরণের প্রশ্নের মতো বলে মনে হচ্ছে।
কেচালোক্স

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

আমি পরিষ্কার ছিল না। অ্যাসাইক্লিক সীমাবদ্ধতা কেবলমাত্র একটি একক পাথের জন্য প্রযোজ্য - স্বাভাবিকভাবে, এ থেকে বি পর্যন্ত যে কোনও 2 টি পৃথক পথ একটি চক্র গঠন করবে।
অ্যারোনডি

@ অ্যারোনডি: তো, শেষ পর্যন্ত আপনি কোনটি ব্যবহার করেছেন?
ড্যাগলিনিস

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

উত্তর:


2

আংশিকভাবে আমার নিজের প্রশ্নের উত্তর দিতে:

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

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


1

আমি বলব যে এই প্রশ্নটি সহজেই গুগল করা যায় এবং এটি একটি নকলও:

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

http://pdf.aminer.org/001/059/121/finding_the_k_shortest_paths.pdf


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

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

@ আরনাউদ হাই, আপনার এপস্টিনের বাস্তবায়নটি কি আপনার পক্ষে ভাগ করে নেওয়া সম্ভব? আমার এখানে একটি অনুরূপ প্রশ্ন পোস্ট করা হয়েছে: math.stackexchange.com/questions/1661737/…
টিনা জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.