में बड़े निर्णय पेड़ आधारित एआई के लिए डिज़ाइन पैटर्न मैं वर्तमान में सी ++ में लिखे गए गेम के लिए एआई लिख रहा हूं। एआई अवधारणात्मक रूप से काफी सरल है, यह सिर्फ एक निर्णय पेड़ के माध्यम से चलता है और उपयुक्त कार्यों को चुनता है। मैं पहले निर्णय इंजन के लिए प्रोलॉग का उपयोग कर रहा था लेकिन सी ++ का उपयोग करने वाले अन्य डेवलपर्स और प्रोलॉग कोड को एकीकृत करने के साथ कुछ मुद्दों के कारण अब मैं इसे सी ++ पर बंद करने की कोशिश कर रहा हूं।सी ++
वर्तमान में मेरे पास प्रोलॉग (100+) में तथ्यों और नियमों का एक समूह है। फॉर्म में कई व्यक्त चीजें, यदि game_state फिर कार्रवाई xyz करते हैं। अधिकांश नियम काफी जटिल हैं, जिनमें से कुछ जटिल हैं। मैंने एक सीमित राज्य मशीन दृष्टिकोण देखा, लेकिन यह बड़ी परिस्थितियों में इतनी अच्छी तरह से स्केल नहीं लग रहा था। सी ++ में इसे कोड करने का मेरा पहला प्रयास तब और अगर केस स्टेटमेंट्स का एक बड़ा दुःस्वप्न था।
if(this->current_game_state->some_condition == true){
if(this->current_game_state->some_other_condition == false){
//some code
}else{
return do_default_action();
}
}else if(this->current_game->another_condition){
//more code
}
जटिलता जल्दी से अनियंत्रित हो गया: मैं हर जगह ऊपर पॉपिंग कोड की इस तरह की थी।
यदि सी ++ में इस प्रकार की समस्या को कोड करने का कोई अच्छा तरीका है? क्या इस तरह की स्थिति से निपटने के लिए कोई अच्छा डिजाइन पैटर्न है? स्रोत के भीतर तर्क को निहित करने की कोई आवश्यकता नहीं है, इसे केवल सी ++ से सुलभ होने की आवश्यकता है। केवल वास्तविक आवश्यकता यह है कि यह काफी तेज़ है।
मैंने नियम इंजनों को भी देखा और यदि पर्याप्त तेज़ हो तो वे उचित हो सकते थे। क्या आपको पता है कि ओपन सोर्स सी ++ नियम इंजन है जो उपयुक्त होगा?
यह एक सीमित राज्य मशीन है, जो ठीक है उसने कहा कि उसने पहले कोशिश की और उसके चेहरे पर उड़ा दिया। – Potatoswatter
यह इतना नहीं था कि एक सीमित राज्य मशीन जो मैं चाहता था वह नहीं था, यह अधिक था कि एक सीमित राज्य मशीन के निष्पक्ष कार्यान्वयन को प्रबंधित करने के लिए बहुत जटिल था। यह सुझाव जटिलता को बेहतर तरीके से प्रबंधित करने में मदद करता है। दुभाषिया का उपयोग सिर्फ वही होना चाहिए जो मुझे चाहिए यदि मैं इस दृष्टिकोण का पालन करना चाहता हूं। हालांकि मैं अभी भी एक सीमित राज्य मशीन दृष्टिकोण – shuttle87
का उपयोग करने पर पूरी तरह से बेचा नहीं गया हूं पहला खंड एक राज्य मशीन है, लेकिन मेरा मुद्दा यह था कि आप इसे नेस्टेड के गुच्छा के बजाय टेबल संचालित एल्गोरिदम के रूप में कार्यान्वित कर सकते हैं, एल्स या एक बड़ा बुरा स्विच स्टेटमेंट। दूसरा खंड केवल सी ++ वाक्यविन्यास का उपयोग कर डीएसएल दिखाने की कोशिश कर रहा है। यह एक साधारण राज्य मशीन से अधिक हो सकता है। आपने प्रोलॉग काम कर लिया है, इसलिए इसे सी ++ में अनुवाद करने की कोशिश करने के बजाय, मुझे लगता है कि सी ++ को सिखाए जाने के लिए यह सरल और साफ हो सकता है कि आपके मौजूदा कोड/डेटा को कैसे समझें। हो सकता है कि आप अपने नियमों/तथ्यों का सबसेट पोस्ट कर सकें ताकि हम इसे बेहतर उपचार दे सकें और उचित उदाहरण दे सकें। – xscott