- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TLDR:我有一个用于 negamax 实现的非对称评估函数 - 这可以接受吗?还是我需要使其对称?
更长:我正在编写一个游戏 AI(用于类似国际象棋的棋盘游戏“Hive”),它使用带有 alpha-beta 修剪和不对称评估函数的极小极大。
但我在正确添加转置表时遇到了问题,并且对我的 minimax 实现失去了信心,所以我决定使用此处的伪代码切换到 negamax:https://en.wikipedia.org/wiki/Negamax#Negamax_with_alpha_beta_pruning_and_transposition_tables
我的一切都“正常”并且 AFAIK 准确地遵循了伪代码,但我的 AI 现在做出了一些与以前截然不同的 Action ,通常在 10-15 回合后结束的游戏现在需要 30+,而且我'我不相信人工智能实际上比以前玩得更好。我担心具有不对称评估函数意味着我对节点的评分与以前不同(因为 negamax 触发器)。
我不想更改为对称函数,除非我真的必须 - 我一直在尝试通过实验产生最佳函数(AI vs AI 战斗)并且已经投入了数百甚至数千个计算小时来生产强大的评价功能。
最佳答案
Negamax 支持不对称评估函数,但它不会导致最佳游戏(假设您不了解对手)。
我对 Hive 了解不够,但在计算机象棋中,一般来说,具有不对称评估函数是一个错误。其背后的原因对于象棋和Hive来说应该是一样的。
例如,采取起始位置(在国际象棋中)。白方下一个棋子,让我们假设您的评估函数给出的位置得分为 +0.08。
现在改变位置,黑色先走。一切都一样,只是白色和黑色的角色发生了变化。假设+0.08是白棋的最佳得分,为什么黑棋不也被评价为+0.08呢?
同样的论点适用于任何职位。如果你把所有东西都颠倒过来,就没有充分的理由以不同的方式玩这个位置。
这条规则只有一个异常(exception)。如果一个对手明显比另一个对手强,则有理由进行不对称评估。例如,采取这样一个完全绘制的位置:
FEN:4k3/8/8/p1p1p1p1/PpPpPpPp/1P1P1P1P/8/4K3 b - - 0 1
这个位置可以安全地评估为 0。现在想象起始位置,但白色开始时没有一个马。这应该是黑色的强大优势。
让我们假设您是 Magnus Carlsen,您正在与一个甚至不知道国际象棋规则的对手对弈。你更喜欢哪个职位?在这里,我认为不对称评估可能是有意义的(例如,评估类似于损失的可能平局)。卡尔森应该避免绘制位置,而初学者应该喜欢它。
新手与世界冠军抗衡的机会几乎为零,即使赔率为一马。另一方面,在平局中,技能优势无关紧要,因为没有顺序可以导致输赢。
在计算机国际象棋中,Rebel 在与人类对弈时具有偏好战术位置的功能(参见 ANTI GRANDMASTER PLAY )。还有一个常见的概念是“蔑视”,这是引擎给 remis 的分数。
但请注意,在我的两个示例中,这都不是最佳玩法。马格努斯·卡尔森在面对强大(或未知)的对手时,不会选择没有马的位置。此外,Rebel 不会对其他机器使用反人类策略,这些机器在战术战斗中也很出色。 (尽管根据位置,Rebel 10 did use ANTI GRANDMASTER PLAY against computers 。)
关于chess - negamax 可以使用非对称评估函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813955/
我试图写一个国际象棋游戏,发现找不到解决僵局的解决方案。我正在尝试使用google,但找不到任何东西。有众所周知的算法吗? 最佳答案 您的移动生成器将是两种不同的设计之一; 要么在生成 Action
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
这是一个关于如何使用魔术位板验证国际象棋中滑动棋子移动的全局问题。只是为了澄清,我不是在问魔术位板在内部是如何工作的。 现在,关于这个问题的更多细节。我正在使用位板编写国际象棋棋盘表示,并且我想使用魔
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我一直在为即将到来的编程比赛进行练习,我偶然发现了一个我完全困惑的问题。然而,我觉得这是一个我现在应该学习的概念,而不是祈祷它永远不会出现。 基本上,它处理的是棋盘上的骑士棋子。您将获得两个输入:起始
您将使用什么数据结构来表示计算机国际象棋程序的棋盘? 最佳答案 对于一个严肃的国际象棋引擎,使用位板是在内存中表示国际象棋棋盘的有效方法。位板比任何基于数组的表示更快,特别是在 64 位架构中,其中位
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 3年前关闭。 Improve this
我正在使用 Java 编写国际象棋引擎。 我试图找到一个字节中第一个 1 位的索引和最后一个 1 位的索引。 我目前在 Java 中使用 Long.numberOfTrailingZeros()(或类
TLDR:我有一个用于 negamax 实现的非对称评估函数 - 这可以接受吗?还是我需要使其对称? 更长:我正在编写一个游戏 AI(用于类似国际象棋的棋盘游戏“Hive”),它使用带有 alpha-
我正在用 Java 制作国际象棋,现在,每当用户单击移动棋子时,我都会遇到更新棋盘的问题。我的游戏逻辑还远远没有完成,我只是想让 GUI 和 mouseListener 首先按照我希望的方式工作。我设
我正在尝试在 Ubuntu 16 上安装 python-chess。通过 pip3 安装它,但在导入国际象棋时出现错误。 ujesh@suyodhana:~$ pip3 install python-
char chess = _board[0]; for (char i = 1; i < 9; ++i) { chess &= _board[i]; //?
我有一个 FEN位置,我想分析哪个位置更强。 例如,我有这个职位 rnbq1bnr/pp2k2N/8/2p1p2Q/4N3/8/PPPP1PPP/R1B1KB1R b KQ - 0 1 如何使用 St
我目前正在尝试构建一个简单的棋子移动程序。我从文本文件中读取了国际象棋移动符号。国际象棋符号是这样的: plb1 c3 = (p)pawn(l)white 从位置 b1(b1) 移动到位置 c3(c3
我正在尝试从 chess.com 读出我的一些统计数据。我很难用 python 登录。 我正在尝试按照教程 here 进行操作 我从登录页面中识别出以下标签。 _username 作为用户名,_pas
我正在寻找一种工具,它允许我使用使用任务并行库构造编写的程序对所有可能的交错(拼写?)执行单元测试。或者,我如何使用 dotNET 4.0 运行 CHESS? 最佳答案 有一个商业可用的工具,Jinx
我有一个类,它使用字符串字典。一种方法是初始化字典,另一种方法是向字典添加新的对,第三种方法是将字典连接成字符串。 我想通过在不同线程中同时运行 init-adding-adding-*-adding
我目前正在创建一个 python 脚本,它使用 python-chess 和 chess.uci 打开国际象棋引擎 Stockfish。但是,当我尝试打开 Stockfish 引擎时,我得到了 Per
我最近才开始使用单元测试,我知道单元测试没有涵盖的一些主要问题是并发性和复杂的跨对象交互(无论如何,大多数现代完全 OOP 语言都完全消除了这些问题。)据我所知,CHESS 解决了某种程度上的并发问题
是否可以将来自 JavaScript 代码的信号链接/连接/发送到 Solidity/Ethereum? 最佳答案 您可以使用 web3 . 与合约交互有不同的语法。取决于契约(Contract)是否
我是一名优秀的程序员,十分优秀!