【问题标题】:Negamax with alpha-beta pruning bug on depth 0Negamax 在深度 0 上具有 alpha-beta 修剪错误
【发布时间】:2014-12-02 23:22:00
【问题描述】:

我正在编写一个带有 alpha-beta 修剪的 negamax。但是,它仅在删除“坏”行时才有效,但我不知道为什么。我的代码基于此pseudo-code。这是正确的吗?大多数实现在循环内(在根节点的单独函数上)调用 negamax,我应该这样做吗?为什么?

private static double AlphaBetaWithMemory(Board board, int player,
        int depth,
        int max_depth, double alpha, double beta) {


    double eval = Double.NEGATIVE_INFINITY;
    List<Integer> moves;
    if (depth == max_depth
            || board.gameOver()) {
        double h = board.heuristic(player);
        return h;
    } else {
        movs=board.getMoves();
        for (Integer m : moves) {
            if (depth == 1) {
                double val = -AlphaBetaWithMemory(
                        board.move(m), (player + 1) % 2,
                        depth + 1,
                        max_depth, -beta, -alpha);
                if (val > eval) {
                    best_mov = m;
                    eval = val;
                } else if (val == eval) {
                    if (Math.random() > 0.5) {
                        best_mov = m;
                    }
                }
                alpha = Math.max(alpha, val); //"BAD" LINE
            } else {
                double val = -AlphaBetaWithMemory(
                        board.mover(m), (player + 1) % 2,
                        depth + 1,
                        max_depth, -beta, -alpha);
                eval = Math.max(eval, val);
                alpha = Math.max(alpha, val);
                if (alpha >= beta) {
                    return beta;
                }
            }
        }
   }
   return eval;

【问题讨论】:

  • 保持“坏线”会怎样?在第一次调用AlphaBetaWithMemory 时,其中一个参数是board.move(m),在第二次调用中是board.mover(m)。这只是一个错字吗?

标签: algorithm artificial-intelligence chess minimax


【解决方案1】:

问题是:

else if (val == eval) {
      if (Math.random() > 0.5) {
            best_mov = m;
      }
}

为了解决这个问题(并保持随机性),我只需要随机播放“movs”。我知道排序“movs”会更有效率。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2015-10-15
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多