7

मैं एक वितरण कंपनी में काम कर रहा हूं। वर्तमान में हम "हाथ" द्वारा 50+ स्थानों के मार्गों को हल करते हैं।रूबी में यात्रा करने वाले विक्रेता समस्या को हल करना (50+ स्थान)

मैं इस समस्या को हल करने के लिए Google मानचित्र API का उपयोग करने के बारे में सोच रहा हूं, लेकिन मैंने पढ़ा है कि 24 अंक सीमा है।

वर्तमान में हम अपने सर्वर में रेल का उपयोग कर रहे हैं, इसलिए मैं एक रूबी स्क्रिप्ट का उपयोग करने के बारे में सोच रहा हूं जो 50+ स्थानों के निर्देशांक प्राप्त करेगा और एक उचित समाधान आउटपुट करेगा।

इस समस्या से निपटने के लिए आप किस एल्गोरिदम का उपयोग करेंगे?

क्या रूबी इस प्रकार की समस्या को हल करने के लिए एक अच्छी प्रोग्रामिंग भाषा है?

क्या आप किसी भी मौजूदा रूबी स्क्रिप्ट के बारे में जानते हैं?

+1

... आप निश्चित रूप से महसूस करते हैं कि यह सबसे कठिन समस्याओं में से एक है, है ना? वास्तव में कोई महान जवाब के साथ? अभी भी उचित समाधान हैं, लेकिन केवल यह सुनिश्चित करना कि आप जानते हैं कि वे वास्तव में * महान * नहीं होंगे। – Matchu

+0

हाँ ... मैं "इष्टतम" समाधान की तलाश नहीं कर रहा हूं ... एक उचित व्यक्ति करेगा :) – jfanals

+1

मैंने "यात्रा-विक्रेता" टैग जोड़ा है। क्या आपने उस टैग में अन्य प्रश्नों को देखने का प्रयास किया है? –

उत्तर

6

यह हो सकता है आप के लिए क्या देख रहे:

चेतावनी:

इस साइट का दौरा साइट के रूप में फ़ायरफ़ॉक्स द्वारा चिह्नित किया जाता है - लेकिन मैं होने के लिए प्रकट नहीं होता। वास्तव में मैं इसे पहले प्रयोग किया जाता है एक समस्या के बिना

[URL के लिए संशोधन इतिहास की जाँच करें]

rubyquiz बंद हो गया है (एक बिट के लिए नीचे दिया गया है) लेकिन आप अभी भी करने के लिए वेबैक मशीन और archive.org की जांच कर सकते उस पृष्ठ देखें:
1: http://web.archive.org/web/20100105132957/http://rubyquiz.com/quiz142.html

+0

एक बहुत अच्छा प्रारंभिक बिंदु की तरह दिखता है। धन्यवाद! – jfanals

+0

आपके द्वारा सुझाए गए यूआरएल को कई समाधानों को इंगित किया जा सकता है जिन्हें डाउनलोड किया जा सकता है ... मैं अपनी आवश्यकताओं के अनुरूप समाधानों में से एक (जोसेफ सीटन से) के कोड को ट्विक करने में सक्षम था। उस साइट पर इशारा करने के लिए फिर से धन्यवाद :) मैं 10 सेकंड से भी कम समय में एक उचित समाधान प्राप्त करने में कामयाब रहा ... – jfanals

+0

आप स्वागत से अधिक हैं।बीटीडब्ल्यू - मैं अत्यधिक समस्याओं की खोज करने और कोशिश करने की अत्यधिक अनुशंसा करता हूं - आपको बेहतर रूबी प्रोग्रामर बनने में मदद करेगा। मैं एक सप्ताह में एक समस्या करने की कोशिश करता हूं, जब मेरे पास समय होता है। – konung

1

अनुकूलित समाधान में से एक गतिशील प्रोग्रामिंग का उपयोग कर रहा है लेकिन अभी भी बहुत महंगा ओ (2 ** एन) है, जो बहुत व्यवहार्य नहीं है, जब तक कि आप कुछ क्लस्टरिंग और कंप्यूटिंग, रूबी या एकल सर्वर वितरित नहीं करते हैं, बहुत उपयोगी नहीं होंगे तुम्हारे लिए।

मैं आपको डीपी या ब्रूट फोर्स का उपयोग करने के बजाय लालची मानदंड के साथ आने की सलाह दूंगा जो लागू करना आसान होगा।

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

, आपको वजन वाले किनारों, किनारों को लागू करने की आवश्यकता होगी।

यानी: वर्टेक्स वर्ग जिसमें वजन, किनारों के साथ किनारों हैं। एक ग्राफ वर्ग की तुलना में जो डेटा को पॉप्युलेट करेगा।

+1

ब्रूट फोर्स दृष्टिकोण को 20 से अधिक अंक के लिए अव्यवहारिक माना जाता है। 50 के लिए उसे प्रत्येक विक्रेता के लिए फैक्टोरियल (50!) क्रमपरिवर्तनों का प्रयास करना होगा - मोटे तौर पर लगभग = 30414093201713378043612608166064768844377641568960512000000000000। – konung

2

यहाँ चाल के एक जोड़े हैं गांठ स्थानों है कि अपेक्षाकृत करीब एक ग्राफ में हैं, और आपके मुख्य ग्राफ में एक भी नोड में उन स्थानों बदल जाते हैं। यह आपको बहुत अधिक काम किए बिना लालची बनने देता है।
2: अनुमानित एल्गोरिदम का उपयोग करें।
2 ए: मेरा पसंदीदा बिटनिक टूर है। वे हैक करने के लिए बहुत आसान हैं।
देखें अद्यतन

Here's a py lib with a bitonic tour और here's another
मुझे एक गहरे लाल रंग का एक देखने चलते हैं। मुझे केवल RGL से अधिक खोजने में परेशानी हो रही है, जिसमें दक्षता समस्याएं हैं ....

अद्यतन
आपके मामले में, कम से कम फैले पेड़ हमले प्रभावी होना चाहिए। मैं ऐसे मामले के बारे में नहीं सोच सकता जहां आपके शहर त्रिभुज असमानता को पूरा नहीं करेंगे। इसका मतलब है कि लगभग अपेक्षाकृत तरह के सभ्य अनुमान के अपेक्षाकृत प्रकार का होना चाहिए। विशेष रूप से अगर दूरी euclidean है, जो मुझे लगता है, फिर, यह होना चाहिए।

4

यहां तक ​​कि किसी अन्य उत्तर में उल्लिखित डीपी समाधान के साथ, ओ (10^15) संचालन की आवश्यकता होगी। तो आपको अनुमानित समाधानों को देखना होगा, जो शायद स्वीकार्य हैं कि आप वर्तमान में उन्हें हाथ से करते हैं। http://en.wikipedia.org/wiki/Travelling_salesman_problem#Heuristic_and_approximation_algorithms

+0

+1! विशेष रूप से यूक्लिडियन टीएसपी उपधारा से जुड़े पीटीएएस को देखें या http://www.cs.princeton.edu/~arora/pubs/tsp.ps में वर्णित (http: //corelab.ntua पर उपलब्ध विवरण का पालन करना आसान है। जीआर/पाठ्यक्रम/लगभग-एलजी/सामग्री/यूक्लिडियन% 20TSP.pdf)। यह आपको पॉली-टाइम ओ (1 + 1/ईपीएसलॉन) सन्निकटन एल्गोरिदम देता है जो भी आप चाहते हैं कि ईपीएसलॉन (निश्चित रूप से, सावधान रहें कि एक्सपोनेंट 1/ईपीएसलॉन के साथ बढ़ता है)! –

0

यदि आप चाहते हैं कि एल्गोरिदम द्वारा उत्पादित समाधान की लागत इष्टतम के 3/2 के भीतर है तो आप क्रिस्टोफाइड एल्गोरिदम चाहते हैं। एसीओ और जीए की गारंटीकृत लागत नहीं है।

1

मैं Bays29 (29-शहर) समस्या के लिए हल करने के लिए इस तरह के TSP समस्याओं चींटी कॉलोनी Optimazation के रूप में मेटा-heurestic एल्गोरिदम का उपयोग करने पर काम किया, और यह मुझे बहुत ही कम समय में इष्टतम समाधान के करीब दे दी है। आप संभावित रूप से इसका उपयोग कर सकते हैं।

मैं जावा में लिखा था, हालांकि, मैं इसे यहाँ वैसे भी रूबी के लिए लिंक करेगा, क्योंकि मैं वर्तमान में एक बंदरगाह पर काम कर रहा हूँ: जावा: https://github.com/mohammedri/ant_colony_java_TSP रूबी: https://github.com/mohammedri/aco-ruby (अधूरा) यह डेटासेट इसके लिए हल करती है: https://github.com/jorik041/osmsharp/blob/master/Core/OsmSharp.Tools/Benchmark/TSPLIB/Problems/TSP/bays29.tsp

ध्यान रखें कि मैं प्रत्येक शहर यानी सीधी रेखा दूरी के बीच यूक्लिडियन दूरी का उपयोग कर रहा हूं, मुझे नहीं लगता कि सड़कों और शहर के मानचित्र आदि पर विचार करने वाले वास्तविक जीवन की स्थिति में आदर्श है लेकिन यह एक अच्छी शुरुआत हो सकती है बिंदु :)

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

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