طريقة أفضل لتنفيذ التكرار "MiniMax" [مغلق]
-
21-12-2019 - |
سؤال
أنا أستخدم خوارزمية 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 (أو، بشكل عام، خوارزمية متكررة) تمامًا ويمكن أن تكون هناك طرق أخرى للعثور على الحل الأمثل باستخدام تقنيات أخرى، ولكن بدون مجموعة محددة من القواعد، من المستحيل معرفة ذلك.