प्रसंग
पुराने लुकास आर्ट्स (स्कममम युग) बिंदु और क्लिक करें ग्राफिक एडवेंचर गेम जिसमें प्रीकम्प्यूटेड पाथफाइंडिंग का उपयोग किया गया था। यहाँ तकनीक की एक मोटी रूपरेखा है।
चरण 1
प्रत्येक कमरे में फर्श को "वॉक बॉक्स" कहा जाता था, जो कि एक नेविगेशन जाल में नोड्स के बराबर थे, लेकिन ट्रेपेज़ॉइड आकार तक सीमित थे। उदाहरण के लिए:
______ _____ _________ _____
\ A | B | C | D \
\_____| | |_______\
|_____| |
|_________|
चरण 2
एक ऑफ़लाइन एल्गोरिथ्म (जैसे दिज्क्स्त्र या ए *) प्रत्येक और प्रत्येक जोड़ी नोड्स के बीच सबसे छोटे पथ की गणना करेगा, और एक 2 डी मैट्रिक्स में पथ के पहले चरण को संग्रहीत करेगा , जिसका उपयोग शुरू और समाप्ति नोड द्वारा प्रत्येक आयाम में अनुक्रमित किया जाएगा। जैसे ऊपर दिए गए वॉक बॉक्स का उपयोग करना:
___ ___ ___ ___
| A | B | C | D | <- Start Node
___|___|___|___|___|
| A | A | A | B | C | ---
|___|___|___|___|___| |
| B | B | B | B | C | |
|___|___|___|___|___| |-- Next node in shortest path
| C | B | C | C | C | | from Start to End
|___|___|___|___|___| |
| D | B | C | D | D | ---
|___|___|___|___|___|
^
|
End Node
जैसा कि आप अनुमान लगा सकते हैं, नोड्स की संख्या में वृद्धि (एन ^ 2) के रूप में मेमोरी आवश्यकताओं में तेजी से वृद्धि होती है। चूंकि एक छोटा आमतौर पर मैट्रिक्स में प्रत्येक प्रविष्टि को स्टोर करने के लिए पर्याप्त बड़ा होगा, जिसमें 300 नोड्स का एक जटिल नक्शा होगा, जिसके परिणामस्वरूप एक अतिरिक्त मानक होगा:
300^2 * sizeof(short) = 176 kilobytes
चरण 3
दूसरी ओर, दो नोड्स के बीच सबसे छोटे पथ की गणना अत्यंत तेज और तुच्छ थी, बस मैट्रिक्स में लुकअप की एक श्रृंखला। कुछ इस तरह:
// Find shortest path from Start to End
Path = {Start}
Current = Start
WHILE Current != End
Current = LookUp[Current, End]
Path.Add(Current)
ENDWHILE
C से A रिटर्न के लिए सबसे छोटा रास्ता खोजने के लिए इस सरल एल्गोरिथ्म को लागू करना:
1) Path = { C }, Current = C
2) Path = { C, B }, Current = B
3) Path = { C, B, A }, Current = A, Exit
सवाल
मुझे संदेह है कि आज के शक्तिशाली हार्डवेयर के साथ, हर स्तर के लिए ऐसा करने की स्मृति आवश्यकताओं के साथ युग्मित, इस तकनीक के किसी भी लाभ को एक बार रनवे पर केवल ए * प्रदर्शन करने से अब बाहर कर दिया गया है।
मैंने यह भी सुना है कि आजकल मेमोरी लुकअप भी सामान्य गणना की तुलना में धीमा हो सकता है, यही कारण है कि साइन और कोसाइन लुक टेबल बनाना उतना लोकप्रिय नहीं है।
लेकिन मुझे स्वीकार करना चाहिए कि मैं अभी भी निम्न-स्तरीय हार्डवेयर दक्षता के इन मामलों के बारे में जानकार नहीं हूं, इसलिए मैं इस विषय पर अधिक परिचित लोगों की राय पूछने का मौका ले रहा हूं।
अपने इंजन पर मुझे रनटाइम के समय ग्राफ में नोड्स को गतिशील रूप से जोड़ने और हटाने की क्षमता की आवश्यकता थी ( यह देखें ) इसलिए पूर्वनिर्मित मार्ग ने चीजों को और अधिक जटिल बना दिया, इसलिए मैंने इसे समाप्त कर दिया (मेरे रनटाइम का उल्लेख नहीं करने के लिए * * समाधान पहले से ही पूरी तरह से चल रहा था। )। फिर भी, मैं हैरान रह गया ...
निचला रेखा, क्या यह तकनीक किसी भी परिदृश्य में आजकल भी प्रासंगिक है?