- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试为奥赛罗制作一个好的 AI,并且已经使用 Minimax 算法完成了。然而,当我尝试使用 alpha-beta 修剪进行更深入的搜索时,该算法似乎运行得很糟糕。我用 Wiki 和 Berkely.edu 等其他来源进行了检查,我认为我已经正确实现了它,但我仍然找不到问题。
def alphabeta(board, player, a, b, lev):
h = heur(board, player)
if lev == 0:
return h, None
poss = get_legal_moves(board, player)
if len(poss) == 0:
return h, None
move = 0
for x in poss:
cpboard = board[:]
cpboard[x] = player
bracket(cpboard, player, x)
a1, q = alphabeta(cpboard, opponent_color(player), a, b, lev-1)
if player is me:
if a1 > a:
a, move = a1, x
else:
if a1 < b:
b, move = a1, x
if b <= a:
break
if player is me:
return a, move
else:
return b, move
最佳答案
您的 alpha-beta 代码可能是错误的。请注意当玩家“通过转弯”(即没有可用的 Action )时会发生什么,因此我的代码中有一个棘手的错误。
您调用递归时是否调换了 alpha 和 beta 值?我的工作方式如下(Java 代码):
private float minimax(OthelloBoard board, OthelloMove best, float alpha, float beta, int depth)
{
float bestResult = -Float.MAX_VALUE;
OthelloMove garbage = new OthelloMove();
int state = board.getState();
int currentPlayer = board.getCurrentPlayer();
if (state == OthelloBoard.STATE_DRAW)
return 0.0f;
if ((state == OthelloBoard.STATE_BLACK_WINS) && (currentPlayer == OthelloBoard.BLACK))
return INFINITY;
if ((state == OthelloBoard.STATE_WHITE_WINS) && (currentPlayer == OthelloBoard.WHITE))
return INFINITY;
if ((state == OthelloBoard.STATE_BLACK_WINS) && (currentPlayer == OthelloBoard.WHITE))
return -INFINITY;
if ((state == OthelloBoard.STATE_WHITE_WINS) && (currentPlayer == OthelloBoard.BLACK))
return -INFINITY;
if (depth == maxDepth)
return OthelloHeuristics.eval(currentPlayer, board);
ArrayList<OthelloMove> moves = board.getAllMoves(currentPlayer);
for (OthelloMove mv : moves)
{
board.makeMove(mv);
alpha = - minimax(board, garbage, -beta, -alpha, depth + 1);
board.undoMove(mv);
if (beta <= alpha)
return alpha;
if (alpha > bestResult)
{
best.setFlipSquares(mv.getFlipSquares());
best.setIdx(mv.getIdx());
best.setPlayer(mv.getPlayer());
bestResult = alpha;
}
}
return bestResult;
}
调用如下:
OthelloMove bestFound = new OthelloMove();
int maxDepth = 8;
minimax(board, bestFound, -Float.MAX_VALUE, Float.MAX_VALUE, maxDepth);
//Wait for Thread to finish
board.makeMove(bestFound);
编辑:如果玩家没有可用的移动,getAllMoves() 返回一个“虚拟移动”,即根本不改变棋盘,只是通过转弯。
希望对您有所帮助!
关于python - Othello Alpha-Beta Pruning 玩得很厉害 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826230/
我的情况是这样的......在同一个仓库工作的人已经从他的本地和远程仓库中删除了一个分支...... 大多数在 Stack Overflow 或其他网站上询问过此类问题的人都有分支问题仍然显示在他们的
我昨天运行命令 docker system prune,花了一些时间,然后我的 SSH session 因其他原因断开。 不幸的是我现在得到了: 来自守护程序的错误响应:修剪操作已在运行。 显然有一个
在阅读一本名为 Java Performance 的书时,我遇到了这个术语。你可以在这里找到它free sample pages第 6 页“少写代码” 最佳答案 根据 dictionary.com ,
有谁知道如何实现称为 PRUNING 的图像处理技术?任何想法,例子等?我正在使用 OpenCV 和 C#,如果有人可以提供帮助,我将不胜感激。 最佳答案 我假设您希望从图像中移除不需要的杂散和伪影。
我正在使用 git version 2.14.2.windows.2 并调用 git worktree add 在“正常”存储库上创建工作树。这在 创建了一个新的工作树结构对于分支并添加了 .g
我有一堆被删除的远程分支,现在我想删除本地的分支。我试过: git fetch -p 但它不起作用。 如果我这样做: git branch -r 和 git 分支 列表不一样,因为 git branc
来自手册页: Deletes all stale tracking branches under . These stale branches have already been removed fr
题目地址:https://leetcode.com/problems/binary-tree-pruning/description/ 题目描述 Weare given the head node
我需要在第一个目录中编辑提示文件,而不是在子目录中递归。 find(\&read_cue, $dir_source); sub read_cue { /\.cue$/ or return;
当我使用docker-compose build命令构建docker镜像时,我看到了一件意外的事情。 当Dockerfile仅具有一个RUN命令时 那么图像尺寸会减小。 当我们将其拆分为每个单独的RU
运行docker system prune -a之前,我的空白空间为900 MB,运行它可以为我提供 65 GB可用空间,尽管该命令报告说它仅清除了14.5 GB的 我在这里遗漏了什么报告是错误的吗?
我正在范 Derby 尔特大学独立学习 CS251。这项工作是为字符数组编写一个外观包装器并使其可调整大小。但是,有一个方法 prune() ,我不明白它应该做什么。你们能解释一下这个方法的含义吗?因
我有一个数据框,如下所示: data = [['1','tom',1,0],['1','tom',0,1],['2','lynda',0,1],['2','lynda',0,1]] df = pd.D
在我看来,我对 RX 函数有很好的“感觉”——我使用了其中的许多函数,或者可以想象其他函数如何有用——但我找不到 .Prune 函数的位置。我知道这是对 AsyncSubject 的多播,但这在实际场
谁能解释一下这两个陈述: 在成本复杂度剪枝中,剪枝后的树误差永远不会小于训练数据集上的原始树。 在成本复杂度剪枝中,剪枝后的树误差永远不会小于验证数据集上的原始树。 第一个说法正确,第二个说法错误。
根据 GNU find 的联机帮助页,默认使用 -print 操作, Actions which inhibit the default -print are -delete, -exec, -exe
我有一些 git 存储库,我想计算它们包含多少个 .txt、目录和其他文件。问题是每个存储库内都有一个 .git 目录,其中包含更多文件和配置。我不想计算我正在查找的文件夹,或 .git 目录或其包含
我想将 Eigen 用于稀疏矩阵乘法,在每次迭代中我想删除低于特定阈值的所有条目。在我看来,Eigen 只删除恰好等于零的元素。 我正在运行 Eigen 3.3.7,使用 g++ 进行编译。 #inc
我有一个字典和一个要从字典中删除的键列表。这是我现在的实现: var keys = (from entry in etimes where Convert.ToInt64(en
我正在寻找 git 版本 1.7.4 中不可用的命令,但我无法升级 git 客户端。 那么,有没有什么命令等同于 git push --prune 最佳答案 prune对于远程“删除 下的所有陈旧远
我是一名优秀的程序员,十分优秀!