浅谈"对抗搜索"的alpha-beta 剪枝

1.对抗搜索

在对弈中经常会遇到可能性很多而有没有规律的情况,这时可以对所有后续情况进行分析,选择当前对自己最有利的一中情况.

如果两方A,B进行对弈,计算现在局面的分数(对A和B),如果两方处于对立,那么一定在一方分数高的同时另一方分数会低(

每方都希望局面对自己有利),因此此时进计算A的分数,B的分数可以由A的分数反应(A高B低,A低B高),如果两个人足够

聪明(知道N局以后可能的所有局面,此时用搜索来列举),每一步都会选择对自己有利的后续局面进行操作.若果此时从结果像

最开始推,那么决策这一定会选择更有利的上一步进行来进行决策,而当前的所处换将则是由对方的上一步决策导致的.

现在记A的分数(决策效果)为分数,A希望自己获得更高的分数记MAX方,B希望自己能获得更高的分数(A获得更低的分数)

记做MIN方.

浅谈

若果现在已经计算出了最下面一层的分值,由A操作那么A会对B创造的局面采取最优的决策(导致倒数第二层),以此操作,到上面的n次操作O(P) P=A,B 操作,那么

他知道自己的决策会形成怎样的后续局面,那么他就会选择导致n部后使得自己结果最好的局面.

对于上面的A则会选择靠左边的以此操作,最终如果A的分数会>=6,当B足够聪明时取等号.

这时候你可能会说了,最终结果A也有可能取100那为什么这不是更好的决策呢?这是因为A的每次操作都是在B的操作上进行的.

假设此时A取了100的操作,那么B若果够聪明的话他会取6这种操作使得A的上步只能在6,5之间选了.

此时我们就可以对抗搜索按照上面方式进行了,可是对于情况较多的决策这个搜索树会十分庞大,使得决策无法按时完成,那么你可能会想少进行几层分析或许可以

加快速度,是的这样可以减少搜索局面,可是进行较少决策步数的分析,可能会不能发现后续更好的决策更好方向从而使得决策准确度下降.

2.alpha-beta剪枝:

若果某 max节点x的当前最小值为alpha,其父亲节点y的最小值beta的最小值为beta那么如果alpha>beta那么x节点的值不用进行计算(及他不用进行后续的搜索),

因为记后搜索之为m (上面的绿25节点)

若:m>alpha m被x选上时m>alpha>beta>y节点则不会由x节点更新.

  m

若: 某 min 节点的当前大值为alpha,其父节点最小值为beta若 alpha  < beta ,则x节点不用计算.证明类似上面. 

那么引入剪枝后搜索效率会很由大的提升...可以进行基本搜索,必要时减少搜索层数减少准确性来提高速度.

关于博弈很重要的是:

若果某节点后继均为必胜节点,那么该节点必败.

如果某节点后继有一必败结点,那么该节点必胜.

这些规律很有力提前完成搜索.

关于游戏.

如果进行对抗的是不止一人二是多人,那么可以将多人合成一方来进行对抗搜索,比如

正,正,反,正,正,正,反,反,反,反

可以归结为

正方1,反方1,正方2,反方2

此时正方1的决次评估是前面两个成员决策叠加情况,其他等同.

这样一来有将连续当方决策化为交替决策了(可以alpha-beta剪枝啦).


你可能感兴趣的:(数据结构,思维体操,游戏,c/c++常用算法)