बारी आधारित रणनीति गेम में न्यूनतम रूप से न्यूनतम / अधिकतम लागू करने के लिए, आपको सभी उपलब्ध शतरंज-तकनीकों को सही ढंग से लागू करने की आवश्यकता है ...
मूल्यांकन समारोह
यहां तक कि शतरंज के इंजनों में बहुत बुरी ताकत होती है, अगर आपके मूल्यांकन कार्य खराब हैं। एक मूल्यांकन समारोह का सबसे सरल संस्करण है: 1 = खेल सफेद द्वारा जीता, -1 = खेल काला द्वारा जीता, 0 = अन्य सभी मामले; लेकिन, इससे आपको बहुत खराब प्रदर्शन मिलेगा। आपकी बारी आधारित गेम के लिए भी ऐसा ही होता है! यदि आप शतरंज में मिनट / अधिकतम (अल्फा / बीटा प्रूनिंग और सामान के साथ) का उपयोग करना चाहते हैं, तो आपको एक उचित मूल्यांकन फ़ंक्शन भी लागू करना चाहिए! इसके अलावा, आप उन एल्गोरिदम के प्रदर्शन की तुलना तब नहीं कर सकते हैं जब आपके रणनीति गेम पर उस मामले में लागू किया जाता है, जो शतरंज पर लागू होता है।
शतरंज इंजनों के मूल्यांकन कार्य क्या हैं, जैसे सामान का मूल्यांकन कर रहे हैं:
- बोर्ड पर एक टुकड़े की स्थिति कितनी अच्छी है?
- एक टुकड़े पर कितनी बार हमला किया जाता है?
- टुकड़ा कितनी बार संरक्षित है?
- बोर्ड पर प्रत्येक टुकड़ा स्वतंत्र रूप से "चाल" कितना अच्छा हो सकता है? (या: कितने टाइल यह "नियंत्रण" करता है)
मूल्यांकन समारोह के उन हिस्सों को पहले आपके खेल के लिए "अनुवादित" होना चाहिए:
- टुकड़े की स्थिति: क्या यह एक पहाड़ी पर है, जो इसकी शूटिंग रेंज का विस्तार कर रहा है?
- हमला: प्रत्येक टुकड़ा खतरे में कितना है? (जैसे कि किसी विशेष इकाई पर हमला करने में सक्षम इकाइयों के हमले के मूल्यों का योग, इसके द्वारा हमला किए जाने की संभावना से कई गुना अधिक; संभावना बढ़ जाती है, यदि इकाई पहले से ही क्षतिग्रस्त हो जाती है, तो कई अन्य इकाइयां हमलावर इकाई की सीमा में घट जाती हैं)
- खुद का हमला: प्रत्येक इकाई द्वारा कितनी इकाइयों पर हमला किया जा सकता है?
- संरक्षण: इसके पास कितने टुकड़े हैं (मदद करने के लिए)? हो सकता है कि एक इकाई एक न्यूनतम दूरी के तहत इकाइयों पर हमला न करे और इसकी सुरक्षा के लिए इसे पास की इकाइयों पर हमला करने की संभावना रखने वाली इकाई द्वारा संरक्षित कर सकती है।
- गतिशीलता: आपकी इकाई कितनी मोबाइल है? (क्या यह भाग सकता है?)
सभी यूनिटों के लिए अलग-अलग रेटिंग को वेटिंग फंक्शन (factor_a * Rating_a + factor_b * ranting_b + ...) द्वारा संक्षेपित किया जाना चाहिए ...
रणनीति के खेल में भी संसाधनों (सोना, लकड़ी, ...) को ध्यान में रखा जाना चाहिए।
यदि आपका मूल्यांकन फ़ंक्शन पर्याप्त रूप से पर्याप्त है, तो आपको अधिकांश मामलों के लिए वास्तव में "गहरे" पेड़ में खोज करने की आवश्यकता नहीं है। तो आप शायद केवल 3 या 10 सबसे आशाजनक विकल्पों पर करीब से नज़र डालें। अगला अध्याय देखें ...
प्रत्येक स्थिति में संभव चालें
रणनीति के खेल के लिए न्यूनतम / अधिकतम का उपयोग करने के बारे में सबसे अधिक समस्या यह है कि आप एक बारी में कई इकाइयों को कमांड कर सकते हैं, जबकि शतरंज में आपको केवल एक इकाई को कमांड करने की अनुमति दी जाती है (कास्टलिंग के अलावा, लेकिन यह स्पष्ट रूप से परिभाषित चाल संयोजन है)। यह प्रत्येक "स्थिति" (शतरंज की अवधि) के लिए एन इकाइयों के लिए 5 ^ एन संभव चाल का कारण बनता है, यदि आप केवल प्रत्येक इकाई के लिए "उत्तर, दक्षिण, पश्चिम, पूर्व या बंद करो" के बीच तय करेंगे। आप इसे निम्न स्तर के कमांड में जटिल कमांड को तोड़कर हल कर सकते हैं: जैसे कि यूनिट ए के लिए कार्रवाई चुनें, गहराई में जाएं और यूनिट बी के लिए निर्णय लें .... यूनिट एन के लिए निर्णय लें ... और फिर इस मोड़ को समाप्त करें। लेकिन, यह अकेले जटिलता को नहीं बदलता है! आपको उस आदेश का अनुकूलन करना चाहिए जिसमें क्रियाएं इकाइयों (जैसे पहली इकाई बी, सी, डी और फिर इकाई ए) को सौंपी जाती हैं। आप अंतिम गणना के दौरान प्रत्येक इकाई के लिए निर्णय के प्रभाव को रिकॉर्ड कर सकते हैं और फिर महत्व के आधार पर छांट सकते हैं। इस तरह से अल्फा-बीटा प्रूनिंग का उपयोग खोज पेड़ से किसी भी खराब संयोजन को बहुत पहले से काटने के लिए किया जा सकता है। सर्वोच्च प्राथमिकता हमेशा प्रत्येक पुनरावृत्ति में "अधिक कुछ नहीं और अपनी बारी को समाप्त करें" (शून्य चाल छंटाई) होनी चाहिए। इस तरह से आप अधिकांश इकाइयों को अधिकांश कार्य सौंप सकते हैं और छोड़ सकते हैं और उन्हें वही जारी रख सकते हैं जो उन्होंने पहले किया था। इस तरह से खोज "महत्वपूर्ण" इकाइयों (उदाहरण के लिए वास्तव में अभी का मुकाबला करने वाले) पर एक नज़र डालकर जल्दी से गहराई में जाएगी। सुनिश्चित करें कि केवल प्रत्येक इकाई को एक बार कमांड करें ... आप यह सुनिश्चित करने के लिए कुछ यादृच्छिकता का भी उपयोग कर सकते हैं कि "महत्वपूर्ण" इकाइयों को समय-समय पर एक कमांड मिल रही है। विशेष रूप से, कुछ काम पूरा करने वाली इकाइयाँ (उदा
Iterative दीपनिंग + कैशिंग / हैश टेबल
फिर, आप कुछ समय सीमा तक पहुंचने पर अधिक से अधिक गहराई में जाने के लिए "इंटरप्टिव डीपिंग" कर सकते हैं। यदि आप कम इकाइयाँ हैं, तो आप गहराई से खोज करेंगे, और यदि आपके पास हमेशा बेहतर समाधान खोजने के लिए रुकें तो आपके पास कुछ "परिणाम" होंगे। खोज के पूर्व परिणामों को कैश करने के लिए Iterative deepening को हैश टेबल का उपयोग करना होगा। यह अंतिम परिणाम खोज से कुछ परिणामों का पुन: उपयोग करने में सक्षम बनाता है (खोज ट्री की शाखा जो उन कमांडों को कवर करती है जिन्हें वास्तव में अंतिम मोड़ में निष्पादित किया गया था)। इसे लागू करने के लिए, आपको एक बहुत अच्छे हैशिंग फ़ंक्शन ("ज़ॉब्रिस्ट की" पर एक नज़र डालनी होगी), जो कि इसे अद्यतन करने में सक्षम है। हैश कुंजी को अपडेट करने का मतलब है, कि आप पुरानी "स्थिति" की हैश कुंजी ले सकते हैं और स्थिति में परिवर्तन में किक कर सकते हैं (जैसे स्थिति x पर इकाई को हटा दें और इसे स्थिति y पर रख दें)। इस तरह से हैश कुंजी की गणना करना त्वरित है और आपको इसकी गणना करने के लिए पूरे बोर्ड की स्थिति को संसाधित करने की आवश्यकता नहीं है, बस यह जांचने के लिए कि क्या हैश में इस स्थिति के लिए पूर्व प्रविष्टि है। एक तरह से आपको यह सुनिश्चित करना चाहिए कि कोई हैश टकराव न हो।
गैर-निर्धारक व्यवहार
गैर-निर्धारक व्यवहार न्यूनतम / अधिकतम खोजों के लिए एक समस्या है। इसका मतलब है, यह सुनिश्चित नहीं है कि आप एक लक्षित लक्ष्य (जैसे संभावना 10% है) मारा जाएगा। तब आप ऐसा नहीं कर सकते। उस स्थिति में आपको एल्गोरिथ्म को संशोधित करने और बीच में "संभावना" परत लगाने की आवश्यकता है। यह थोड़ा सा है "इसकी संभावनाएं बदल जाती हैं"। प्रत्येक स्वतंत्र परिणाम का संबंध अलग-अलग होना चाहिए। इस गहराई "परत" के माध्यम से मूल्यांकन तो नमूना होना चाहिए (मोंटे कार्लो नमूना) और गहराई के मूल्यांकन के परिणाम को संभावना की संभावना से भारित किया जाना चाहिए। संभाव्यता परत के विभिन्न परिणामों को अलग-अलग उत्पीड़क चाल की तरह माना जाना चाहिए (लेकिन मिनट / अधिकतम के बजाय "औसत" की गणना की जानी चाहिए)। यह निश्चित रूप से खोज पेड़ की जटिलता को बढ़ाएगा।
सारांश
एक नियतात्मक खेल के लिए उन सभी तकनीकों (जो वर्तमान शतरंज इंजनों द्वारा उपयोग किए जाते हैं) को लागू करते समय, आप निश्चित रूप से एक गेम के लिए उचित परिणाम प्राप्त करने में सक्षम होंगे। गैर-नियतात्मक खेलों के लिए, यह शायद अधिक जटिल होगा, लेकिन मुझे लगता है कि अभी भी प्रबंधनीय है।
उन तकनीकों की व्याख्या के लिए एक अच्छा संसाधन है (शतरंज के लिए) http://chessprogramming.wikispaces.com/
तुम भी मिनट / अधिकतम खोजों में निर्देशित यादृच्छिकता के कुछ प्रकार को लागू कर सकते हैं। प्रत्येक पुनरावृत्ति में सबसे पहले सबसे अच्छे परिणामों का निर्धारण करने के बजाय, आप बस इसे यादृच्छिक कर सकते हैं और इसके आदेश को संभाव्यता वितरण द्वारा तय किया जा सकता है जो वर्तमान मूल्यांकन पर आधारित है ...