本节这里我们讨论的是确定的、完全可观测、序贯决策、零和游戏下的对抗搜索。
所谓零和博弈是博弈论的一个概念,属非合作博弈。指参与博弈的各方,在严格竞争下,一 方的收益必然意味着另一方的损失,博弈各方的收益和损失相加总和永远为“零”,双方不存在 合作的可能。
对抗搜索(Adversarial Search)一般指的是博弈双方会阻止对方收益最大化,也称为博弈搜索(Game Search)。在博弈游戏中经常会碰到,比如围棋这种零和游戏。智能体(agents)之间通过竞争实现相反的利益。
对抗搜索主要有三种:最大最小搜索(Minimax Search)、Alpha-Beta剪枝搜索(Pruning Search)和蒙特卡洛树搜索(Monte-Carlo Tree Search)。
最小最大搜索
最小最大搜索是在对抗搜索中最为基本的一种让玩家来计算最优策略的方法.。在开始之前我们需要定义如下基本概念:
以Tic-Tac-Toe
游戏的对抗搜索 为例,如下图所示:
上图中的MAX
和MIN
可以看作是两个对手,MAX
希望游戏的终局得分高,MIN
希望游戏的终局得分低。其所形成游戏树的叶子节点有9!=362880种。
minimax算法
那minimax
算法大体的工作流程是怎样的呢?我们给出如下例子:
如果最后一排是终止节点,那么MIN
则会选择其中最小的数值,如上图中红色框中所选择出来的数值。而MAX
会从MIN选择最小的数值之后从中选择一个最大的数值3
。
用人话来逻辑理解一下:从最糟糕的情况中选择一个最好的情况。比如让你选择掉100块钱还是50块钱,两种情况都不好,但是你依旧会选择掉50块钱这一个相对来说不那么糟糕的情况。
在minimax
算法里面,MAX
会选择后续玩法最大的一种玩法。而MIN
会选择后续玩法里面最小的一种玩法。两者轮流竞争。
minimax
的算法非常简单有效的对抗搜索算法,如果计算资源足够的话,这种算法可返回最优结果。但是就是这个计算资源可能会导致在对一些复杂的情况下无法穷举,无法在有效时间内返回结果。
由此后人改进提出了:用alpha-beta pruning
算法来减少搜索节点;或者对节点进行采样、而非逐一搜索 (蒙特卡洛树搜索)。
alpha、beta剪枝搜索
一种对最小最大搜索进行改进的算法,即在搜索过程中可剪除无需搜索的分支节点,且不影响搜索结果。该算法需要尽量去剪除那些不用搜索的节点。
那如何来剪枝呢?
如上图所示,假设我们已近搜完了B BB节点,得到其最小收益为3
,然后开始搜C CC节点,当搜到2
的时候,剩下的两个4
和6
就没有必要搜索下去了,因为不管接下来搜到什么,整个C CC得出来的结果都会比B BB的结果3
要小。
可以看出,如果对于一颗非常巨大的树来说,如果可以剪枝一部分对搜索结果没有影响的分支,将会大大提高搜索的效率。
整个的搜索流程可展示为下图所示过程:
那alpha
、beta
剪枝搜索中的Alpha
,Beta
又是什么呢?
- Alpha值α \alphaα:假设n nn是
MIN
节点,如果n nn的一个后续节点可提供的收益小于α \alphaα,则n nn及其后续节点可被剪枝。因为你是MIN节点,搜到一个更小的节点对手不会这么干,所以没必要搜索下去。 - Beta值β \betaβ:假设n nn是
MAX
节点,如果n nn的一个后续节点可获得收益大于β \betaβ,则n nn及其后续节点可被剪枝。因为你是MAX节点,搜到一个更大的节点虽然你自己很喜欢,但是对手也不会让你这么干的。
每个节点有两个值,分别是α \alphaα值和β \betaβ值。节点α \alphaα和β \betaβ值在搜索过程中不断变化。其中α \alphaα从负无穷大逐渐增加、β \betaβ从正无穷大逐渐减少,如果一个节点中α > β \alpha > \betaα>β,则该节点的后续节点可剪枝。
- Alpha、Beta剪枝算法伪代码:
Alpha
、Beta
剪枝算法的伪代码如下图所示:
- 剪枝本身并不会影响算法输出结果。节点先后次序会影响剪枝效率。
我的微信公众号名称:深度学习先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究深度学习、强化学习、机器博弈等相关内容!期待您的关注,欢迎一起学习交流进步!