Я смотрю на этот псевдокод для алгоритма 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
Кажется, я знаю, как работает алгоритм Минимакс. Вы заполняете значения «оценки» снизу вверх, начиная с оценки полезности. У Макса узлы самые большие из его дочерних узлов, у Мин будут самые маленькие. Макс предсказывает, что Мин всегда будет пытаться поставить Макса в наихудшую позицию для следующего хода, и, используя это знание, Макс пытается сделать наилучший возможный ход.
Итак, для: с порядком Max,Min,Max сверху
1) Макс хочет сделать лучший ход для себя (максимальная полезность), поэтому C1=5,C2=11,C3=8 и т. д.
2) Макс предсказывает, что Мин захочет поставить Макса в наихудшее возможное положение (ограничить Макса наименьшей полезностью), поэтому B1=5,B2=2,B3=3
3) Макс хочет сделать лучший возможный ход, поэтому A=B1=5
Что меня смущает в псевдокоде, так это двойная рекурсия и цель v. Может ли кто-нибудь разобрать это для меня?
Спасибо всем за чтение!