algorithm - 黑白棋评价函数

标签 algorithm alpha-beta-pruning minmax reversi othello

我目前正在使用 minimax 和 alpha-beta 修剪为 Othello 开发一个简单的 AI。

我的问题与董事会状态的评估功能有关。

我目前正在通过查看以下内容来评估它:

  1. 光盘计数(奇偶校验)

  2. 合法步数

  3. 特定职位的重要性

所以假设根节点是初始游戏状态。第一个 Action 是AI的 Action ,第二个 Action 是对手的 Action 。

                   0    
                  / \           AI's Action
                 1   1
                / \   \         Opponent's action
               2   2   2

在节点级别 1,我是否评估我的 AI 筹码的圆盘数以及它在完成一个 Action 后的时间点可以进行的合法移动次数?

在节点level 2,我是否评估对手筹码的盘数以及在对手完成一个 Action 后的时间点它可以走的合法步数?

意思是 AI 着法 -> 对手着法 ==> 此时我评估对手的棋子数和对手可以做出的合法棋子数。

最佳答案

生成游戏树时,您不应评估节点除非它是叶节点。也就是说,您生成一棵树直到第 N 级(对应于棋盘在棋盘当前状态之前进行了 N 次移动),除非您已到达对应于游戏结束的节点情况。 只有在这些节点中,您才应该使用评估函数评估棋盘游戏的状态这就是 minimax 算法的意义所在。我知道的唯一一个你在每次玩家移动后评估节点的情况是在 iterative deepening 中。您似乎没有使用的算法。

评估函数负责快速评估特定位置的“分数”——换句话说,哪一方获胜以及获胜多少。它也被称为静态评估函数,因为它只查看特定的电路板配置。所以是的,当你达到 N 级时,你可以计算计算机和用户可能的移动并将它们减去。例如,如果结果为正,则表示计算机具有优势,如果为 0,则表示平局,如果为负,则表示用户在移动性方面处于劣势。对表示游戏板配置结束的节点进行评分是微不足道的,如果您赢了,则分配最大值,如果您输了,则分配最小值。

移动性是大多数棋盘游戏(其中有值(value)的)评估功能中要考虑的最重要特征之一。为了评估它,您计算每个玩家在给定静态棋盘配置的情况下可能采取的行动,无论接下来轮到谁。即使一名玩家最近采取了行动,当同一名球员做出最后一步行动时(因此,在相同的条件下对他们进行评分),您也会在树的同一级别 N 中给棋盘打分,并选择那些有最佳得分。

您在评价中考虑的功能非常好。通常,您想在非常有值(value)的游戏中考虑 Material 和机动性(尽管如此,我不知道 Material 是否始终是 Othello 的优势,您应该更了解它,因为它是您的游戏正在努力)以获得胜利,所以我猜你走在正确的道路上。

编辑:小心!在叶节点中,您唯一要做的就是为电路板配置分配特定分数。它在其父节点中返回该分数并与其他分数(对应于其他子节点)进行比较。为了选择对特定玩家可用的最佳移动,请执行以下操作:如果父节点对应于对手的移动,则选择具有最小(min)值的移动。如果轮到计算机走棋,则选择具有最高(max)value 的分数,以便它代表该玩家可能的最佳走棋。

关于algorithm - 黑白棋评价函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334216/

相关文章:

algorithm - 具有交叉依赖性的最大流量减少

c++ - 如何记录结构中的前 5 个值

algorithm - 计算字符串和一组字符串之间的最小汉明距离

artificial-intelligence - 在国际象棋的 Alpha-Beta 搜索中实现 killer 启发式

c++ - 使用 Alpha Beta 剪枝提高此 MiniMax 的性能

algorithm - 难以弄清楚这些棘手的 Big-O 示例

Java Minimax Alpha-Beta 修剪递归返回

algorithm - Alpha Beta 剪枝,alpha 等于或大于 beta。为什么等于?

python - 最小-最大 python v3 实现

artificial-intelligence - 如何为 TIC-TAC-TOE 变体游戏创建评估函数