
AI
寻路
|
171
AI
寻路
7.3.4 算法分析
当每个棋局状态都有固定的
b
个走法(即便每层都能减少一个可行走法)时,追寻深度
d
的
Minimax
算法需要搜索的棋局状态的总数大约是
O
(
b
d
)
,很明显是指数级增长。如
果博弈树足够小而且能够在合理时间内完成搜索,那么可以不加上追寻深度的限制。
来看图
7-5
的结果,是否有办法消除对无用棋局状态的计算呢?由于假设玩家和对手都
不会犯错,因此一旦发现整棵子树都没有办法得到一个更好的结果,就可以放弃继续扩
展。
AlphaBeta
可以很容易地满足这个要求。不过在这里,接下来先看
NegMax
算法是
如何简化交替使用
MIN
和
MAX
层的。
7.4 NegMax
NegMax
算法不再使用
Minimax
的
MAX
和
MIN
来标识层级,而是每一层都同样对待。
这种思想也形成了另外一种算法,即
AlphaBeta
。
在
Minimax
中,
棋局状态是一直从玩家的视角来观察,然后选择走法(需要存储玩家的
信息以供评估函数使用)。所以博弈树每一层会交替包含子结点的最大值(为玩家着想)
或者最小值(为对手着想)。相反,
NegMax
对走法采取一致的评估策略,即从最坏的
角度来评估子结点。
NexMax 算法小结
最好情况、平均情况和最坏情况:
O
(
b
ply
)
bestmove (s, player, opponent)
[move, score] = negmax (s, ply, player, opponent)
return move
end
negmax (s, ply, player, opponent) ...