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,

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top