2010-05-01 15 views
8

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

मैं वर्तमान में एक परियोजना है जिसके तहत मैं एक नक्शा और मैं एक 'Critter' है कि नक्शे के आसपास अपना रास्ता नेविगेट करने में सक्षम होना चाहिए कोडिंग कर रहा हूँ दिया गया है पर काम कर रहा हूँ; क्रेटर के कई अन्य कार्य होते हैं, लेकिन वे वर्तमान प्रश्न के लिए प्रासंगिक नहीं हैं। पूरे कार्यक्रम और समाधान सी # में लिखा जा रहा है।

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

समस्या सिर्फ मेरे पास है कि मैं एक तरह से समझदारी से नक्शा चारों ओर मेरे रास्ते नेविगेट करने की सोच भी नहीं सकता है; अब तक मैं इसे आधार पर देख रहा हूं कि जब यह इलाके से टकराता है तो क्रेटर का सामना करना पड़ता है, और यह नक्शे के चारों ओर घूमने का कोई अच्छा तरीका नहीं है!

मैं एक खेल प्रोग्रामर नहीं कर रहा हूँ, और यह एक सॉफ्टवेयर काम के लिए है, इसलिए मैं ऐ तकनीक पर कोई सुराग नहीं है।

यहाँ नक्शे और critters की तरह लग की एक छवि के लिए एक लिंक है:

Map and Critter image

मैं कोई रास्ता नहीं में हूँ देखने वाले हर व्यक्ति मुझे एक पूर्ण समाधान सामान्य रूप में सिर्फ एक धक्का देने के लिए के लिए, मानचित्र नेविगेशन पर दिशा।

+0

आपने कहा था कि जब आप इसे अवरुद्ध करने वाले इलाके से टकराते हैं तो आप "इसकी दिशा निर्धारित कर सकते हैं।" क्या आप इसकी दिशा निर्धारित कर सकते हैं जब यह किसी चीज़ से टकराता हो? या, क्या आप अपनी दिशा को इच्छानुसार बदल सकते हैं क्योंकि यह नक्शे के चारों ओर घूमता है? – dmcer

+0

मैं इच्छानुसार दिशा बदल सकता हूं! –

+0

क्या मानचित्र समय से पहले पूरी तरह से ज्ञात है? या, क्या आपको अपने क्रिटर के साथ इलाके की खोज करके बाधाओं और पुरस्कारों की खोज करनी है? – dmcer

उत्तर

0

मैं एक लक्ष्य उन्मुख दृष्टिकोण का प्रयोग करेंगे। आपका प्रश्न बताता है कि लक्ष्य मानचित्र का पता लगाने और बाधाओं से बचने के बजाय है, इसलिए हम अपना लक्ष्य बनाते हैं। लेकिन हम पूरे मानचित्र का पता कैसे लगा सकते हैं? हम अनदेखा क्या पता लगाते हैं।

शुरू से आप केवल एक बेरोज़गार क्षेत्र, वर्ग आप पर हैं। शेष मानचित्र को अनपढ़ के रूप में चिह्नित किया गया है। आप एक अज्ञात स्थान चुनते हैं, और इसे खोजने का अपना लक्ष्य बनाते हैं। लेकिन आप वहां कैसे जाते हैं? आप इसके आगे के स्थान का पता लगाने के लिए एक उपन्यास बनाते हैं। और आप यह कैसे करते हैं - उसके आगे के वर्ग का पता लगाएं, और इसी तरह, जब तक कि आपका मूल लक्ष्य अन्वेषण के अनुक्रम में विभाजित न हो जाए, आपके वर्तमान वर्ग से शुरू हो और लक्ष्य वर्ग पर जाकर।

आप बाधाओं को मारा और नक्शे की सुविधाओं की खोज के रूप में, subgoals के कुछ परिवर्तित करने की आवश्यकता हो सकती है। जैसे जब आप दीवार पर हिट करते हैं, तो उस वर्ग को एक्सप्लोर करने के लिए सबगोल को साफ़ किया जाना चाहिए और आप वैकल्पिक मार्ग खोजने के लिए एक नई योजना बनाते हैं। इसे बैकट्रैकिंग के रूप में जाना जाता है।

उच्च स्तर के वर्णन के लिए मूल रूप से यह है कि। मुझे उम्मीद है यह मदद करेगा!

+0

मैं बिल्कुल यह नहीं करूँगा - आप पास के लक्ष्य को चुनना चाहते हैं। मैं निकटतम अनपढ़ वर्ग का पता लगाने का लक्ष्य बनाउंगा। –

3

एक * खोज

A* pathfinding एल्गोरिथ्म पर एक नजर डालें। यह अनिवार्य रूप से मानक इस तरह की सामग्री के लिए दृष्टिकोण है।

अमित पटेल के pathfinding for games पर लिखने अप ए * करने के लिए एक बहुत अच्छी शुरूआत के साथ ही एल्गोरिथ्म के लोकप्रिय वेरिएंट है।

आप एक सी # कार्यान्वयन here मिल जाएगा, और here

गतिशील ए *

के इलाके आप खोज करेंगे समय से आगे नहीं जाना जाता है मान लीजिए, बल्कि के रूप में की खोज की है एजेंट अपने पर्यावरण की पड़ताल करता है। यदि आपका एजेंट पहले अज्ञात बाधा में आता है, तो आप केवल इलाके के एजेंट के मानचित्र को अपडेट कर सकते हैं और फिर बाधा के चारों ओर मार्ग के लक्ष्य के लिए एक नया रास्ता खोजने के लिए ए * फिर से चला सकते हैं।

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

आप Dynamic A* (D*) का उपयोग करके इससे बच सकते हैं। चूंकि यह पहले गणना किए गए पथों का ट्रैक रखता है, जब एजेंट को नई बाधा मिलती है, तो सिस्टम को केवल बाधा के आस-पास के क्षेत्र में नए मार्गों की गणना करने की आवश्यकता होती है। उसके बाद, यह मौजूदा पथों का पुन: उपयोग कर सकता है।

+0

यह फोकस डी * के लिए पेपर है, डी * के लिए नहीं। हालांकि, इन दोनों को डी * -लाइट द्वारा हटा दिया गया है। अधिक जानकारी के लिए [यहां] (http://cstheory.stackexchange.com/a/11866/8532) देखें और अन्य एल्गोरिदम जो ओपी की समस्या पर लागू हो सकते हैं। –

6

वातावरण है कि आप में से केवल ज्ञान अपने से जीव और अपने सबसे अच्छे रूप आप कर सकते हैं वेग की स्थिति है, तो एक दीवार निम्नलिखित कलन विधि मुझे लगता है कि है। यदि आप अपने पर्यावरण में कुछ अन्य चीजों का पता लगा सकते हैं तो आपके पास कई और विकल्प हैं।

अधिक लोकप्रिय एल्गोरिथ्म प्रकार के होते हैं में से कुछ ...

संभावित क्षेत्रों एक है प्रत्येक बाधा या दीवार कहने का शानदार तरीका हर जाने पर "प्रतिकूल बल" होता है अल में एक "आकर्षक बल" है। बल की ताकत वस्तु से दूरी और वस्तु की "गंभीरता" पर आधारित होती है। बल क्षेत्रों अनुभवहीन एल्गोरिथ्म कम से कम प्रतिरोध के मार्ग का अनुसरण करने पर निर्भर करता निर्माण के बाद (लावा का एक गड्ढे एक ऊबड़ सड़क की तुलना में के माध्यम से यात्रा करने के लिए और अधिक गंभीर है)। बेहतर संस्करण स्थानीय मिनीमा और मैक्सिमा का पता लगा सकते हैं और उन कुओं से बच सकते हैं।

Critter 
    -----\ /-------\ 
      \/  \ 
      \/   \ 
    Local Minima Trap  \ 
          \ 
          \ 
          Goal 
0

मुझे पार्टी में देर हो रही है। अपने से जीव एक जीपीएस और हाथ में पूरा नक्शा है, तो ऐसा करना सही निश्चित रूप से एक * है, और अगर नक्शा छोटा है पर्याप्त एक सरल BFS रूप में अच्छी तरह एक करना होगा (यदि आप एक * ऊपर कोडिंग की तरह नहीं लग रहा है * आपके पास कुछ कोने के मामले हैं जिन्हें आप सही तरीके से संभालना चाहते हैं)।

हालांकि एक अलग सवाल यह है कि यदि आपका क्रेटर केवल लक्ष्य की दिशा जानता है और केवल स्थानीय रूप से देख सकता है तो इसके आसपास क्या है? क्या होगा यदि आपका क्रेटर पूरा नक्शा नहीं जानता है?

इस मामले आप नेविगेशन के लिए "बग एल्गोरिथ्म" लागू करने के लिए चाहते हो जाएगा में

। लिंक: http://www.cs.cmu.edu/~./motionplanning/lecture/Chap2-Bug-Alg_howie.pdf

यह एल्गोरिदम का एक प्यारा टुकड़ा है जो सभी अज्ञात मानचित्रों के लिए काम करता है, आपको एक विस्फोट कोडिंग होगा, मुझे यकीन है।

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