कैसे एक बाधा पर pathfind करने के लिए?


10

निम्न स्थिति का सबसे अच्छा प्रतिनिधित्व कैसे करें - एजेंट ( @) को लक्ष्य तक पहुंचने की आवश्यकता है ( $)। रास्ता एक खंदक ( ~~~) द्वारा अवरुद्ध है । एक रेक (या कुछ अन्य उपकरण, जैसे वॉटरवॉकिंग बूट) उपलब्ध है जो बाधा को पार करना संभव बना देगा।

.....~~~...   . ground
...=.~~~...   = rake
.....~~~.$.   ~ water
.@...~~~...   @ agent
.....~~~...   $ goal

कैसे ठीक से से pathfind करने @के लिए $प्रदान की कोई तत्काल उपलब्ध मार्ग है? क्या मेरे मार्ग में लागत ही नहीं बल्कि आवश्यक शर्तें भी होनी चाहिए?

UPD : समस्या यह है कि लक्ष्य सुलभ नहीं है और मानचित्र पर रेक कई संभावित वस्तुओं में से एक है। प्रश्न तो यह है कि "एजेंट कैसे समझें कि उसे रेक की जरूरत है?"


मुझे लगता है कि आपको अपने उपयोग के मामले को स्पष्ट करना चाहिए क्योंकि यह इस समस्या को हल करने के दृष्टिकोण को प्रभावित करेगा। उदाहरण के लिए, यदि उपयोग का मामला दुश्मनों के लिए पथों की गणना करना है तो आपको पहले यह देखना चाहिए कि क्या लक्ष्य वर्तमान में पहुंच सकता है, यदि दुश्मनों को रेक नहीं मिला है (यानी रेक आईएस लक्ष्य है) और फिर पहले के लिए पाथफिश करें। लक्ष्य फिर से।
झॉकिंग

जवाबों:


6

मैं लक्ष्यों के ढेर के बारे में सोच रहा हूं, पाथफाइंडिंग को एनोटेट करना होगा :

  • एक लक्ष्य के साथ शुरू करो get $
  • पाथ टू पाथ $- पाथ मौजूद है जिसमें वाटरवॉकिंग क्षमता आवश्यक है।
  • ध्येय लक्ष्य get waterwalking
  • लक्ष्य स्टैक अब है get waterwalking, get $
  • किसी तरह पता चलता है कि रेक वाटरवॉकिंग देता है, चलो इसे नाव में बदल देते हैं।
  • रेक का मार्ग। शीर्ष लक्ष्य पहुंच गया, इसे स्टैक से पॉप करें, लक्ष्य है get $
  • पथ $- अब हमारे पास क्षमता है और लक्ष्य तक पहुंच सकते हैं।

1
+1 मैंने अपने गेम के साथ कुछ ऐसा ही किया, और यूनिट टास्क और पाथफाइंडिंग के तहत थोड़ी देर पहले इसके बारे में थोड़ा पोस्ट लिखा ।
MichaelHouse

@ byte66 विशेष मामले को संभालता नहीं है जब रेक का उपयोग किए बिना एक पथ होता है लेकिन, छोटे मार्ग में रेक के परिणाम का उपयोग करता है
Ali1S232

@ गजेट आप सही कह रहे हैं। अनुमान है कि इसके लिए एक अलग दृष्टिकोण की आवश्यकता होगी।
zzandy

1
यह सिर्फ अतिरिक्त लागत जोड़ने की बात है। जब आप पानी का सामना करते हैं, तो पानी चलने वाली वस्तु को रास्ते में लाने की लागत जोड़ें। A * सबसे सस्ता रास्ता बनने तक पानी-चलना छोड़ देगा।
MichaelHouse

3

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


+1 पानी के लिए एक-तरफ़ा लिंक के साथ-साथ अपने रैक को पानी के लिए एक तरफ़ा लिंक बनाएं।
लॉरेंट कौविदौ

मुझे स्पष्ट समझ नहीं है कि ज्यामितीय खोज और सुविधा खोज को एक साथ कैसे बांधें। से कैसे जाना no path from @ to $है goto rake, bring it to water, place it, goto $
zzandy

पथ खोज करते समय @zzandy, यदि संभव हो तो प्रत्येक टाइल के लिए आप निकटतम टाइल पर जाएं। आपको बस एक शर्त जोड़ने की ज़रूरत है कि यदि वर्तमान नोड एक रेक है, तो आप सीधे सूची में नदी के दूसरी तरफ से नोड जोड़ सकते हैं।
अली

लेकिन क्या होगा अगर आप डिवाइस ले जा सकते हैं? मैंने सोचा कि उसका क्या मतलब है (और इसलिए मेरा जवाब है।)
काओड

हां, मेरा मतलब है कि डिवाइस की देखभाल (और अवश्य) की जानी चाहिए। @kaoD, आपके उत्तर में उस चरण को शामिल नहीं किया जाता है जब एक एजेंट को यह विचार मिलता है कि उसे रेक की आवश्यकता है।
zzandy

2

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

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

Z = 0 पर आप सामान्य परिस्थितियों में इलाके का नक्शा बनाते हैं, जिसका अर्थ है कि पानी की टाइलें अगम्य मानी जाती हैं।

Z = 1 पर आप भूभाग का नक्शा बनाते हैं क्योंकि यह रेक होने के दौरान है, जिसका अर्थ है कि पानी की टाइल को चलने योग्य माना जाता है (लेकिन यदि आपके पास उदाहरण के लिए दीवार टाइलें हैं, तो वे ठोस रह सकते हैं)।

पथ खोज एक्स और वाई आयामों में एक साधारण ए * है, जिसका अर्थ है कि प्रत्येक ग्रिड सेल को अपने पड़ोसियों तक पहुंच माना जाता है। हालांकि z आयाम में, A * को फैलने की अनुमति नहीं है।

सिवाय रेक कहाँ है। रेक ऑब्जेक्ट पाथ फाइंडिंग ग्रिड में z = 0 और z = 1 के बीच एक उद्घाटन के रूप में कार्य करता है।

इसका मतलब यह है कि A * z = 0 में बाढ़ का पानी भर देगा, पानी से टकराएगा, और विकल्पों से बाहर चला जाएगा - फिर यह रेक टाइल के माध्यम से z = 1 तक फैल जाएगा, और z = 1 पर (जहां पानी चलने योग्य है) लक्ष्य के लिए अपना रास्ता खोजें। इसका प्रभाव यह है कि NPC व्हिटआउट झिझक को रेक पर ले जाता है, और फिर लक्ष्य के लिए सबसे छोटा रास्ता बनाता है।


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