पाठकों को शुभकामनाएं, मैं आपको दूर के वर्षों 2003-2004 में एक साधारण 2 डी खिलौना के लिए एआई लिखने के अनुभव के बारे में बताना चाहता हूं। मैं तुरंत कहूंगा कि मैं अपने जीवन में निबंध लिखने में कभी सफल नहीं हुआ, लेकिन मैं कोशिश करूंगा।
सबसे अधिक संभावना है, गेम डेवलपर्स को यह पोस्ट नूबियन मिलेगा, लेकिन मुझे उम्मीद है कि बाकी दिलचस्प होगा, इसलिए चलो शुरुआत से शुरू करें।
खेल की दुनिया
खेल की दुनिया में एक ही आकार के "वर्ग" होते हैं, टेलीपोर्टर्स, जंपर्स और अन्य तत्व अचानक उपलब्ध होते हैं जो खिलाड़ी के स्थान को बदलते हैं।
हथियार, कारतूस, प्राथमिक चिकित्सा किट, कवच आदि के रूप में उपयोगी तत्व नक्शे पर बिखरे हुए हैं। खिलाड़ी अंतरिक्ष में लंबी कूद खेल सकता है जो उसे खेल की दुनिया में पर्याप्त रूप से घूमने की अनुमति देता है।

भविष्य के बॉट का कार्य खिलाड़ी को सुरुचिपूर्ण ढंग से आगे बढ़ने के लिए स्वतंत्र रूप से किसी भी नए नक्शे पर नेविगेट करना है, और यदि संभव हो तो, यथासंभव विरोधियों को मारना।
प्राथमिकता प्रणाली
एआई बॉट का सार प्राथमिकताओं की प्रणाली पर आधारित है। मानचित्र पर प्रत्येक महत्वपूर्ण बिंदु जिस पर आप खड़े हो सकते हैं, सरणी में दर्ज किया जाता है और प्रत्येक तत्व के लिए वर्तमान स्थिति के आधार पर वजन की गणना की जाती है।
महत्वपूर्ण बिंदुओं में प्राथमिक चिकित्सा किट, कवच, हथियार और दुश्मनों के स्थान शामिल हैं, अगर वे वर्तमान में जमीन पर हैं। प्राथमिक चिकित्सा किट के साथ स्थिति का वजन स्वास्थ्य के स्तर की मात्रा के विपरीत आनुपातिक है और बिंदु पर पहुंचने के लिए आवश्यक समय और प्राथमिक चिकित्सा किट के लिए चयनित एक निश्चित सशर्त वजन के लिए सीधे आनुपातिक है।
यदि स्वास्थ्य का स्तर पूरा हो गया है, तो यह पूरी तरह से स्पष्ट है कि इस बिंदु का वजन शून्य पर रीसेट है। स्थिति अन्य महत्वपूर्ण बिंदुओं के साथ समान है। यदि उनके पास कम स्वास्थ्य या कोई हथियार नहीं है, तो शत्रु की स्थिति अधिक प्राथमिकता है। यदि यह अनुपस्थित है और मौजूद है तो हथियार की स्थिति वजन को बढ़ा देती है। लक्ष्य का संशोधन हर कुछ सेकंड में एक बार होता है, या वर्तमान लक्ष्य की स्थिति तक पहुंचने पर।
ऐसा लगता है कि सब कुछ बताया गया था, लेकिन एक और बिंदु है जिसके बिना वर्णित एआई काम नहीं कर सका - एक महत्वपूर्ण बिंदु तक पहुंचने के लिए समय की गणना।
सबसे छोटा रास्ता
एआई प्रणाली के लिए खेल की प्रक्रिया को धीमा नहीं करने के लिए, नक्शे की शुरुआत में, आंदोलनों की गणना की जाती है। उसी समय, प्रत्येक बिंदु जिस पर आप खड़े हो सकते हैं, एक क्रम संख्या निर्दिष्ट की जाती है, अंकों के बीच की दूरी खिलाड़ी के एक चरण के बराबर होती है। खेल की शुरुआत से पहले, आंदोलनों की एक पूरी गणना की गई थी। बॉट को क्रमिक रूप से इनमें से प्रत्येक बिंदु पर रखा गया था और खुद के लिए संभव कार्य किए थे: बाईं ओर एक कदम, दाईं ओर एक कदम, बाईं ओर एक कमजोर कूद, बाईं ओर एक मजबूत कूद आदि।
कार्रवाई पूरी होने के बाद, खेल प्रक्रिया तब तक जारी रही जब तक कि बॉट आराम नहीं आया, जिसके बाद परिणाम "[प्रारंभ बिंदु] [क्रिया] = {स्पर्श बिंदु, यात्रा समय}" के दो-आयामी सरणी में सहेजा गया था। इस तंत्र ने बॉट को टेलीपोर्टर्स, जंपर्स और गेम की दुनिया के किसी भी अन्य तत्वों का उपयोग करने की अनुमति दी, जैसा कि बॉट बस जानता था कि अगर बिंदु X पर है और बाईं ओर कदम रखते हैं, तो हम N सेकंड के बाद बिंदु Y पर दिखाई देते हैं।
पूरी दुनिया के लिए यह सरणी होने के नाते, "[प्रारंभ बिंदु] [खत्म बिंदु] = {न्यूनतम यात्रा समय}" के आंदोलनों का एक सरणी बनाया गया था। इसके लिए, काफी सामान्य तरंग एल्गोरिदम का उपयोग किया गया था:

केवल अधिक कार्यों के साथ:

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