我正在学习极小极大,并且想知道我对minimax的逻辑是正确的(粗糙伪代码)。:
fun minimax(tree, depth) { #assume the tree has already been built;
if terminal node; # if we reach a node with no children, return the score;
return score;
else;
if max's turn then return min(minimax(tree,depth-1))
if min's turn then return max(minimax(tree,depth-1))
}
我假设游戏树已经构建,只是想确认这个高级伪代码是正确的逻辑。
答案 0 :(得分:2)
minimax(position,depth)
....
if max's turn then return min(minimax(p,depth-1) for p in moves)
if min's turn then return max(minimax(p,depth-1) for p in moves)
或
minimax(tree,depth)
....
if max's turn then return min(minimax(node,depth-1) for node in nodes(tree))
if min's turn then return max(minimax(node,depth-1) for node in nodes(tree))
您需要使用当前树的节点(子树)树来调用minimax
。
答案 1 :(得分:0)
您必须递归调用您的函数,以便从该状态开始每次可能的移动,并根据当前一层中的玩家选择具有最大/最小分数的移动。一般来说,到目前为止我所见到的最佳伪代码实现的伪代码是在人工智能:一种现代方法中。 Peter Norvig的书。书中的所有伪代码都在它的github页面上,这里是极小极大代码 -
function MINIMAX-DECISION(state) returns an action
return arg max a ∈ ACTIONS(s) MIN-VALUE(RESULT(state, a))
function MAX-VALUE(state) returns a utility value
if TERMINAL-TEST(state) the return UTILITY(state)
v ← −∞
for each a in ACTIONS(state) do
v ← MAX(v, MIN-VALUE(RESULT(state, a)))
return v
function MIN-VALUE(state) returns a utility value
if TERMINAL-TEST(state) the return UTILITY(state)
v ← ∞
for each a in ACTIONS(state) do
v ← MIN(v, MAX-VALUE(RESULT(state, a)))
return v
深度限制实施需要注意的几点: