使用alpha-beta剪枝的Negamax在深度0处的错误

我在编写一个使用alpha-beta剪枝的Negamax算法。然而,只有在删除了”BAD”这一行代码后它才能正常工作,但我不知道为什么。我的代码是基于这个伪代码编写的。它正确吗?大多数实现会在一个循环中调用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;

回答:

问题出在:

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

为了解决这个问题(并保持随机性),我只需要打乱”movs”的顺序。我知道对”movs”进行排序会更有效率。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注