我正在查看 Minimax 算法的伪代码:
Function Minimax-Decision(state) returns an action
;inputs: state (current game state)
;'E' means element of, 'a' is the action
return a E Actions(state) maximizing Min-Value(Result(a, state))
Function Max-Value(state) returns a utility value
if Terminal-Test(state) then return Utility(state)
v <-- -infinity
for a, s in Successors(state) do v <-- Max(v, Min-Value(s))
return v
Function Min-Value(state) returns a utility value
if Terminal-Test(state) then return Utility(state)
v <-- infinity
for a, s in Successors(state) do v <-- Min(v, Max-Values(s))
return v
我认为我知道Minimax算法是如何工作的。你从底部开始填充“分数”值,从效用分数开始向上填充。Max节点处的值为其子节点中的最大值,Min节点处��值为其子节点中的最小值。Max预测Min将始终尝试将Max置于下一轮中最糟糕的位置,并利用这一知识,Max尽可能地做出最佳移动。
因此,对于顺序为Max、Min、Max(来自顶部的图片):
1)Max希望为自己找到最佳着法(最大效用),因此C1=5,C2=11,C3=8等;
2)Max预测Min会想把Max置于可能的最糟糕的位置(限制Max为最小效用),因此B1=5,B2=2,B3=3;
3)Max希望做出最佳的可能移动,因此A=B1=5。
关于伪代码让我感到困惑的是双重递归以及变量v的目的。有谁能为我解析一下吗?
感谢大家阅读!