Un modo migliore per implementare una ricorsione " MiniMax "[chiuso]
-
21-12-2019 - |
Domanda
Sto usando l'algoritmo MinMax per un gioco, e poiché ci sono molte possibilità, la ricorsione MinMax richiede troppo tempo, anche con la "potatura alfa-beta"
Il mio codice sembra un po come questo:
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
So che a volte puoi usare for
loop invece di ricorsione
ma non sono riuscito a trovare un modo per convertirlo.
Se qualcuno ha una buona idea sarei felice di sentirlo!
Grazie,
Soluzione
Generalmente la ricorsione in minmax non può essere sostituita da un algoritmo iterativo equivalente, ed è per questo che esistono metodi di ottimizzazione, come la potatura beta, che cercano di migliorare le prestazioni bloccando alcuni rami dell'albero di ricorsione il prima possibile.
E ' possibile che per il vostro gioco, minmax (o, in generale, un algoritmo ricorsivo) non è necessario del tutto e ci potrebbero essere altri modi per trovare la soluzione ottimale utilizzando altre tecniche, ma senza un insieme preciso di regole è impossibile dire.