Frage

Ich verwende den MinMax-Algorithmus für ein Spiel, und da es viele Möglichkeiten gibt, dauert die MinMax-Rekursion viel zu lange, selbst mit „Alpha-Beta-Bereinigung“.

Mein Code sieht ungefähr so ​​aus:

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

Ich weiß, dass man es manchmal gebrauchen kann for Loops statt Rekursion, aber ich konnte keinen Weg finden, es umzuwandeln.

Wenn jemand eine gute Idee hat, würde ich mich freuen, sie zu hören!

Danke,

War es hilfreich?

Lösung

Im Allgemeinen kann die Rekursion in Minmax nicht durch einen gleichwertigen iterativen Algorithmus ersetzt werden. Deshalb gibt es Optimierungsmethoden wie Beta Pruning, die versuchen, die Leistung zu verbessern, indem sie einige Zweige des Rekursionsbaums so schnell wie möglich stoppen.

Es ist möglich, dass für Ihr Spiel Minmax (oder allgemein ein rekursiver Algorithmus) überhaupt nicht benötigt wird und es andere Möglichkeiten gibt, mit anderen Techniken die optimale Lösung zu finden, aber ohne einen genauen Satz von Regeln ist das unmöglich zu sagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top