2012-08-17 23 views
11

सुझाव दें कि विभिन्न पूर्णांक लंबाई की सड़कों से जुड़े शहरों का एक नेटवर्क है।एक एल्गोरिदम (ग्राफ - संभवतः एनपी-पूर्ण)

एक यात्री अपनी कार में एक शहर से दूसरे शहर में यात्रा करना चाहता है। हालांकि, वह यात्रा की दूरी को कम नहीं करना चाहता; इसके बजाय वह यात्रा की पेट्रोल लागत को कम करना चाहता है। पेट्रोल किसी भी शहर में खरीदा जा सकता है, हालांकि प्रत्येक शहर विभिन्न (पूर्णांक) कीमतों पर पेट्रोल की आपूर्ति करता है (इसलिए सबसे छोटा रास्ता सबसे सस्ता क्यों नहीं है)। पेट्रोल की 1 इकाई उसे दूरी की एक इकाई के लिए ड्राइव करने में सक्षम बनाता है। उसकी कार टैंक में केवल इतना पेट्रोल रख सकती है, और वह चुन सकता है कि प्रत्येक शहर में पेट्रोल की कितनी इकाइयां खरीदती हैं। न्यूनतम पेट्रोल लागत पाएं।

क्या कोई इस समस्या को हल करने के लिए उपयोग किए जाने वाले कुशल एल्गोरिदम को जानता है? यहां तक ​​कि इस प्रकार की समस्या का नाम उपयोगी होगा ताकि मैं इसे स्वयं खोज सकूं! जाहिर है यह सबसे छोटी पथ समस्या के समान नहीं है। किसी भी अन्य सुझाव की सराहना की!

संपादित करें - वास्तविक समस्या मैंने कहा है कि < 1000 शहरों होंगे; < 10000 सड़कों; और पेट्रोल टैंक क्षमता कहीं और 1 के बीच होगी।

+0

यह मुझे लगता है कि यह एक छोटी सी चीज की तरह दिखता है। चलो देखते हैं कि दूसरों क्या कहते हैं। –

+0

मई मेरा सुझाव है कि आप अपना शीर्षक "ट्रैवलिंग सेल्समैन वेरिएशन" या कुछ में बदल दें। वर्तमान शीर्षक कुछ हद तक नोडस्क्रिप्ट है। – Nicolas78

+2

यह न तो एक नापसंद समस्या है और न ही यात्रा विक्रेता समस्या है: वह ए से बी में जाना चाहता है, हर जगह नहीं। यह एक विशिष्ट ग्राफ समस्या है, जिसका नाम afaik नहीं है। –

उत्तर

1

मुझे लगता है कि सवाल यह है: क्या पेट्रोल की चीजें अंतर्निहित यात्रा विक्रेता समस्या को कम्प्यूटेशनल रूप से अधिक व्यवहार्य बनाती हैं? यदि नहीं, तो कोई कुशल गैर-अनुमानित एल्गोरिदम नहीं है।

बेशक, आप किनारे के मामलों के लिए कुशल समाधान पा सकते हैं, और पेट्रोल की स्थिति के साथ और अधिक बढ़िया मामले हो सकते हैं, जैसा कि हमेशा इस शहर को पहले लेते हैं क्योंकि पेट्रोल इतना सस्ता है।

+0

@niomaster से सहमत हो सकता है तथ्य यह है कि एक यात्रा विक्रेता से आगे की तुलना में मैंने पहले – Nicolas78

+1

पर विचार किया था, लेकिन आम तौर पर यात्रा करने वाली विक्रेता समस्या को सभी पेट्रोल की कीमतों को एक ही मूल्य पर सेट करके और कार के पेट्रोल टैंक को पूरा करने के लिए पर्याप्त रूप से कम करके इसे कम किया जाता है। अतिरिक्त टैंकिंग के बिना पूरी यात्रा, इसलिए समस्या सामान्य रूप से एनपी-हार्ड है। कम्प्यूटेशनल जटिलता को कम करने के लिए टैंक आकार का उपयोग करने के लिए – Qnan

+0

+1 :) हालांकि, अतिरिक्त अंतर यह है कि वह सभी शहरों – Nicolas78

1

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

+0

मैं यह नहीं देख सकता कि यह कैसे काम करता है लेकिन कल मैं एक और नजर रखूंगा जब मैं कम थक गया हूं! –

0

मैं यह कोशिश करेंगे:

  1. शुरू से ही गंतव्य के लिए सबसे छोटा मार्ग का पता लगाएं। इसके लिए डिजस्ट्रा का एल्गोरिदम उपयुक्त है।
  2. इस मार्ग की यात्रा के लिए पेट्रोल की न्यूनतम लागत पाएं। मुझे इसके लिए किसी भी ऑफ-द-शेल्फ एल्गोरिदम से अवगत नहीं है, लेकिन जब तक कि मार्ग के साथ कई शहर भी नहीं हैं, तब भी एक संपूर्ण खोज कम्प्यूटेशनल रूप से अक्षम नहीं होनी चाहिए।
  3. अगले सबसे छोटा मार्ग का पता लगाएं ...

सटीक रोक मापदंड को परिभाषित करना एक चुनौती के एक सा है, यह सबसे अच्छा हो सकता है बस को रोकने के लिए एक बार कम से कम लागत एक नव परीक्षण किया मार्ग के लिए पाया तुलना में अधिक है पहले से परीक्षण किए गए मार्ग के लिए न्यूनतम लागत।

तो, समस्या के प्रत्येक भाग के लिए 2 एल्गोरिदम का उपयोग करें।

+0

यह एक वैध समाधान भी है, लेकिन दुर्भाग्यवश, बहुत धीमी है। –

+0

मुझे नहीं लगता कि न्यूनतम लागत फिर से बढ़ने के बाद आप रोक सकते हैं, सबसे सस्ता मार्ग सबसे लंबा होने के लिए संभव है और उदाहरण के लिए सबसे छोटा सबसे दूसरा सबसे सस्ता है ... सस्ती होने के बारे में सुनिश्चित करने के लिए आपको हर मार्ग की जांच करनी होगी:/ –

+0

मैं सहमत हूं, यह एक बहुत अच्छा जवाब नहीं है। –

5

यदि आप ग्राफ के आकार को बढ़ाने में प्रसन्न हैं तो आप इसे Djikstra's algorithm का उपयोग करके सीधे हल कर सकते हैं।

मान लीजिए कि आपका पेट्रोल टैंक पेट्रोल से 0 से 9 इकाइयों तक हो सकता है।

विचार प्रत्येक शहर को 10 नोड्स में विभाजित करना होगा, शहर के लिए नोड एक्स के साथ नोड एक्स के साथ टैंक में पेट्रोल की एक्स इकाइयों के साथ प्रतिनिधित्व किया जाएगा।

फिर आप विभिन्न शहरों के बीच यात्रा का प्रतिनिधित्व करने के लिए इस विस्तारित ग्राफ पर शून्य लागत वाले किनारों का निर्माण कर सकते हैं (प्रक्रिया में पेट्रोल का उपयोग करके ताकि आप स्तर 8 नोड से स्तर 5 नोड तक जा सकें यदि दूरी 3 थी) और पेट्रोल के एक इकाई (शहर के आधार पर लागत के साथ) के साथ प्रत्येक शहर में टैंक भरने का प्रतिनिधित्व करने के लिए अधिक किनारों।

फिर Djikstra को लागू करने से शुरुआत से अंत तक सबसे कम लागत पथ देना चाहिए।

+0

चालाक - मुझे यह पसंद है! यद्यपि यदि आपके पास एक बड़ा टैंक है तो यह ग्राफ को बहुत बड़ा बना देता है! –

0

यह आनुवांशिक एल्गोरिदम का उपयोग करके उचित रूप से अनुकूलित किया जा सकता है। आनुवंशिक एल्गोरिथम कुछ जटिल समस्याओं पर मनुष्य को हरा: http://en.wikipedia.org/wiki/Genetic_algorithm

एक आनुवंशिक एल्गोरिथ्म का सार है:

  1. उम्मीदवार समाधान के लिए एक रैंकिंग समारोह के साथ आओ
  2. अद्वितीय उम्मीदवार समाधान की पूल के साथ आओ । कुछ यादृच्छिक रूप से जेनरेट की गई संभावनाओं के साथ इसे आरंभ करें। हो सकता है कि 10 या 100 या 1000 ...
  3. कॉपी पूल से एक उम्मीदवार समाधान और किसी तरह से यह उपद्रव - , एक शहर को जोड़ने के एक शहर निकालने के लिए, दो शहरों को जोड़ने, आदि यह सुधार या मामलों और खराब हो सकता है - आपका रैंकिंग फ़ंक्शन आपको बताने में मदद करेगा। कौन सा कोई आपको चुनता है? आम तौर पर, आप सबसे अच्छा चुनते हैं, लेकिन थोड़ी देर में, आप जानबूझकर उस व्यक्ति को चुनते हैं जो स्थानीय इष्टतम पर फंसने से बचने के लिए नहीं है।
  4. क्या नया समाधान पहले से ही रैंक किया गया है? यदि हाँ, कबाड़ यह और
    1. नहीं हैं, तो जारी रखने के लिए जाना ...
  5. अपने नव गणना की रैंक के नीचे पूल के लिए वापस परेशान उम्मीदवार जोड़े
  6. इस पर जा रहा (# से दोहराने रखें 3) जब तक आपको लगता है कि आपने इसे लंबे समय तक पर्याप्त नहीं किया है
  7. अंत में, सर्वोत्तम रैंक के साथ उत्तर का चयन करें। यह इष्टतम नहीं हो सकता है, लेकिन यह बहुत अच्छा होना चाहिए।
0

आप इसे एक पूर्णांक रैखिक प्रोग्रामिंग (आईएलपी) समस्या के रूप में भी बना सकते हैं। इसका फायदा यह है कि इस कार्य के लिए कई ऑफ-द-शेल्फ सॉल्वर हैं और टैंक के आकार के साथ पीटर्स समाधान के मामले में जटिलता इतनी तेज़ी से नहीं बढ़ेगी।

इस विशेष समस्या में चर किसी भी शहर में खरीदे गए पेट्रोल की मात्रा, किसी भी शहर में कार टैंक की राशि और वास्तविक सड़कों पर ली गई राशि की मात्रा होगी। बाधाओं को यह गारंटी देनी होगी कि कार हर सड़क पर आवश्यक ईंधन खर्च करती है और किसी भी शहर में 0 या उससे अधिक ईंधन की ईंधन नहीं कम होती है और सड़कों ए से बी का मार्ग बनती है खरीदे गए ईंधन की कुल लागत हो।

पूरी बात राक्षसी दिख सकती है (आईएलपी फॉर्मूलेशन अक्सर करते हैं), लेकिन इसका मतलब यह नहीं है कि इसे उचित समय में हल नहीं किया जा सकता है।

संबंधित मुद्दे