मुझे कौन से सबसे छोटे पथ-पथ एल्गोरिदम पर विचार करना चाहिए?


13

मैं एक ग्राफ-खोज अनुकूलन समस्या हल कर रहा हूं। मुझे एक निर्देशित भारित ग्राफ के माध्यम से k सर्वोत्तम एसाइक्लिक लघु-पथ खोजने की आवश्यकता है।

मुझे पता है कि कई सटीक और अनुमानित k-best एल्गोरिदम हैं, लेकिन हाल के अधिकांश शोध बहुत बड़े, बहुत कम जुड़े हुए ग्राफ़ (जैसे सड़क मार्ग और दिशाओं) की ओर उन्मुख प्रतीत होते हैं, और मेरा ग्राफ़ न तो है।

मेरी समस्या के विशिष्ट पहलू:

  • ग्राफ में लगभग 160 कोने हैं।

  • ग्राफ लगभग पूरी तरह से जुड़ा हुआ है (अप्रत्यक्ष रूप से, इसलिए ~ 160 ^ 2 ~ = 25k किनारों)

  • k काफी छोटा होगा (शायद 10 से कम)

  • अधिकतम पथ की लंबाई शायद बंधी होगी और साथ ही बहुत छोटी (जैसे 3-5 किनारे)

  • मैंने ऊपर iter एसाइक्लिक ’कहा था, लेकिन सिर्फ दोहराने के लिए - समाधान में चक्र शामिल नहीं होना चाहिए। यह 1-सर्वश्रेष्ठ लघु पथ के लिए कोई समस्या नहीं है, लेकिन यह k-best के लिए एक समस्या बन जाता है - उदाहरण के लिए, एक सड़क मार्ग पर विचार करें - A से B तक का दूसरा सबसे छोटा मार्ग 1-सर्वश्रेष्ठ के समान हो सकता है, एक ब्लॉक के चारों ओर एक त्वरित यात्रा। यह गणितीय रूप से इष्टतम हो सकता है, लेकिन बहुत उपयोगी समाधान नहीं है। ;-)

  • हमें प्रत्येक गणना के लिए किनारों पर फिर से वजन करने की आवश्यकता हो सकती है। एक किनारे की लागत में कई कारकों का भारित योग होता है, और अंतिम आवश्यकताएं (जब भी हम उन्हें प्राप्त करते हैं) किसी उपयोगकर्ता को उन भार कारकों के अपने प्राथमिकताकरण को निर्दिष्ट करने की अनुमति दे सकते हैं, जो कि बढ़त भार को बदल देते हैं। यह एक अपेक्षाकृत छोटा ग्राफ है (हमें कुछ सौ केबी में इसका प्रतिनिधित्व करने में सक्षम होना चाहिए), इसलिए यह संभव है कि ग्राफ़ को स्मृति में क्लोन करना, पुनः-भार को लागू करना और फिर क्लोन किए गए ग्राफ़ पर खोज को निष्पादित करना उचित है। लेकिन अगर मक्खी पर वजन की गणना करते समय खोज करने का एक और प्रभावी तरीका है, तो मुझे दिलचस्पी है।

मैं सेंटोस (K सबसे छोटा पथ एल्गोरिदम), इपस्टीन 1997 (k Shortest पाथ्स ढूँढना) और अन्य में वर्णित एल्गोरिदम को देख रहा हूं। येन का एल्गोरिथ्म ब्याज का है, मुख्य रूप से मौजूदा जावा कार्यान्वयन के कारण । मैं शोध पत्रों को पढ़ने से डरता नहीं हूं, लेकिन मुझे लगा कि यह मेरी समस्या का विवरण बाहर फेंकने और कुछ पढ़ने के समय को बचाने के लिए संकेत देने के लिए कह रहा है।

और अगर आपके पास जावा कार्यान्वयन के संकेत हैं, तो और भी बेहतर।


+1, क्योंकि मुझे उन लोगों के सुझावों में दिलचस्पी है, और ऐसा लगता है कि यह साइट किस प्रकार के प्रश्न के लिए बनाई गई थी।
KChaloux 14

क्या आपकी चक्रीय स्थिति का मतलब यह नहीं है कि शुरू से लक्ष्य तक का कोई और रास्ता पहले रास्ते के साथ चक्र का निर्माण करेगा? और अगर शुरू और लक्ष्य दोनों अंधे गली में हैं, तो हर रास्ते को इन दो किनारों का उपयोग करना होगा।
user470365

शायद मैं स्पष्ट नहीं था। चक्रीय बाधा केवल एक ही पथ पर लागू होती है - स्वाभाविक रूप से, ए से बी तक कोई भी 2 अलग-अलग पथ एक चक्र बनाएंगे।
एरोनडी

@AaronD: तो, आपने अंत में कौन सा इस्तेमाल किया?
डेगनलीज

@arnaud: मुझे यकीन नहीं है कि मैं अभी तक एक एल्गोरिथ्म पर बस गया हूं; जब मेरे पास होगा तो मैं इस सवाल का अपडेट जोड़ दूंगा। मैंने एपस्टीन को समाप्त कर दिया क्योंकि यह एसाइक्लिक (उर्फ 'सरल') समाधानों की गारंटी नहीं देता है। मैं वर्तमान में येन के एल्गोरिथ्म के साथ काम कर रहा हूं, लेकिन मैं अभी तक विस्तृत रूपरेखा या अनुकूलन के लिए तैयार नहीं हुआ हूं, इसलिए मुझे इसे दूसरे के साथ बदलना पड़ सकता है। मैं अगले एक या दो सप्ताह में अपडेट कर दूंगा।
एरोनडी

जवाबों:


2

आंशिक रूप से मेरे स्वयं के प्रश्न का उत्तर देने के लिए:

इस प्रश्न को पोस्ट करने के बाद से, मुझे पता चला कि हमें नकारात्मक एज वेट को संभालने की आवश्यकता है और साथ ही सकारात्मक (एसाइक्लिक / सरल / लूपलेस पथों तक सीमित करने का मतलब है कि सबसे अच्छा समाधान परिभाषित किया गया है, जबकि उस सीमा के बिना नकारात्मक के साथ एक ग्राफ के माध्यम से सबसे छोटा रास्ता है) लागत चक्र अपरिभाषित है)।

येन का एल्गोरिथ्म, और जिन अन्य की मैंने जांच की, उनमें से अधिकांश 1-सर्वोत्तम खोजों की एक श्रृंखला पर निर्भर हैं; सबसे अधिक उन मध्यवर्ती खोजों के लिए दिज्क्स्त्र का उपयोग करें। दिज्क्स्ट्रा नकारात्मक बढ़त वज़न का समर्थन नहीं करता है, लेकिन हम बेलमैन-फोर्ड को इसके स्थान पर (कम से कम येन में, संभवतः लॉलर या एप्पस्टीन में भी) स्थानापन्न कर सकते हैं। मैंने एक लंबाई-लंबाई सीमा (किनारों में) के साथ बेलमैन-फोर्ड का एक संशोधन विकसित किया है और खोज के दौरान स्पष्ट चक्र-जांच (मानक पोस्ट-सर्च चक्र का पता लगाने के स्थान पर)। कम्प्यूटेशनल जटिलता बदतर है, लेकिन मेरी आवश्यकताओं के लिए अभी भी ट्रैक्टेबल है। यदि मैं इसे पोस्ट करने की अनुमति प्राप्त करता हूं, तो मैं इस प्रतिक्रिया और एक तकनीकी रिपोर्ट से लिंक करूँगा।


1

मैं कहूंगा कि यह सवाल आसानी से गूंजा जा सकता है और यह एक डुप्लिकेट भी है:

यह कहा जा रहा है, मैंने पहले से ही एप्पस्टीन का इस्तेमाल किया और इसे लागू किया। मुझे यह काफी सुरुचिपूर्ण लगा। अगर मुझे सही याद है, तो यह इष्टतम भी हो सकता है, और निम्न पेपर इसे बहुत अच्छी तरह से समझाता है:

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


सबसे पहले, एप्पस्टीन की सिफारिश के लिए धन्यवाद। मैं वहां और देखूंगा। मेरा तर्क है कि यह एक सटीक डुप्लिकेट नहीं है, न ही यह Google के लिए आसान है; के-बेस्ट एल्गोरिथ्म खोजना आसान है, लेकिन उन दोनों के बीच समझदारी से चयन करना इतना आसान नहीं है। मुझे उम्मीद है कि मैं इस समस्या के लिए लाखों वर्टिकल के एक बहुत ही अलग-अलग ग्राफ के लिए एक बहुत अलग एल्गोरिथ्म चाहूंगा। मैं कश्मीर में जटिलता के बारे में बहुत अधिक परवाह करता हूं अगर मैं 10-सर्वश्रेष्ठ के बजाय 1000-सर्वश्रेष्ठ चाहता हूं। और, जबकि लगातार कारक कागजात प्रकाशित करते समय महत्वपूर्ण नहीं होते हैं, वे निश्चित रूप से जब उत्पादन कोड शिपिंग होते हैं।
एरोनड

@AaronD: आपकी जानकारी के लिए, मुझे लगता है कि जो भी मामला है एल्गोरिथ्म बहुत कुशल है। शायद ऐसे विशेष मामले हैं जहां हेयुरिस्टिक संचालित खोजों ने इसे हराया, लेकिन सामान्य मामले के लिए, मुझे लगता है कि यह बहुत अच्छा करता है। सटीक प्रदर्शन संभवतः इस बात पर अधिक निर्भर करेगा कि आप इसे कैसे लागू करते हैं, आपके डेटास्ट्रक्चर की दक्षता और यह आपकी समस्या के अनुरूप है।
प्रातः

@arnaud हाय, क्या आपके लिए अपने एपस्टीन के कार्यान्वयन को साझा करना संभव है? मेरे पास एक समान प्रश्न यहां पोस्ट किया गया है: math.stackexchange.com/questions/1661737/…
टीना जे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.