5

मुझे एक ऐसा प्रोजेक्ट करना है जहां हमें मैनकाला बोर्ड गेम को लागू करने की आवश्यकता है, और उसके बाद एआई को भी लागू करें।कोई टर्म-आधारित गेम से निपटने के लिए मेरे मिनीमैक्स सर्च पेड़ को कैसे अनुकूलित करें?

हमें निर्देश दिया गया है कि हमें मैनकाला के साथ काम करने में सक्षम होने के लिए एक मिनीमैक्स पेड़ को संशोधित या बदलने की आवश्यकता है क्योंकि खिलाड़ी के लिए एक पंक्ति में कई मोड़ होना संभव है।

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

अब मैं सामान्य मिनीमैक्स पेड़ को समझता हूं और प्रत्येक स्तर न्यूनतम नोड और अधिकतम नोड के बीच कैसे बदलता है। जिस पेड़ की मुझे अभी आवश्यकता है, क्या मैं कहूंगा: min > max > max > min > max यदि दूसरे खिलाड़ी को दो मोड़ मिलते हैं?

हमें मिनीमैक्स पेड़ की दी गई प्ली-गहराई को निर्दिष्ट करने में भी सक्षम होना चाहिए। हमें अल्फा बीटा काटने की भी आवश्यकता है, लेकिन बाद में, जब मैं वास्तव में एक पेड़ लेता हूं।

उत्तर

0

यदि किसी पक्ष में एक मोड़ में कई चाल हो सकती हैं तो इसका पता लगाने के लिए कुछ तरीका होना चाहिए। जब पता चला कि प्रतिद्वंद्वी के लिए चाल जनरेटर एक सूची उत्पन्न करता है जिसमें केवल एक शून्य चाल होती है, यानी एक ऐसा कदम जो कुछ भी नहीं करता है। प्रतिद्वंद्वी को उस कदम को चलाने के लिए मजबूर किया जाएगा (कुछ भी नहीं) और पहला खिलाड़ी उसके अगले कदम की गणना कर सकता है।

+0

ठीक है, तो यह मिनी, अधिकतम, न्यूनतम, अधिकतम संरचना रखेगा, आप दोहराने वाले प्रत्येक अधिकतम के बीच एक बेकार मिनट रखेंगे? – Zapnologica

+0

हां, जब तक कि आपके पास कोई बेहतर विचार न हो। –

+1

यह संभावित प्ली गहराई को कैसे प्रभावित करेगा? – Zapnologica

3

जहां तक ​​मुझे समझा गया, आपकी मुख्य समस्या निम्न है: आपको दिखाया गया है कि किसी परिस्थिति में मिनीमैक्स का उपयोग कैसे करें जहां अधिकतम/मिनट चक्र में जाता है और अब आपके पास एक ऐसा गेम है जहां कभी-कभी एक खिलाड़ी कई चाल कर सकता है एक पंक्ति।

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

तो सामान्य दृष्टिकोण

स्टैंडर्ड अल्पमहिष्ठ इस प्रकार है:

function minimax(node, depth, maximizingPlayer) 
    if depth = 0 or node is a terminal node 
     return the heuristic value of node 
    if maximizingPlayer 
     bestValue := -∞ 
     for each child of node 
      val := minimax(child, depth - 1, FALSE) 
      bestValue := max(bestValue, val) 
     return bestValue 
    else 
     bestValue := +∞ 
     for each child of node 
      val := minimax(child, depth - 1, TRUE) 
      bestValue := min(bestValue, val) 
     return bestValue 

आप अधिकतम/मिनट के साथ अल्पमहिष्ठ कॉल कहाँ प्रारंभ और उसके बाद यह लगातार बदल जाता है। आपके मामले में आपको केवल एक छोटी सी जांच जोड़ने की आवश्यकता है।

function minimax(node, depth, maximizingPlayer) 
    if depth = 0 or node is a terminal node 
     return the heuristic value of node 
    if maximizingPlayer 
     bestValue := -∞ 
     for each child of node 
      # here is a small change 
      if freeTurn(child): 
       isMax := TRUE 
      else: 
       isMax := FALSE 
      val := minimax(child, depth - 1, isMax) 
      bestValue := max(bestValue, val) 
     return bestValue 
    else 
     bestValue := +∞ 
     for each child of node 
      # here is a small change 
      if freeTurn(child): 
       isMax := FALSE 
      else: 
       isMax := TRUE 
      val := minimax(child, depth - 1, isMax) 
      bestValue := min(bestValue, val) 
     return bestValue 

जहाँ आपके समारोह freeTurn रिटर्न आप कि क्या आप अपने वर्तमान स्थानांतरण के बाद एक मुक्त बारी है। ध्यान दें कि इस एल्गोरिदम के लिए कोई अंतर नहीं है कि आप पंक्ति में केवल 2 चाल या पंक्ति में 5 चाल कर सकते हैं।

Mancala के बारे में

mancala के कई रूपों हैं, लेकिन खेल की शाखाओं में कारक बहुत छोटा है (एक मुझे पता है कि < = 6 में)। अब मान लें कि आपके पास तीन चाल A, B, C, D और C स्थानांतरित करने के लिए आपको एक और बार खेलने की अनुमति मिलती है। C स्थिति से आप C1, C2 चला सकते हैं। तो आप उन्हें जोड़ सकते हैं (C + C1, C + C2) और उन्हें केवल एक कदम के रूप में व्यवहार करें (याद रखने के लिए छोटी बहीखाता यह जानी चाहिए कि यह वास्तव में दो चाल है)।तो अभी आप अपने न्यूनतम अधिकतम पुनरावृत्तियों के साथ समाप्त हो जाते हैं जहां आपके पास 4 नहीं बल्कि 5 चालें हैं: A, B, C + C1, C + C2, D। असल में बड़े ब्रांचिंग कारक वाले गेम के लिए इस दृष्टिकोण का उपयोग करने में कुछ भी गलत नहीं है।

संबंधित मुद्दे