我一直在绞尽脑汁想弄清楚 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/