我已经阅读了很多关于minimax算法的文档及其在井字游戏中的实现,但我真的很难应用它。 以下是我已阅读1,2,3,4,5以及使用java 6 <的示例的链接/ p>
考虑伪代码: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.最小极大与板上被占用单元之间的关系是什么
4.什么是子节点如何从中提取值?
5.我如何确定最大允许深度?
答案 0 :(得分:0)
±∞
是包含已播放单元格信息的网格
int.maxValue
只是一个占位符,您可以使用0
或任何其他&#34;大&#34; /&#34;小&#34;编程语言的价值。稍后将其用作与节点的计算值的比较,+∞
可能已经是有效值。 (如果我们将bestValue
分配给min(bestValue, val)
,我们需要max(bestValue, val)
和-∞
<img src="image1" width="145" height="126" alt="Planets" usemap="#imagemap">
<map name="imagemap">
<area shape="rect" coords="0,0,145,126" href="image2.htm">
</map>
。
不确定你的意思。
子节点是可以进行的移动。一旦无法移动,就会对评估板进行评估并返回分数。
TicTacToe中的搜索空间非常小,在其他游戏中会返回启发式分数,具体取决于情况是否对玩家有利。在您的场景中,应该没有硬度。
答案 1 :(得分:0)
首先,停止在一个问题中提出100个问题。问一个,试着理解并弄清楚你是否真的需要问别人。
现在回答你的问题:
我将传递给签名节点,它是有效的移动 现在的球员?
不,您只会传递node
,depth
,maximizingPlayer
(播放 - 最小或最大)。在这里for each child of the node
,您可以找到该节点的可能移动。在实际场景中,您很可能会有一个像getChildren
这样的生成器,您可以使用它生成您的孩子
什么是+和 - 无穷大,它们的可能值是什么?
minimax算法只是尝试递归地查找所有最小值的最大值。最大玩家可以获得的最差结果是什么 - -infinity
。最小值越小,最大值将达到+infinity
。所以这些只是起步价值。
minimax与被占用细胞之间的关系是什么? 板。
不确定你在这里是什么意思。 Minimax是算法,被占用的单元是被占用的单元。这个问题类似于动态编程和csv文件之间的关系。
什么是子节点如何从中提取值?
如何确定允许的最大深度?
在标准的极小极大情况下,直到你到达树的尽头。在树的末尾,您的评估功能将为您提供奖励。因为树大部分时间都太大而无法适应任何人使用截止值并使用近似评估函数(启发式)。最简单的方法是n
向前移动并希望你的评估功能足够好,你的对手认为n-1
向前移动。