質問

ゲームに 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