【问题标题】:Heuristic function in an Alpha-Beta Pruning algorithm for a Othello/Reversi game黑白棋/黑白棋游戏的 Alpha-Beta 修剪算法中的启发式函数
【发布时间】:2012-12-09 20:15:47
【问题描述】:

我正在实施一种 Alpha-Beta 修剪算法,该算法将用于在黑白棋游戏中获得最佳移动。当算法到达叶节点(即没有有效的移动或达到最大深度)时,我基于此计算该节点的启发式值:

最大化玩家(运行算法的玩家)有多少积木 会使用算法返回的移动)在这个节点的棋盘上吗? (每块砖+1)

最大化玩家在这个节点有多少有效动作? (每步+10)

最大化玩家有多少个角落砖? (每个角砖+100)

问题是:如果不是最大化玩家在叶子节点上交,我该怎么办?然后不可能计算他的有效动作,因为轮不到他。我可能误解了整个 alpha-beta 修剪算法,或者至少误解了启发式函数应该如何工作。有人可以给我一个提示吗?

谢谢

【问题讨论】:

  • 关于这个算法有很多关于 SO 的问题。参见例如this one,其中有很多解释和更多信息的链接。

标签: algorithm artificial-intelligence alpha-beta-pruning


【解决方案1】:

无论您是使用算法的传统 minimax 公式,还是 negamax 公式,您都应该从要移动的一侧来评估棋盘。

然后,两种算法对值的处理方式不同; minimax 只是有单独的代码片段,无论是轮到 MAX 还是 MIN 玩家,而 negamax 分配“val = - negamax(child)”。

ChessProgrammingWiki 有很好的解释和伪代码:MinimaxNegamax

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多