【发布时间】:2017-10-12 17:55:11
【问题描述】:
因此,我目前正在处理一项围绕 MiniMax 算法展开的任务,该游戏是 Mancala 和 NIM 的组合。程序的工作方式是向用户询问棋盘的当前状态,并且假设程序会吐出用户赢得比赛应该采取的第一步。我只是很困惑,我是否想用所有可能的解决方案生成整个游戏树,并且叶节点首先具有效用函数,然后让 MiniMax 算法递归地运行它,还是在 MiniMax 算法中创建树?如果这个问题非常不清楚,我很抱歉,但我只是坚持这个想法,我似乎无法理解。
【问题讨论】:
-
在实践中:这棵树是即时生成的。有一个重要的原因:您不会使用纯粹的 min-max,而是使用一些 alpha-beta 之类的修剪,因此可能不会搜索整个树(重要:良好的移动排序)。第二个原因:你将无法在大多数游戏中搜索所有状态(无限深度);所以迭代加深用于将搜索限制在某个固定的深度/层(当时间离开时增加)
-
游戏树不是显式生成的,只是对其进行遍历。在 minimax 执行期间,您永远不会在内存中拥有整个树。正如 sascha 所提到的,事情是即时完成的,因为在任何节点(任何板配置)上,您都可以轻松地生成其后继状态。这里的关键方面是,当您在棋盘配置上应用移动(从而获得另一个棋盘配置)时,您实际上是在这个概念游戏树中移动。