سؤال

أنا أستخدم خوارزمية MinMax في إحدى الألعاب، ونظرًا لوجود الكثير من الاحتمالات، فإن التكرار MinMax يستغرق وقتًا طويلاً، حتى مع "تقليم ألفا بيتا"

يبدو الكود الخاص بي كما يلي:

min(state,depth,alpha,beta):
    if stopingCond: 
        return value

    for moves in allmoves:
        state.do(move)
        beta = min(beta, max(state,depth,alpha,beta) )
        if alpha >= beta: return beta
    return beta

max(state,depth,alpha,beta):
    if stopingCond: 
        return value

    for moves in allmoves:
        state.do(move)
        alpha = max(beta, min(state,depth,alpha,beta) )
        if alpha >= beta: return alpha
    return beta

وأنا أعلم أنه في بعض الأحيان يمكنك استخدامها for الحلقات بدلاً من العودة لكنني لم أتمكن من إيجاد طريقة لتحويلها.

إذا كان لدى أي شخص فكرة جيدة سأكون سعيدًا لسماعها!

شكرًا،

هل كانت مفيدة؟

المحلول

بشكل عام، لا يمكن استبدال العودية في minmax بخوارزمية تكرارية مكافئة، ولهذا السبب توجد طرق تحسين، مثل تقليم بيتا، التي تحاول تحسين الأداء عن طريق إيقاف بعض فروع شجرة العودية في أسرع وقت ممكن.

من الممكن أنه بالنسبة للعبتك، لا تكون هناك حاجة إلى minmax (أو، بشكل عام، خوارزمية متكررة) تمامًا ويمكن أن تكون هناك طرق أخرى للعثور على الحل الأمثل باستخدام تقنيات أخرى، ولكن بدون مجموعة محددة من القواعد، من المستحيل معرفة ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top