我已经阅读了很多关于minimax算法的文档,以及它在tic tac toe游戏中的实现,但是我真的很难应用它。这里是我读过的1、2、3、4、5和一个使用Java6的示例的链接
考虑伪代码:7
function minimax(node, depth, maximizingPlayer)
if depth = 0 or node is a terminal node
return the heuristic value of node
if (maximizingPlayer is TRUE) {
bestValue = +∞
for each child of the node {
val = minimax(child, depth-1, FALSE)
bestValue = max(bestValue, val)
}
return bestValue
} else if maximizingPlayer is FALSE {
bestValue = -∞
for each child of the node {
val = minimax(child, depth-1, TRUE)
bestValue = min(bestValue, val)
}
return bestValue
}
以下是我的问题:
1。我将传递什么到签名节点,它是当前玩家的有效移动吗
2。什么是和无限,它们的可能值是什么
3。minimax和电路板上占用的单元之间的关系是什么
4。什么是子节点?如何从中提取值
5。如何确定最大允许深度
>
Node
是包含已播放单元格信息的网格
±∞
只是一个占位符,您可以使用编程语言中的int.maxValue
或任何其他“大”/“小”值。它稍后用作与节点计算值的比较,0
可能已经是有效值。(如果我们分配∞
到bestValue
,我们希望min(bestValue,val)
和max(bestValue,val)
用于-∞代码>。
不知道你是什么意思。
子节点是可以进行的可能移动。一旦没有移动,董事会将被评估并返回分数。
Tictatcoe中的搜索空间非常小,在其他游戏中会返回一个启发式分数,这取决于情况是否对玩家有利。在您的场景中,应该没有硬深度。
首先,不要在一个问题中问100个问题。问一个问题,试着理解并弄清楚你是否真的需要问另一个问题。
现在你们的问题是:
我将传递什么到签名节点,它是当前玩家的有效移动吗?
不,您将只通过节点
,深度
,最大化玩家
(谁玩-最小或最大)。这里为节点的每个子节点
查找可能从该节点移动的位置。在真实场景中,您很可能会有一个类似于
getChildren
的生成器,您可以使用它来获取您的孩子
什么是和无限,它们的可能值是什么?
极小极大算法只是试图递归地在所有最小值上找到最大值。最大玩家可能得到的最坏结果是什么--无限
。对于最小值来说,最坏的情况是当最大值达到无穷大时。所以这些只是开始值。
minimax和电路板上占用的单元之间的关系是什么。
不知道你在这里是什么意思。Minimax是算法,被占用的单元就是被占用的单元。这个问题类似于动态编程和csv文件之间的关系。
什么是子节点如何从中提取值?
如何确定最大允许深度?
在标准极大极小值中,直到你到达树的末端。在树的末尾,您的评估函数将给您一个奖励。因为树在大多数情况下太大,无法适应任何地方,所以人们使用截断并使用近似评估函数(启发式)。最简单的方法是看n
向前移动,希望你的评估功能足够好,而你的对手认为n-1
向前移动。