码迷,mamicode.com
首页 > 其他好文 > 详细

组合博弈入门小结(更新中)

时间:2015-05-04 15:40:24      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:算法   组合游戏   博弈   数学   

       这几天开始学习博弈,发现这一块是个难啃的骨头。以下是我从网上收集的资料汇总:

       我国民间有个古老的游戏:就是有物品若干堆,(物品可以是火柴,围棋都可以)。两个人轮流从堆中取若干件,规定取光物体者为胜。这个就是我们今天要研究的组合游戏。

组合游戏定义:

       1、有且仅有两个玩家    2、游戏双方轮流操作    3、游戏操作状态是个有限的集合(比如:取石子游戏,石子是有限的,棋盘中的棋盘大小的有限的)  4、游戏必须在有限次内结束  5、当一方无法操作时,游戏结束。

现在我们来研究如何取胜:

(一)巴什博奕Bash Game):有一堆n个物品,两人轮流从堆中取物品,每次取 x 个 ( 1 ≤ x ≤ m)。最后取光者为胜。

         如果 n = m + 1, 一次至多取 m 个,所以无论先取者,取了多少个,一定还剩余 x 个( 1 ≤ x ≤ m)。所以,后取者必胜。因此我们发现了取胜的秘诀:如果我们把 n 表示为

n = (m + 1)  * r + s 。(0 ≤ s  < m , r ≥ 0)。先取者 拿走 s 个, 后取者 拿走 k 个  (1 ≤ k ≤ m),那么先取者 再 拿走 m + 1 - k 个。结果还剩下 ( m + 1 ) * ( r - 1 ) 个。我们只要始终给对手留下 m + 1 的倍数,那么 先取者 肯定必胜。 现在 我们可以知道,如果 s = 0,那么后取者必胜。 否则 先取者 必胜。

(二)威佐夫博奕Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

        这种情况下是颇为复杂的。我们用(a[k],b[k])(a[k] ≤ b[k] ,k=0,1,2,...,n)( a[k] 其中 k 为下标 )表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。

       可以看出,a[0] = b[0] = 0,a[k]是未在前面出现过的最小自然数,而 b[k] = a[k] + k。

奇异局势的性质:   

1、任何自然数都包含在一个且仅有一个奇异局势中
          由于ak是未在前面出现过的最小自然数,所以有a[k] > a[k-1] ,而 b[k] = a[k] + k > a[k-1] + k > a[k-1] + k - 1 = b[k-1] > a[k-1] 。所以性质1成立。
2。任意操作都可将奇异局势变为非奇异局势
          事实上,若只改变奇异局势(a[k],b[k])的某一个分量,那么另一个分量不可能在其他奇异局势中,所以必然是非奇异局势。如果使(a[k],b[k])的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势。
3。采用适当的方法,可以将非奇异局势变为奇异局势
         假设面对的局势是(a , b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);如果 a = a[k] ,b > b[k] ,那么,取走b - b[k]个物体,即变为奇异局势;如果 a = a[k] , b < b[k] 则同时从两堆中拿走a - a[b-a] 个物体(如果不懂为什么减去a - a[b-a],详见文章最后的注释1)变为奇异局势( a[b-a], a[b-a] + b - a);如果a > a[k] ,b= a[k] + k 则从第一堆中拿走多余的数量a - a[k] 即可;如果a < a[k] ,b= a[k] + k,分两种情况,第一种,a=a[j] (j < k)从第二堆里面拿走 b - b[j] 即可;第二种,a=b[j] (j < k)从第二堆里面拿走 b - a[j] 即可。
          由上述性质可知,如果双方都采取正确操作,那么面对非奇异局势,先取者必胜。
          那么我们要如何判断一个局势是否为奇异局势?公式如下:
          a[k] = [k(1+√5)/2](a[k]这个方括号为下标运算符,[k(1+√5)/2]这个方括号为取整运算符),b[k] = a[k] + k 。奇妙的是其中出现了黄金分割数(1+√5)/2 = 1.618...因此,由a[k],b[k]组成的矩形近似为黄金矩形,由于2/(1+√5)=(√5-1)/2,可以先求出 j = [a(√5-1)/2],若 a = [ j(1+√5)/2],那么a = a[j],b[j] = a[j] + j,若不等于,那么a = a[j]+1,b = a[j] + j + 1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。

(三)尼姆博奕Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
    
           这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。
计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算,先看(1,2,3)的按位模2加的结果:
1 =二进制01
2 =二进制10
3 =二进制11 (+)
———————
0 =二进制00 (注意不进位)
对于奇异局势(0,n,n)也一样,结果也是0。
任何奇异局势(a,b,c)都有a(+)b(+)c =0。
注意到异或运算的交换律和结合律,及a(+)a=0,:
a(+)b(+)(a(+)b)=(a(+)a)(+)(b(+)b)=0(+)0=0。
所以从一个非奇异局势向一个奇异局势转换的方式可以是:
1)使 a = c(+)b
2)使 b = a(+)c
3)使 c = a(+)b

必胜点和必败点的概念
       P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
       N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
必胜点和必败点的性质
        1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)
        2、从任何必胜点N 操作,至少有一种方式可以进入必败点 P。
        3、无论如何操作,必败点P 都只能进入 必胜点 N。
         
注释1:因为奇异局势的项数是有 b[k] - a[k] 的差决定,每一个奇异局势的项数都是独一无二的。也就是说,我们 只能将 (a , b) (a = a[k], b < b[k])转化为 (a[b-a], b[b-a])。因为他们的差是确定的始终都是 b-a,故可以转化为 第 b-a 项。由此我们可以 将  (a , b) (a = a[k], b < b[k]) 转化为奇异局势 (a[b-a], b[b-a])也就是 ( a[b-a], a[b-a] + b - a)。所以我们可以逆推得出,只要将 两边 同时减去 a - a[b-a] 即可。

       其他有关博弈的资料,会继续整合到这篇博客



组合博弈入门小结(更新中)

标签:算法   组合游戏   博弈   数学   

原文地址:http://blog.csdn.net/luomingjun12315/article/details/45479073

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!