【问题标题】:Understanding minimax with alpha beta pruning用 alpha beta 剪枝理解极小极大
【发布时间】:2017-09-06 23:06:07
【问题描述】:

抱歉,图片来自我的笔记。

最后一天我一直在阅读极小极大树和 alpha 数据修剪,并为我的项目做一些准备。这是 C 中奥赛罗的一个实现。

我已经阅读了大量关于它的资源,并且我知道它被问了很多。 在我开始我的评估功能之前,我想完全理解这一点。

在附图中,我无法弄清楚函数 Min_Node(pos)Max_Node(pos) 究竟会做什么,任何输入将不胜感激。

如果有人在实现此功能和我对奥赛罗的评估功能时应该注意任何提示或事项,我愿意提供我能找到的任何帮助。

【问题讨论】:

    标签: optimization minimax alpha-beta-pruning othello


    【解决方案1】:

    minimax 算法,也被描述为here,需要在博弈树中给定当前位置的情况下找到最优值的移动。该位置由棋盘配置和当前玩家组成(对于某些游戏,可以仅根据棋盘配置决定)。通常移动的值是递归定义的;对于处于 eding 位置的棋盘(它是游戏树的叶子),如果玩家一赢了,则值为 1,如果玩家二赢,则值为 -1,对于平局游戏,值为 0。移动的值是通过执行该移动并递归评估该值来确定的。然后,选择最大(对于玩家一)或最小(对于玩家二)的移动;在递归评估中,该值是当前位置的子树根的所有叶子的最大值(或最小值)。这显然是原始问题中提到的功能应该是什么。

    Alpha-beta-pruning,如here 所述,是这种方法的改进。由于已知最佳值(它们是1-1),一旦找到具有所需值的移动,就可以停止评估。

    这种方法独立于实际游戏。不过,我建议第一步,将更简单的游戏(例如Tic-Tac-Toe)用作可能更容易调试的玩具示例。

    【讨论】:

    • 我知道 minimax 和 alphadata 是如何工作的。我只是无法解释给我实现的伪代码。
    【解决方案2】:

    我设法弄清楚最大和最小节点是什么,在这种情况下,Max_Node(pos) 检查这是否是玩家,它返回 true 因为这应该被最大化,Min_Node(pos) 检查它是否是对手,如果为真,则应将其最小化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多