博弈论

博弈论小小了解:

 

一、巴什博弈(BashGame):只有一堆n个物品,二人轮流取物,每次至少取一个,最多取m个。最后取光者胜。


如果n=m+1,那么无论先取者拿走多少个,均有1<=剩下的物品数<=m,后取者可一次拿走所有剩余物品,后者取胜。

由此可窥见取胜之道:如果n=(m+1)*r+s,(r为任意自然数,s<=m),那么先取者可胜。因为只要先取这拿走s个物品,无论后取者拿走的物品k(<=m)为多少,先取者只要拿走(m+1-k)个,使之剩下的是(m+1)(r-1)个,保持这样的取法,(即总给后取者留下(m+1)的倍数),先取者必胜。

 

题目:NYOJ23(取石子游戏一)、HDU2149、HDU1847

变式题:二人轮流报数,每次至少报1个,最多报10个,谁能报到100则胜。

 

二、威佐夫博弈(WythoffGame):有2堆个若干个物品,二人轮流从某一堆中取物或从2堆中取同样多的物品,每次至少取一个,多者不限,最后取光者胜。


用(ak,bk)(ak<=bk,k=0,1,……,n)表示每步对应的两堆物品的数量,称之为局势。如果甲面对的是(0,0),说明对手乙已经将物品取完,或甲为先手但开局是(0,0)无法取物,则甲输。我们称这种局势为奇异局势。我们可以找出前几个奇异局势为(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。

1.面对(1,2):只有4种取法:1)取第一堆中1个,则对方取第2堆中两个,对方胜;2)取第二堆中1个,则对方从两堆中各取一个,对方胜;3)在第2堆中取2个,则对方在第一堆中取一个,对方胜;4)两堆中各取一个,则对方在第二堆中取一个。  

2.面对(3,5):1)把任一堆取完,对方必取完另一堆,对方胜;2)取1堆、取1个:第1堆中取1个,对方取第2堆中4个,变成(2,1)即上面的(1,2),对方胜;第2堆取1个,则对方在两堆各取2个,变为(1,2),对方胜;3)取1堆,取2个:从第1堆取2个,对方可以在第2堆中取3个,变为(1,2),对方胜。在第二堆取2个,变为(3,3),对方可以从两堆中各取3个,对方胜。4)取1堆,取3个,变为(3,2),对方可各取1个,变为(2,1)即上面的(1,2),对方胜。4)取1堆,取4个,变为(3,1),对方也可使之变为(1,2),对方胜。

由此类推。

可见,k=0时,a0=b0=0,k>=1时,ak是前面未出现过的最小自然数,bk=ak+k。他们的差值为0,1,2,……,n

再找规律的话,我们会发现ak近似等于k*1.618,而1.618=(sqrt(5)+1)/2.

奇异局势有如下3条性质:

(1)任何自然数都包含在且仅包含在一个奇异局势中。

(2)任意操作都可使奇异局势变为非奇异局势。

(3)采用适当的方法,可以将非奇异局势变为奇异局势。

由上述性质可知,若2人均采用最佳策略,则面对非奇异局势时,先手必胜(可使局势变为非奇异);反之,当面对奇异局势时,后取者必胜。

而判断当前局势是否是非奇异局势时,便可用上述的规律,先求出ak,bk的差值,差值*(sqrt(5)+1)/2,若等于ak,则为奇异局势,后手胜,否则先手胜。(如果直接*1.618可能会有精度损失。)


题型:1.判断输赢:用上面的方法即可。

           2.给定局势,若先手赢则给出第一次的取法:若先手赢,则当前局势(a,b)(a<=b))为非奇异局势,要将其转化为奇异局势。

首先考虑2边同时取的情况。因为两边同时取的话,不论取多少,二者的差值k不会改变。可由差值*(sqrt(5)+1)/2得到ak,再由bk=ak+k得到bk。当然,如果当前局势对应的a,比所求得的ak小的话,则无法通过2边同时取的方法使a变为ak,此时应考虑在一堆中取。

加入在1堆中取,可取任意1堆,其差值也不确定,但可以枚举可能转变成的奇异局势的差值,差值k的范围应该是(0<=k<=b),然后根据上面的理论,若满足条件则是合理的取法。


三、尼姆博弈(Nimm Game):有3堆各若干个物品,两个人轮流从某一堆中取任意多的物品,每次至少取1个,多者不限,最后取光者胜。

1.这种情况与二进制有密切关系,用(a,b,c)表示局势。显然当甲面对(0,0,0)时必败,所以(0,0,0)为奇异局势。同样(0,n,n)也是奇异局势,当甲面对(0,n,n)时,无论甲取什么,只要对手乙和甲取走一样多的物品,最后都将由乙取光最后一件而乙获胜。分析一下(1,2,3)也是奇异局势,当甲面对(1,2,3)时,无论甲取走什么,对手乙都可以使局势变为(0,n,n)的情况。

也不知道是谁这么厉害,可以将这种情况与二进制联系起来,而且与按位模2加(即异或)联系起来。用^或者XOR表示异或运算,奇异局势(1,2,3)的异或值1^2^3=(01)^(10)^(11)=00。同理对于奇异局势(0,n,n),其异或0^n^n,结果也为0。进而可以推出,对于任何奇异局势(a,b,c)都有a^b^c=0。

如果面对一个非奇异局势(a,b,c),可将其转变为奇异局势。

设a<b<c,只需将c变为a^b即可。(因为若c=a^b,则a^b^c=a^b^(a^b)=(a^a)^(b^b)=0^0=0。)将c变为a^b,c需要减小(c-a^b),所以只需从c中减去c-(a^b)即可。

2.尼姆博弈模型可以推广到:有n堆物品,每堆若干个,二人轮流从某一堆取任意多的物品,每次至少一个,多者不限,最后取光者胜。

这个游戏中的变量是堆数k和各堆的物品数N1,N2,……Nk。

对应的组合问题是,确定先手获胜还是后手获胜以及二人应如何取物品才是最佳策略。


我们从一堆物品的情况开始逐渐推广。如果只有一堆物品,则先手可取走所有物品而必胜。若有2堆物品,数量分别为N1、N2,则游戏取胜的关键不在于N1和N2具体为多少而在于是否相等。(若相等,无论先手取多少,后手只需在另一堆中取相同个数即可保证后手必胜,类似于上面讨论的(0,n,n)情况。反之,若不相等,则先手可使后手面对(0,n,n)这种局势,则先手必胜。)

现在对于两堆的策略也有了,下面要将情况推广到任意堆数中。

若当前面对的这些堆中所有物品数异或为0,则为利他态(或必败态),记为T;否则为利己态,记为S

【定理1】每个S状态都可以一步到达T状态

证明:若有n堆物品,每堆有a(i)个物品,且当前为S态。令c=a(1)^a(2)^……^a(n),由定义可知,c不为0,即c>0,设c的二进制最高位为第p位(即第p位为1),则a(i)中必存在一个a(t),其二进制第p位也为1。

设x=a(t)^c,因为a(t)与c在相同的位置(第p位)都是1,异或后第p位必为0,结果x必小于a(t)。

所以可以把第t堆中的物品a(t)减小到x,

而a(1)^a(2)^…a(t-1)^x^a(t+1)^…^a(n)

=a(1)^a(2)^…a(t-1)^(a(t)^c)^a(t+1)^…^a(n)

=a(1)^a(2)^……^a(t-1)^a(t)^a(t+1)^……a(n)^c

=c^c=0;

所以只要把a(t)的数量变为x(即从第t堆中取出a(t)-x个物品),即可使异或为0,变为利他态T。

【定理2】对于T状态,取任何一堆的若干堆,都将成为S态。

证明:反证法。

对于T状态,c=a(1)^a(2)^…^a(t)^…^a(n)=0;

假设取第t堆的若干个使之变为a(t)'个,所得仍为T态,即c'=a(1)^a(2)^…^a(t)'^…^a(n)=0;

则有c^c'=a(1)^a(2)^……^a(t)^……^a(n)^a(1)^a(2)^……^a(t)'^……^a(n)=0

所以      a(t)^a(t)'=0;

推出a(t)=a(t'),这与假设矛盾,定理得证。

【定理3】对于利己态S态,只要方法正确,必胜。

证明:如果甲面对S态,要获得最终胜利,只要把S态变为异或和为0的T态(T态虽然称为利他态,但所指的“利他”是指甲面对T态进行选择时的状态不利,而此时是甲将S变为T,即乙要面对T进行选择,对乙来说不利,对甲来说必胜。)。

由定理1,S态可一步变为T态,所以甲可以将S态变为T态,而对于对手乙来说只能把T态变为S态(定理2)。这样,所有S态变为向T态的转变都可以是甲控制,而乙只能被动地实现由T态转变为S态。所以必胜。

【定理4】对于利他态T态,只要对方方法正确,必输。

由定理3易得。


如果是最后取光者输的情况,又当如何?

首先按照普通规则一样的策略进行,直到恰好有一个物品数大于1的堆x,这样的话,只需要将堆x中的物品只留一个其余全部拿出,或者干脆全部拿出,让对手面临奇数堆物品,且每堆物品恰好为1个,这样的状态对手必败。

只要保证每次操作后异或值为0,则操作后必然不会首次出现“恰好有一个物品数大于1的堆”。

(反证:假设只有一个物品数大于1,设为a(t),其他物品数均小于等于1,则异或结果二进制的最高位必然是a(t)的二进制最高位,不为0,与前面条件不符。)


以上只是初步了解,等多做题之后再作补充。

从网上找到的博弈专题练习:https://vjudge.net/contest/121217#overview

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值