यह देखने के लिए एल्गोरिथ्म कि क्या दो स्वर परस्पर जुड़े हुए हैं


11

मैं निम्नलिखित समस्या के लिए एक अच्छे एल्गोरिदम की तलाश कर रहा हूं: voxels (जो या तो खाली या भरा हो सकता है) के 3 डी ग्रिड को देखते हुए, यदि मैं दो गैर-आसन्न स्वर उठाता हूं, तो मैं जानना चाहता हूं कि क्या वे एक दूसरे से जुड़े हुए हैं अन्य स्वर।

उदाहरण के लिए (2 डी में स्थिति को स्पष्ट करने के लिए), जहां # एक भरा हुआ वर्ग है:

  1 2 3
a # # #
b # #
c # # #

अगर मैं a3 और c3 चुनता हूं, तो मैं उन्हें जितनी जल्दी हो सके उतना निर्धारित करना चाहता हूं; अगर भरे हुए पिक्सेल के माध्यम से a3 और c3 के बीच एक रास्ता है। (वास्तविक स्थिति एक 3 डी voxel ग्रिड में है, निश्चित रूप से।)

मैंने बाढ़ के एल्गोरिदम और पथ खोजने वाले एल्गोरिदम को देखा है, लेकिन मुझे यकीन नहीं है कि किसे चुनना है। दोनों गैर-जरूरी काम करते हैं: बाढ़ भरण सभी स्वरों को भरने की कोशिश करता है, लेकिन इसकी जरूरत नहीं है। पथ-खोज एल्गोरिदम आमतौर पर सबसे छोटा रास्ता खोजने से चिंतित हैं, जो आवश्यक नहीं है। मैं तभी पता करने की जरूरत है एक रास्ता।

मुझे किस एल्गोरिथ्म का उपयोग करना चाहिए?

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


आपके उदाहरण में a3 से c3 तक का मान्य पथ निम्नलिखित होगा c3->c2->b2->a2->a3:?

यह सही है
ब्रैम वेसेन

जवाबों:


12

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

A * के साथ आमतौर पर पहला रास्ता आपको सबसे छोटा लगता है, इसलिए पहले से ही एक रास्ता मिल जाने के बाद यह अतिरिक्त काम नहीं कर रहा है।

यहाँ छवि विवरण दर्ज करें

कुछ अनुकूलन के लिए, यहाँ मेरे उत्तर की जाँच करें


ऐसा लगता है कि यह वास्तव में तब तक आगे बढ़ता है जब तक कि यह उस दीवार से
टकराता नहीं है,

1
@ GameDev-er हाँ, यह अनुमान के कारण है। यदि कोई बाधा नहीं थी, तो यह बहुत तेज खोज होगी, लगभग सीधी रेखा।
MichaelHouse

नोड्स के बेहतर छंटाई के साथ, यह पहले अंतिम नोड के निकटतम पथ का विस्तार करेगा। यदि आपके पास नोड्स को ऑर्डर करने के लिए एक तेज़ डेटा संरचना है, तो उन्हें सबसे प्रत्यक्ष पथ के लिए लक्ष्य से दूरी पर क्रमबद्ध करें।
MichaelHouse

9

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

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

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


1
यह सही उत्तर है, लेकिन इसे कुशलता से लागू करने के लिए, इसे एक सूची के रूप में संग्रहीत नहीं किया जाना चाहिए। प्रत्येक voxel को एक पॉइंटर जोड़ें जो उसके "प्रतिनिधि voxel" की ओर इशारा करता है, जिसे आप संघ-खोज एल्गोरिथ्म का उपयोग करके सेट करते हैं। यह लगातार प्रति स्वर लागत संग्रहण है, और कम्प्यूटेशनल लागत के लिए किनारों की संख्या में मूल रूप से रैखिक है।
नील जी

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

1
दूसरी समस्या यह है कि एक स्वर को हटाने के बाद एल्गोरिथ्म की आवश्यकता होती है, यह निर्धारित करने के लिए कि क्या वह समूह उस स्वर के निष्कासन के कारण छोटे समूहों में टूट गया था।
ब्रैम वेसेन

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

इसे साफ रखने के लिए, मैंने अपनी प्रारंभिक समस्या एक अलग प्रश्न में यहाँ पूछी
Bram Vaessen

4

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

आपके पास एक वैकल्पिक हेयुरिस्टिक का उपयोग करके कुछ किस्मत हो सकती है जो कम नोड्स का विस्तार करती है जैसे कि

f (p) = g (p) + w (p) * h (p)

जहाँ w> = 1. आप लक्ष्य के करीब पहुंचने के लिए 'w' के मूल्य को कम करते हैं, जिससे पथ लागत 'g' को उच्च प्राथमिकता मिलती है और आप जिस स्वर की तलाश कर रहे हैं उसके करीब पहुँच जाते हैं।

आशा है कि ये आपकी मदद करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.