रियल टाइम डायनामिक पाथफाइंडिंग?


19

मैं वर्तमान में कुछ पाथफाइंडिंग अनुसंधान कर रहा हूं और मेरा सिमुलेशन निम्नलिखित है: मेरे पास एक शुरुआत और अंत बिंदु के साथ एक 3 डी दृश्य है, मैं नैविगेशनल मेष, वेपॉइंट और पॉलीगॉन बनाने में सक्षम हूं जो पथफाइंडिंग के साथ सहायता करते हैं।

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

मैंने डी * एल्गोरिथ्म पर कुछ पढ़ा है और सोच रहा हूं कि क्या यह मेरे लिए उपयुक्त होगा या यह एक ओवरकिल की तरह प्रतीत होगा।

इसलिए मेरे प्रश्न मूल रूप से हैं: रियल टाइम डायनामिक पाथफाइंडिंग के लिए कौन सा एल्गोरिदम सबसे अच्छा होगा? या मैं इसके बजाय तकनीक के किस संयोजन का उपयोग कर सकता हूं?


मुझे यकीन है कि वे क्या का उपयोग एल्गोरिथ्म नहीं कर रहा हूँ तो यह एक जवाब नहीं है, लेकिन मुझे लगता है यह है कि क्या आप का अनुकरण करने की कोशिश कर रहे हैं: यूट्यूब वीडियो
MichaelHouse

A * का विस्तार करने के बारे में क्या? जो आप चाहते हैं उसके नोड्स में खुले / बंद सेटों में संग्रहित किया गया है और इसे विचार करने के लिए A * का विस्तार करना।
user712092

मैं आपके जैसे ही उत्तर की तलाश में था और मुझे एचपीए * के बारे में एक लेख मिला और यह वीडियो गेम से संबंधित है। मैं अभी भी लेख देख रहा हूं और शायद इसे लागू करने जा रहा हूं। अब तक यह मेरे प्रदर्शन को बेहतर बनाने के लिए समझ में नहीं आता है और इसका उपयोग स्थिर और गतिशील वातावरण दोनों में किया जा सकता है। यहाँ लेख है
नेल्सनपंच

जवाबों:


19

डी * काफी शामिल है - मैं इसे लागू करने की कोशिश नहीं कर रहा हूँ। यहां तक ​​कि जब परियोजनाओं को अच्छी तरह से वित्त पोषित किया जाता है, और स्मार्ट / अनुभवी लोगों द्वारा विकसित किया जा रहा है, तो डी * लाइट का उपयोग किया जाता है, क्योंकि डी * सही होने के लिए ऐसा दर्द है।

आप इस प्रस्तुति में रुचि ले सकते हैं, जिसमें लेफ्ट 4 डेड के पाथफाइंडिंग की चर्चा शामिल है:

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

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

यदि आप सैकड़ों, या हजारों एजेंटों का समर्थन करना चाहते हैं, तो आप निरंतर भीड़ की तरह कुछ लागू कर सकते हैं। इस शोध को देखें: http://grail.cs.washington.edu/projects/crowd-flows/ जो शुद्ध रूप से सीपीयू आधारित विधि की चर्चा करता है जो एक गतिशील वातावरण में हजारों अभिनेताओं का समर्थन कर सकता है।

यदि आप हज़ारों, या सैकड़ों हज़ारों एजेंटों का समर्थन करना चाहते हैं, तो आप GPU की सहायता से सातत्य भीड़ जैसी चीज़ों को लागू कर सकते हैं। प्रासंगिक शोध के लिए यहां देखें: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLAES.pdf

यहां एक्शन में निरंतर भीड़ का प्रदर्शन करने वाला एक वीडियो है: http://www.youtube.com/watch?v=lGOvYyJ6r1c (शहर में घूमने वाले सैकड़ों लोगों को प्रभावित करने वाली कारों और स्टॉपलाइट्स जैसी बड़ी गतिशील बाधाओं को देखने के लिए छोड़ें)।


लिंक के लिए धन्यवाद। D * लाइट मैं क्या पढ़ रहा है से सही लगता है
आंद्रेई

9

क्या आपने सरल स्टीयरिंग व्यवहार को देखा है?

http://www.red3d.com/cwr/steer/

स्थानीय बाधा से बचने के लिए आप उन्हें अपने A * पथ से वीर करने के लिए उपयोग कर सकते हैं, और एक बार जब आप काम कर लेते हैं तो अपने रास्ते पर वापस आ सकते हैं।

यह भी कई व्यवहारों को संयोजित करने के लिए काफी आसान है।


+1। मुझे यकीन नहीं है कि क्यों नीचे उतर गया। हालांकि यह सरल है, और संभवतः यह उत्तर नहीं है कि
पूछने वाले की

1
मैंने इस स्टीयरिंग व्यवहार को हमारे नवीनतम गेम में पढ़ा और कार्यान्वित किया है। अब हम इसे अन्य तरीकों से फिर से बदलने जा रहे हैं। मुझे लगता है कि यह पूर्वनिर्मित इष्टतम रास्तों के साथ अच्छी तरह से काम नहीं करता है। कई व्यवहारों का "संयोजन" आमतौर पर खराब परिणाम देता है। यदि आप अभी भी इसका उपयोग करने की योजना बना रहे हैं, तो उसी समय अपने पथ को चलाने और उसका अनुसरण करने का प्रयास न करें। इसके बजाय, 100% स्टीयरिंग पर स्विच करें और बाधा पार करने के बाद 100% वापस स्विच करें।
इमी

4

के बाद से अपनी पोस्ट ढेर आदान-प्रदान के "खेल विकास" हिस्से में है, यहाँ क्या सबसे खेल प्रोग्रामर आप जवाब देगा: यह वास्तविक समय गतिशील pathfinding बारे में नहीं है, इसके बारे में वास्तविक समय गतिशील पथ है * निम्नलिखित *!

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

इसलिए, मेरी सलाह स्टीयरिंग बिहेवियर (http://red3d.com/cwr/steer/) को लागू करने से शुरू होगी, ऐसे मामलों को संभालें जहां रास्ता असंभव हो जाता है और फिर इसके ऊपर एक लेयर डालते हैं ताकि एज केस आ जाए। ' टी पिछले दो समाधान द्वारा संभाला।

उम्मीद है की यह मदद करेगा


उह, नहीं। "पाथ फॉलोइंग" पाथ फाइंडिंग के समान है। कई दृष्टिकोण हैं जो एक डेस्कटॉप पीसी पर बाधाओं को बदल रहे हैं, जब हजारों एजेंटों के बाद रियलटाइम की अनुमति देते हैं। निश्चित रूप से यह एकल एजेंट के लिए एक रास्ता खोजने के लिए बहुत महंगा नहीं है , जब बाधाएं चारों ओर घूमती हैं। यहाँ एक ऐसा दृष्टिकोण है, कई: grail.cs.washington.edu/projects/crowd-flows जीपीयू में निरंतर भीड़ के संस्करण मौजूद हैं।
ओलहोवस्की

मुझे इस पर असहमत होना पड़ेगा। कोई भी इंजन दो अलग-अलग समस्याओं के रूप में पथ खोज और पथ का इलाज करेगा, जहां पहला नौगम्य क्षेत्र का एक ग्राफ खोज है और दूसरा एक स्थानीय स्थान के भीतर इष्टतम आंदोलन वेक्टर की खोज करने का इरादा रखता है। मैंने ऐसी भीड़ सिमुलेशन पर काम किया है जो GPU पर भरोसा करने की आवश्यकता के बिना AAA गेम द्वारा उपयोग किए जाने वाले मिडलवेयर का उत्पादन कर रहा है। अधिकांश कार्यान्वयन प्रवाह क्षेत्र (पाथफाइंडर) का उपयोग करेंगे और प्रवाह का पालन करने और अन्य एजेंटों (पाथफोलर) से बचने के लिए स्टीयरिंग का उपयोग करेंगे। जैसा कि मेरे उत्तर में कहा गया है, यह एक "गेम प्रोग्रामर" उत्तर है, न कि एक अकादमिक उत्तर।
४:०१

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

1
मुझे खेद है, लेकिन "पथ का अनुसरण" एक आविष्कृत शब्द नहीं है। पढ़ें उद्योग निर्मित दस्तावेज और आप इसे बार-बार उपयोग करते देखेंगे: लिंक या लिंक केवल कुछ लिंक करने के लिए। दुर्भाग्य से मैं आपको एनडीए संरक्षित इंजनों / उद्योग में व्यापक रूप से उपयोग किए जाने वाले दस्तावेज़ों से नहीं जोड़ सकता।
अपराह्न

1
आपका पहला लिंक वह लिंक है जो मैंने अपने उत्तर btw में दिया था। ठीक-ठीक उचित है, इस प्रकार के पथ का वर्णन करना उचित हो सकता है। अंततः वे दोनों का अनुसरण करने के लिए रास्ता खोजने की कोशिश कर रहे हैं, लेकिन मुझे लगता है कि इस मामले में मैं गलत हूं, और हमें आपके दूसरे लिंक में जो भी दिखाई दे रहा है, उसे हमें पथ के रूप में कॉल करना चाहिए। उदाहरण के लिए मोटे रास्ते / क्यूजर वक्र्स / इंसर्ट-योर-मेथड-यहाँ-के साथ मोटे पथ बिंदुओं को एक साथ जोड़ने का कार्य। उस ने कहा, मैं अभी भी दृढ़ता से असहमत हूं कि गतिशील बाधाओं के आसपास पथ खोजने को लागू करने के लिए संभव नहीं है, जैसा कि आपका उत्तर लगता है।
ओल्होव्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.