c++ - TicTacToe 的 MinMax 简单演示

标签 c++ minimax game-theory alpha-beta-pruning

我一直在绞尽脑汁想弄清楚 MinMax 算法是如何工作的,希望 alpha-beta 剪枝算法是如何工作的。我对发生的递归感到困惑。

  • 首先,是否对每个中间板进行评分?或仅终端游戏板。
  • 其次,返回的到底是什么?程序如何知道下一步应该放在哪里?我看到我应该返回棋盘分数(在 tictactoe 中,-1,0,1)但是程序如何知道下一步应该下哪一步。

我曾尝试寻找一个简单的 C 或 C++ 程序来演示这一点,但运气不佳。我正在努力学习这个算法,我可以为我的计算机编程类(class)的其余部分创建一个演示文稿。

非常感谢! V

最佳答案

仅对终端位置(静止搜索后)进行评分。非终端位置将递归 minimax() 调用返回的分数与迄今为止返回的最佳分数进行比较。在 alpha-beta 的情况下,返回的分数也与 alpha 值进行比较。

minimax 的要点是产生一个分数。您的错误似乎是认为 minimax 搜索函数需要返回最佳着法。它可以这样编码,但在另一个执行移动的函数中使用顶级循环,使用 minimax() 产生分数并取消执行移动可能更简单。跟踪得分最高的移动,并在循环完成或选择移动的时间用完时返回该移动。

关于c++ - TicTacToe 的 MinMax 简单演示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674672/

相关文章:

algorithm - 选择最佳矩阵

c++ - 如何检测循环调用?

c++ - 使用在 ios 上运行的 qt 应用程序构建 boost

c++ - 了解 Negamax 的约束

javascript - 带 Minimax 和 Javascript 的井字游戏

artificial-intelligence - "Monte-Carlo Tree Search"可以像 Stratego 一样应用于 "two player game with imperfect information"吗?

combinatorics - 游戏拼图 : Blindfolded coin flipping with adversary

java - MultiPlayer - 服务器通信,传输什么

c++ - 宏不执行功能

c++ - Juce c++ - 鼠标事件不起作用