2

やあ!私はチェスエンジンを作成しています。反復的な深化を実装したいので、主なバリエーション (エンジンが最適と考える一連の動き) を見つける必要があります。しかし、Python の Web で疑似コードの例を見つけられませんでした。また、alphabeta 関数は再帰的であるため、理解するのに本当に苦労しています。

どうすればこれを行うことができるか、ヒントまたは疑似コードの例を教えてください。どうもありがとうございました。

これは、移動自体ではなく、移動の評価を返すだけのアルファ ベータ関数です。

def alphaBeta(self, board, rules, alpha, beta, ply, player):
    """ Implements a minimax algorithm with alpha-beta pruning. """
    if not ply:
        return self.positionEvaluation(board, rules, player)

    move_list = board.generateMoves(rules, player)

    if not len(move_list):
        return self.mateCheck(rules, board, player, ply)

    for move in move_list:
        board.makeMove(move, player)
        current_eval = -self.alphaBeta(board, rules, -beta, -alpha, ply - 1, board.getOtherPlayer(player))
        board.unmakeMove(move, player)

        if current_eval >= beta:
            return beta

        elif current_eval > alpha:
            alpha = current_eval

    return alpha
4

1 に答える 1

-1

NegaMax検索を使用します。次に例を示します。

 function negamax(node, depth, α, β, color)
    if node is a terminal node or depth = 0
        return color * the heuristic value of node
    else
        foreach child of node
            val := -negamax(child, depth-1, -β, -α, -color)
            {the following if statement constitutes alpha-beta pruning}
            if val≥β
                return val
            if val≥α
                α:=val
        return α

呼び出されるときは、引数αとβを任意のノードで可能な最小値と最大値に設定し、色を1に設定する必要があります。

(* Initial call *)
negamax(origin, depth, -inf, +inf, 1)

あなたはいつでもnegamaxでアルファベータ法を行うことができます

PS:私はすでにオンラインチェスプラットフォームを実装しています。参照が必要な場合:チェスハントを確認してください

クライアント側のコードはいつでも見ることができますが、実際の移動とチェスのゲームロジックはサーバー側に実装されています。

于 2012-10-07T09:03:14.867 に答える