博弈论一些情况总结

来源:互联网 发布:excel数据标志为百分比 编辑:程序博客网 时间:2024/05/29 23:44

博弈小结:

(忽略从word上复制过来之后的奇葩缩进)

看了张一飞+贾志豪+方展鹏+曹钦翔的论文都讲得超好,这些应该到处都可以找到的。

终于会基本的博弈了。

仅仅只是看完之后的回忆录而已,基本上和论文相似,仅总结加深记忆用。

看到本文的人轻点喷。

也许看论文会更清晰。

以前博弈各种弱,只是零零星星的了解一些知识,严格的证明之类的没有接触。

现在终于都搞清啦!不过碰上奇葩博弈还是做不出。。。

 

1.极大极小搜索

        

         好吧!表示最后才看到这个的。还是比较好理解的。

         还有α-β剪枝,这个应该自己随便yy都可以搞出来的。

         好吧!用来做五子棋,3连棋之类的。

         至少会了这个,一般的博弈都可以拿0分以上了。

 

2.普通NIM游戏

       

         概念题:一堆石子n个,每次最多取m个,求先手必胜还是必败。

 

     N表示比生态,P表示必败态。

         终止状态是P状态,然后找出能到达这个点的点标记为N状态,

         继续扫,找到只能到达N状态的点标记为P状态,如此循环往复。

         这个比较直观。类似拓扑的扫一次即可。

        

         对于很多堆石子的话张一飞论文说得很清楚,小结一下。

 

         首先看两堆石子,如果个数完全一样,那么后手必胜,因为现手在一堆中拿走了

         一些棋子之后,后手总能在另一堆中拿一样多的棋子。

        

         考虑把局面S分解成AB,先手必胜成为S胜,后手胜为T胜。

        

如果A=B,T胜。如S={3,3,2,2}分解成{3,3}{2,2}.

 

如果对于AS胜,BS(由于AB等价,反过来亦然)S只需要先拿A,然后T如果拿AS也拿ATBS也拿B,那么S因为对于AS是先手,所以S总是可以拿到A的最后一个,并且可以逼着TB的先手。因为B先手必败,S也可以拿掉B的最后一个。

        

如果对于AB都是S败,那么A先随便拿一个,对于T来说就变成了上一种情况了。那么此时T胜。

 

AB都是S胜时,S肯定不会第一步把局面变成一胜一负,他会继续变成AB都对于T必胜,那么T又纠结了。如此往复,就无法确定了。

 

上面的分解,归纳一下,如果对于BS必败,那么整个局面的胜负和A一样。

那么如果原几何是{2,2,2,7,7,3,3,9}就可以分解成A{2,9},B{2,7,3},C{2,7,3}。因为B+C是必败的,所以A+B+C的胜负和A一样,这样就转化成了一个不重集合了,打裸就少了一堆状态了。

 

好吧!以上就可以类比出XOR运算了。沿着这个思路,就可以想到一个函数来优化打裸了。

 

         f[x]=x(一下xor+代替)

         那么对于一堆石子S={a1,a2,a3…..an}

         p=f[a1]+f[a2]+…..+f[an]

如果p=0则该状态是S败,否则S胜。

 

因为终止状态是p=0,要证明这个结论的正确性,只需要证明从p0能够转移到p=0,而从p=0只能转移到p0即可。

首先,明确xor的基本性质。

1.a+b=c,则有a+c=b.

2.p=a1+a2+…..an0,必然存在k,使p+ak<ak,因为p的最高位为1,肯定有一个ak该位也是1p+ak该位就是0了。所以得证。

 

证明从p0能够转移到p=0

         因为p=f[a1]+f[a2]+…..f[an]=a1+a2+…+an

         找到p+ak<akka1交换。

         x=p+a1<a1,直接把a1变成x1,那么p=p+a1+a2+…..+an=0.

 

证明从p=0只能转到p0

         如果a的全部序列都是0了,你就玩完了。

其他时候,随便你选什么数ak,那么其他数的xor和肯定等于ak

p=(ak-xxx) + ak,xxx为正数且小于ak,那么p显然就不为0了。

 

至此,证明了f[a1]=a1的正确性了。

 

现在题目稍稍拓展一下。

N堆石子,每次任选一堆,可以从这堆拿走不超过m个的石子。求先手必胜还是必败。

 

这个的f[a1]=a1%m.

 

因为游戏的分解之类的东西与前一个游戏一样,所以只需考虑一堆石子即可。

考虑最开始的那个打裸,从后往前推一下NP就可一直到a1%m=0时必败。

 

来个终极版NIM游戏。

 

有若干排石子,每次必须选相邻的两个拿走,把原来的那排变成了两排。

谁无路可走了谁就挂了。

 

分析这个题,发现各种分解的性质和前面的两个游戏一样的。现在就需要求f值了。

和前面的游戏一样,我们设计的f值必须满足

终止状态p=0,从p0能够转移到p=0,p=0只能转移到p0即可。

第一个条件是显然成立的。

回忆论文,先假设#S表示S这个状态的f值之xor和,

 

 

要满足第二个条件

         p=f[a1]+f[a2]+….+f[an]0,x=f[a2]+f[a3]+….+f[an]=p+f[a1].

         p+f[a1]<f[a1],所以x<f[a1].

         a1干掉后可能变成了{b1,b2,…..bm}

         那么必须#{b1,b2,….bm}+x=0,如果1~f[a1]-1,都被#{b1,b2….bm}包含了,

         那么肯定是可以找到满足条件的x的。

 

要满足第三个条件

         p=f[a1]+f[a2]+…+f[an]=0时。f[a1]=f[a2]+…+f[an]=x;

         同样把a1干掉,得到{b1,b2….bm}

         Pn=#{b1,b2,…..bm}+x0,必须对于任意b都成立。

         所以x不能出现在a1能转到的状态中。

 

                  所以f值就是他的后继的f值中没有出现过的值的最小值就行了。

其实,这就是sg值了。以前一直觉得这东西特别神奇,原来就这样就证明出来了。

 

sg函数的使用条件:

1.       谁无法操作就输,与就是能找到必败态。

2.       满足类似拓扑序的东东

3.       各个游戏独立

4.       平等游戏

5.       对操作的限制,至于常数有关。

 

 

 

3.anti-nim游戏

 

         如果定义拿最后一个棋子的人输就成了anti-nim游戏。

         传说中的SJ定理登场了。实际上很多定理都会披上这么牛叉的名字。

         我们就一种情况一种情况的玩吧。

         这里的SG应该还是指的NIM中的SG

 

先手必胜有两种状态:

1.如果每一个小游戏都只剩下一个石子了,SG0

2.至少一堆石子>1,SG不为0.

 

证明

         1显然成立。

         2的话分两种情况

a.       只有一堆石子>1,好吧!整个生杀大权都交你主宰了。你可以把它变成1

b.       至少两队石子>1,你只需要把SG值边为0就可以了,这个操作之后,至少还有两堆石子>1,然后对方随便怎么操作,都会把SG变成非0,你们就一直这么玩就行了。

还需要证明1,2的反面是必败的。

1显然了。

2的话,你会把SG变成非0,而且因为现在至少两堆石子>1了,所以你还会给人家至少留一个>1的,那么无论怎么搞,都会送给后手一个必胜态。

 

 

4.every-SG游戏

        

    就是多线程博弈。

形象的说就是红队和蓝队每个队n个人,然后进行n个博弈,最后结束的一场博弈的胜者胜利。

显然,每个博弈的胜者都想让时间坚持得更久,每个败者都想让这场博弈早点结束。

不难列出每个点到终止的步数的DP方程。

如果v是先手必胜,则f[v]=max(f[u])+1,其中uv的后继且u为先手必败。

否则f[v]=min(f[u])+1,uv后继。

         然后可以求出每一个博弈的步数。

         求出这个最大值,如果最大值是奇数,那么先手必胜。这个显然。

 

 

        还有黄金分割那道题,二分图有关的博弈,k倍动态减法游戏。写在应用里了。

 

5.不平等博弈

        

         传说中的超现实数(也译成超实数)登场了。

         首先明确超现实数的两个定义

         定义surreal number x={XL|XR},满足XL中的任意一个数小于等于XR中的任意一个数。

         然后是看他们如何比较大小

         x={XL|XR}y={YL|YR},要满足x<=y,必须满足XL的任意一个元素<y,YR的任意一个元素>x.

         首先{|}=0.

         然后可以构造出第一批新数{0|},{|0}

         根据定义可以知道{|0}<{|}<{0|}

         那么{|0}=-1,{0|}=1.

         然后可以继续构造出一堆数。

         接下来是加法运算法则。

         x+y={XL|XR}+{YL|YR}={XL+y,YL+x|XR+y,YR+x} XL+y运算即把XL中的每一个元素+y

         这个公式十分美观,应该一眼就能记住了。

         加法的交换律和结合律都是满足的。

       然后就类比到不平等博弈问题。

       两个人A,B面临着不同的局面恰好可以分成LR,我们可以把它构造成超现实数。

       于是乎整个局面变成了x={SA|SB},比如A可以转移到xyzB可以转移到w

       就变成了{x,y,z|w}.

 

         如果x>0

则说明x>=0成立,且x<=0不成立。

也就有SA中的元素都>=0,y中的元素都>0,那么A能转移到的状态总是有>=0的,y能转移到的总是>0的,那么A总是有状态可转,那么A必胜。

 

如果x<0

         说明x>=0不成立,x<=0成立。

         也就是SA的元素都<0,SB则有<=0,同理B必胜。

 

如果x=0

         也就是说x>=0x<=0同时成立。

         那么SA<0,SB>0.那么A先手的话会转移到<0的,然后B必胜,B同理。

         所以此时先手必败。

 

真的很佩服方展鹏神犇能想到把博弈和超现实数结合起来。

弱菜就只有膜拜的份了。

 

理论知识终于准备得差不多了,接下来就是刷更多题熟练了。

原创粉丝点击