博弈論的總結


      參考博客地址:http://blog.csdn.net/lionel_d

  何為博弈論

      那就是若有多個人進行博弈,假設他們都足夠聰明(能力已經相當於計算機了),在他們都沒有失誤並采取最優策略后,一定有一個人勝出,在知道初狀態及規則的情況下,求解最終必勝的初狀態(即何人勝出)的一類問題的理論及方法。

理論鋪墊

1、定義P-position和N-position:其中P代表Previous,N代表Next。直觀的說,上一次move的人有必勝策略的局面是P-position,也就是“先手必敗”(奇異局勢),現在輪到move的人有必勝策略的局面是N-position,也就是“先手可保證必勝”(非奇異局勢)。

(1).無法進行任何移動的局面(也就是terminal position)是P-position;

(2).可以移動到P-position的局面是N-position;

(3).所有移動都導致N-position的局面是P-position。

2、P/N狀態有如下性質:

(1)、若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。
(2)、一個局面是勝態的充要條件是該局面進行某種決策后會成為必敗態。
(3)、一個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態

公平組合博弈(ICG)

1、定義:

(1)只有兩人參與。

(2)游戲局面的狀態集合是有限。

(3)對於同一個局面,兩個游戲者的可操作集合完全相同

(4)游戲者輪流進行游戲。

(5)當無法進行操作時游戲結束,此時不能進行操作的一方算輸。

(6)無論游戲如何進行,總可以在有限步數之內結束。

2、模型:給定一個有向無環圖和一個起始頂點上的一枚棋子,兩名選手交替的將這枚棋子沿有向邊進行移動,無法移動者判負。這個游戲可以認為是所有公平組合游戲的抽象模型。其實,任何一個ICG都可以通過把每個局勢看成一個頂點,對每個局勢和它的子局勢連一條有向邊來抽象成這個“有向圖游戲”。

3、解決思路:

現在,假定我們給出兩個游戲G1 和 G2甚至多個游戲。如果我們只知道單個游戲的P-狀態和N-狀態我們能夠正確地玩好游戲和G1 + G2嗎?答案是否定的。不難看出兩個P-狀態的和總是P-狀態,P-狀態和N-狀態的和總是N-狀態。但是兩個N-狀態的和既可能是P-狀態也可能是N-狀態。因此,只知道單個游戲的P-狀態和N-狀態是不夠的。

為了了解到幾個狀態疊加后是N還是P狀態,我們需首先了解Sprague-Grudy函數。

4、Sprague-Grudy定理:

令N = {0, 1, 2, 3, ...} 為自然數的集合。Sprague-Grundy 函數給游戲中的每個狀態分配了一個自然數。結點v的Grundy值等於沒有在v的后繼的Grundy值中出現的最小自然數.

形式上:給定一個有限子集 S ⊂ N,令mex S為沒有出現在S中的最小自然數。定義的mex(minimal excludant)運算,這是施加於一個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。

對於一個給定的有向無環圖,定義關於圖的每個頂點的Sprague-Garundy函數g如下:g(x)=mex{ g(y) | y是x的后繼 }。

5、Sprague-Grudy函數性質:

(1)所有的終結點所對應的頂點,其SG值為0,因為它的后繼集合是空集——所有終結點是必敗點(P點)。

(2)對於一個SG(x)=0的頂點x,它的所有后繼y都滿足g(y)!=0——無論如何操作,從必敗點(P點)都只能進入必勝點(N點)//對手走完又能把N留給我們。

(3)對於一個SG(x)!=0的頂點,必定存在一個后繼點y滿足g(y)=0——從任何必勝點(N點)操作,至少有一種方法可以進入必敗點(P點)//就是那種我們要走的方法。

尼姆博奕(Nimm Game)

 1.nim簡單情況:

    有3堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取一個,最后取光者獲勝勝。

    這是nim博弈最簡單的情況,我們用(a,b,c)表示某種局勢,首先(0,0,0)顯然是奇異局勢,無論誰面對奇異局勢,都必然失敗。第二種奇異局勢是(0,n,n),只要與對手拿走一樣多的物品,最后都將導致(0,0,0)。仔細分析一下,(1,2,3)也是奇異局勢,無論對手如何拿,接下來都可以變為(0,n,n)的情形。

    那么怎么才能判斷一個局勢是否為奇異局勢呢?答案就是抑或運算。這也算是公平組合博弈的一個原理之一,由於是尼姆博弈的基礎於是放到此部分。

2.抑或運算對尼姆博弈的處理以及原理:

  對於P/N狀態,有以下三個定義:(即前面理論鋪墊的三個定義)

 (1).無法進行任何移動的局面(也就是terminal position)是P-position;

 (2).可以移動到P-position的局面是N-position;

 (3).所有移動都導致N-position的局面是P-position。

 假設各堆石子數為a1,a2,a3...an,首先P狀態對應a1^a2^a3...^an=0,N狀態對應a1^a2^a3......^an!=0;

  對於(1),無法操作的局面對應ai全為0的情況,抑或為0,得證。

  對於(2),對於任何a1^a2^a3...^an!=0的情況,將一個最大的數ai,變為a1^a2^a3...^a(i-1)^a(i+1)^an,根據抑或自反率(即a^a=0)可知這樣轉變就把該!=0 N狀態轉化為 =0的P狀態;

  對於(3),證明P狀態轉移后必定不為P狀態,也就能證明(3)了。對於a1^a2^a3^……^ai^……^an=0的P狀態 將其中ai取走一堆,即減去一個數字變為ai`,仍為P狀態,即a1^a2^a3^……^ai^……^an=0=a1^a2^a3^……^ai^……^an,由於抑或運算滿足削去率,所以得到最后結果為ai`=ai,所以P狀態不可能經過任何轉移使得其仍未P狀態,(3)成立。

  因此nim簡單博弈中,把3堆石子數量抑或一遍,判斷是否為零就能得出是否為必勝態。

  推廣到n堆,原理相似。

ICG,NIM博弈及 SG函數綜合

  對於能化為n堆取石子的問題,若取石子的數量是有限制的(給出n個能取得石子數量),因此先求出每堆數量的SG值(也就是單個游戲對應的狀態),再進行抑或,得出的答案按是否為0判斷是否為必勝或者必敗態。

  而對於一次取后會變為多狀態的問題,由於按照最優策略最后一定有一個人勝出,所以取后各個狀態得出的結果是一致的,只需要把該次取后的所有狀態抑或一遍,得出的答案就是取前狀態,可遞歸計算。

巴什博奕(Bash Game)

1. QUESTION 

    只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m個。最后取光者得勝。

2.分析:

    游戲中為兩人取一堆,干脆擴展到取n堆,由於取物數量有限制,因此正好是綜合內第一個情況。

    求SG值總能發現SG值該值為%(m+1) 后的結果,因此不加證明就能給出每一堆%(m+1)后再抑或一遍就為答案,下面是一堆貪心算法原理:
    顯然,如果n=m+1,那么由於一次最多只能取m個,所以,無論先取者拿走多少個,后取者都能夠一次拿走剩余的物品,后者取勝。因此我們發現了如何取勝的法則:如果n=(m+1)r+s,(r為任意自然數,s≤m),那么先取者要拿走s個物品,如果后取者拿走k(≤m)個,那么先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以后保持這樣的取法,那么先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最后獲勝。

即,若n=k*(m+1),則后取着勝,反之,存在先取者獲勝的取法。n%(m+1)==0. 先取者必敗。

    多堆類似。


威佐夫博奕(Wythoff Game)

1.QUESTION

    有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最后取光者得勝。

2.分析

    這種情況下是頗為復雜的。我們用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示兩堆物品的數量並稱其為局勢,如果甲面對(0,0),那么甲已經輸了,這種局勢我們稱為奇異局勢。前幾個奇異局勢是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
    可以看出,a0=b0=0,ak是未在前面出現過的最小自然數,而 bk= ak + k,奇異局勢有
如下三條性質:
    1。任何自然數都包含在一個且僅有一個奇異局勢中。
    由於ak是未在前面出現過的最小自然數,所以有ak > ak-1 ,而 bk= ak + k > ak-1 + k-1 = bk-1 > ak-1 。所以性質1。成立。
    2。任意操作都可將奇異局勢變為非奇異局勢。
    事實上,若只改變奇異局勢(ak,bk)的某一個分量,那么另一個分量不可能在其他奇異局勢中,所以必然是非奇異局勢。如果使(ak,bk)的兩個分量同時減少,則由於其差不變,且不可能是其他奇異局勢的差,因此也是非奇異局勢。
    3。采用適當的方法,可以將非奇異局勢變為奇異局勢。

    假設面對的局勢是(a,b),若 b = a,則同時從兩堆中取走 a 個物體,就變為了奇異局勢(0,0);如果a = ak ,b > bk,那么,取走b - bk個物體,即變為奇異局勢;如果 a = ak , b < bk ,則同時從兩堆中拿走 ak - ab - ak個物體,變為奇異局勢( ab - ak , ab - ak+ b - ak);如果a > ak ,b= ak + k,則從第一堆中拿走多余的數量a - ak 即可;如果a < ak ,b= ak + k,分兩種情況,第一種,a=aj (j < k),從第二堆里面拿走 b - bj 即可;第二種,a=bj (j < k),從第二堆里面拿走 b - aj 即可。

    從如上性質可知,兩個人如果都采用正確操作,那么面對非奇異局勢,先拿者必勝;反之,則后拿者取勝。

    那么任給一個局勢(a,b),怎樣判斷它是不是奇異局勢呢?我們有如下公式:
    ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,...,n 方括號表示取整函數)
奇妙的是其中出現了黃金分割數(1+√5)/2 = 1。618...,因此,由ak,bk組成的矩形近似為黃金矩形,由於2/(1+√5)=(√5-1)/2,可以先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,若不等於,那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇異局勢。然后再按照上述法則進行,一定會遇到奇異局勢。
3.原理:

  對於每一個必敗局勢對應的數對,將他們按第一個數從小到大排序,可知(ai,bi)中ai若組成一個序列,bi組成一個序列,這兩個序列正好滿足貝亞蒂序列的定義,應用貝亞蒂定理即可求解每一項的通項,答案就是上面的判奇異局勢的公式。

【補】EP6: Wythoff’s Game (威佐夫博弈)

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://yjq24.blogbus.com/logs/42826226.html

大致上是這樣的:有兩堆石子,不妨先認為一堆有10,另一堆有15個,雙方輪流取走一些石子,合法的取法有如下兩種:

1)在一堆石子中取走任意多顆;

2)在兩堆石子中取走相同多的任意顆;

約定取走最后一顆石子的人為贏家,求必敗態(必勝策略)。

 

這個可以說是MR.Wythoff(Wythoff於1907年提出此游戲)一生全部的貢獻吧,我在一篇日志里就說完有點殘酷。這個問題好像被用作編程競賽的題目,網上有很多把它Label為POJ1067,不過如果學編程的人不知道Beatty定理和Beatty序列 ,他們所做的只能是找規律而已。不熟悉的人可以先在這里玩幾局~

簡單分析一下,容易知道兩堆石頭地位是一樣的,我們用余下的石子數(a,b)來表示狀態,並畫在平面直角坐標系上。

用之前的定理: 有限個結點的無回路有向圖有唯一的核  中所述的方法尋找必敗態。先標出(0,0),然后划去所有(0,k),(k,0),(k,k)的格點;然后找y=x上方未被划去的格點,標出(1,2),然后划去(1,k),(k,2),(1+k,2+k),同時標出對稱點(2,1),划去(2,k),(1,k),(2+k,1+k);然后在未被划去的點中在y=x上方再找出(3,5)。。。按照這樣的方法做下去,如果只列出a<=b的必敗態的話,前面的一些是(0,0),(1,2),(3,5),(4,7),(6,10),…

 

 

接下來就是找規律的過程了,忽略(0,0),記第n組必敗態為(a[n],b[n])

命題一:a[n+1]=前n組必敗態中未出現過的最小正整數

[分析]:如果a[n+1]不是未出現的數中最小的,那么可以從a[n+1]的狀態走到一個使a[n+1]更小的狀態,和我們的尋找方法矛盾。

命題二:b[n]=a[n]+n

[分析]:歸納法:若前k個必敗態分別為 ,下證:第k+1個必敗態為

從該第k+1個必敗態出發,一共可能走向三類狀態,從左邊堆拿走一些,從右邊堆拿走一些,或者從兩堆中拿走一些.下面證明這三類都是勝態.

情況一:由命題一,任意一個比a[k+1]小的數都在之前的必敗態中出現過,一旦把左邊堆拿少了,我們只要再拿成那個數相應的必敗態即可。

情況二(從右邊堆拿走不太多):這使得兩堆之間的差變小了,比如拿成了 ,則可再拿成 ;

情況二(從右邊堆拿走很多):使得右邊一堆比左邊一堆更少,這時類似於情況一,比如拿成了 (其中a[m] ;

情況三:比如拿成 ,則可再拿成 .

綜上所述,任何從 出發走向的狀態都可以走回核中.故原命題成立.

以上兩個命題對於確定(a[n],b[n])是完備的了,給定(0,0)然后按照這兩個命題,就可以寫出(1,2),(3,5),(4,7),…

這樣我們得到了這個數列的遞推式,以下我們把這兩個命題當成是(a[n],b[n])的定義。

先證明兩個性質:

性質一:核中的a[n],b[n]遍歷所有正整數。

[分析]:由命題一,二可得a[n],b[n]是遞增的,且由a[n]的定義顯然。

性質二:A={a[n]:n=1,2,3,…},B={b[n]:n=1,2,3,…},則集合A,B不交。

[分析]:由核是內固集,顯然。

看到這里大家有沒有想到Beatty序列呢,實際上a[n]和b[n]就是一個Beatty序列。

 ,有  ,解方程 

得  ,到此,我們找到了該必敗態的通項公式。

實際上這組Beatty序列還有一些別的性質,比如當一個數是Fibonacci數的時候,另一個數也是Fibonacci數;而且兩者的比值也越來越接近黃金比,這些性質在得到通項公式之后不難證明。

總的來說,這個問題給我們了哪些啟示呢?首先用定理所說的方法找核,然后給出核的規律(遞推,或是通項)並且證明。最后附上一張對應的必敗態圖.

wythoff

 

 補充:貝亞蒂定理證明威佐夫定理:

 用有序數對(即兩堆含石子的個數,規定第一個數不大於第二個數)表示某個狀態,顯然(0,0)是一個必敗態。下面證明,根據下面的方法,可以構造出所有的必敗態:

    1° (0,0)是必敗態;

    2° 第k個必敗態的兩個數相差為k(記(0,0)為第0個必敗態);

    3° 已知前k個必敗態,則最小的沒出現過的正整數為第k+1個必敗態的第一個數。

    分情況討論,很容易就把這件事說清楚了,下面幾段證明可以跳過...

 

    證明:根據上述構造方法,有一個顯然的事實,就是每個狀態的第一個數比它后面一個狀態的第一個數小,對第二個數也如此【1】。假如說后面狀態的第一個數(記為A)比前面的小,那么前面狀態的第一個數早就選A了,肯定輪不到后面的狀態,與 3°矛盾。而前面狀態中第二個數減第一個數的值比后面的小(由 2°),所以前面狀態中第二個數當然比后面的小。

    同時,也可知不會出現重復的正整數【2】,因為如果出現重復的正整數,一定是前面狀態的第二個數等於后面狀態的第一個數(否則,由[1],將會出現嚴格不等關系)。而后面狀態的第一個數不可能與前面重復,與 3°矛盾。

 

    現在,考慮構造出的第n個狀態,當n=0時顯然是必敗態,設n=0,1,2,...,k-1時,這k個狀態已經是必敗態,下面證明第k個狀態也是必敗態。

    記此狀態為(A,A+k)。先取者不可能變為前面的必敗態,因為如果只動一堆石子而變為前面某個必敗態,則兩個必敗態有重復的正整數,矛盾;如果動兩堆石子,則差不變,同樣不可能變為前面某個必敗態。

    下面通過證明,先取者不管如何取石子,后取者都能變成前面某個必敗態,從而證明(A,A+k)也是必敗態。

    (1)先取者若動第一堆石子,則這個數肯定在前面的必敗態中出現過(由 3°),而此時第二堆石子的數目肯定比前面那個必敗態的兩個數都要大(由 [1]),所以后取者一定可以取第二堆石子,變為前面那個必敗態。

    (2)先取者若動第二堆石子:

         i .如果取完之后第二堆仍然不小於第一堆,則兩堆石子的差減小,恰好和前面某個必敗態吻合,而第一堆石子的數目肯定比前面那個必敗態的第一個數大(由 [1]),后取者可以同時取兩堆石子變為前面那個必敗態。

         ii.若小於第一堆,則這個數在前面的必敗態中出現過(由 3°),如果這個數是前面必敗態的第二個數,則后取者只要動第一堆即可;如果很不巧,這個數是前面必敗態的第一個數,而此時第一堆石子的數目又不大於前面必敗態的第二個數,那此時兩堆石子的差一定比前面那個必敗態小,與更靠前的一個必敗態吻合。后取者同時動兩堆即可。

    (3)先取者若同時動兩堆石子,則第一堆石子數在前面的必敗態中出現過(由 3°),后取者動第二堆就行了。

    這就證完了

 

    由剛才的構造必敗態的方法,記{a_n},{b_n}分別為第一個數與第二個數構成的數列(除去第一對(0,0)),n=1,2,3, ... ,先寫出兩個數列的前幾項:

    {a_n}: 1,3,4,6,...

    {b_n}: 2,5,7,10,...

    根據剛才的構造方法,顯然兩個數列都是嚴格遞增的,而且沒有重復的正整數,而且每一個正整數都會出現(由 3°,不可能漏掉某個正整數),且b_n-a_n=n。

    熟悉Beatty定理的人會立即看出,Beatty定理構造的數列恰好滿足前三條!

 

    下面先介紹一下Beatty定理。

    取正無理數α,β,使得

取石子游戲、Beatty定理和黃金分割數

    構造兩個數列{a_n},{b_n},它們的通項分別為

取石子游戲、Beatty定理和黃金分割數

    a_n為小於等於αn的最大整數,那個符號相當於高斯函數[ ]。

    數列顯然都是正整數數列,Beatty定理指出,兩個數列都是嚴格遞增的,並且每個正整數在兩個數列中出現且僅出現一次。

    嚴格遞增好證,因為 1/α<1,α>1 ,所以{a_n}相鄰兩項取整前相減大於1,取整后后面一項顯然也大於前面一項。對{b_n}同理。

    對於后一個命題,我們只要證明,對於任意正整數k,小於等於k的正整數在兩個數列中恰好出現k次。

    設數列{a_n}的前p項小於等於k(而不含p+1項),又因為每一項取整前均為無理數,不可能取到整數值,於是有

取石子游戲、Beatty定理和黃金分割數

    兩者綜合起來,就有等式

取石子游戲、Beatty定理和黃金分割數

    這就是小於等於k的正整數在數列{a_n}中出現的次數。對於數列{b_n}同理。這樣我們得到了小於等於k的正整數在兩個數列中出現的總次數

取石子游戲、Beatty定理和黃金分割數

    注意到,兩個向下取整符號內的數均為無理數,於是有嚴格的不等式

取石子游戲、Beatty定理和黃金分割數

    於是有

取石子游戲、Beatty定理和黃金分割數

    這就證完了。

 

    回到剛才的必敗態上,Beatty定理是一個很合適的定理,任取一組滿足要求的α,β,構造出的數列就滿足大部分條件,只剩最后一個條件,即 b_n-a_n=n,這只需取 β-α=1 即可。

    解出α,β的值如下:

取石子游戲、Beatty定理和黃金分割數

    於是,我們就可以直接寫出第n個必敗態的公式

取石子游戲、Beatty定理和黃金分割數

    至此,開始那個取石子游戲得到完美解決,而黃金分割數,竟然在一個看似毫不相關的問題中出現。

Fibonacci博弈

1、問題模型:

 有一堆個數為n的石子,游戲雙方輪流取石子,滿足: 

(1)先手不能在第一次把所有的石子取完; 

(2)之后每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。 約定取走最后一個石子的人為贏家。

2、解決思路:

  當n為Fibonacci數時,先手必敗。即存在先手的必敗態當且僅當石頭個數為Fibonacci數。 

    證明:根據“Zeckendorf定理”(齊肯多夫定理):任何正整數可以表示為若干個不連續的Fibonacci數之和。如n=83 = 55+21+5+2,我們看看這個分解有什么指導意義:假如先手取2顆,那么后手無法取5顆或更多,而5是一個Fibonacci數,那么一定是先手取走這5顆石子中的最后一顆,同理,接下去先手取走接下來的后21顆中的最后一顆,再取走后55顆中的最后一顆,那么先手贏。

    反證:如果n是Fibonacci數,如n=89:記先手一開始所取的石子數為y

    (1)若y>=34顆(也就是89的向前兩項),那么一定后手贏,因為89-34=55=34+21<2*34。

    (2)y<34時剩下的石子數x介於55到89之間,它一定不是一個Fibonacci數,把x分解成Fibonacci數:x=55+f[i]+…+f[j],若,如果f[j]<=2y,那么對B就是面臨x局面的先手,所以根據之前的分析,后手只要先取f[j]個即可,以后再按之前的分析就可保證必勝。

 

 

 

6、應用:

(1)可選步數為1-m的連續整數,直接取模即可,SG(x) = x % (m+1); 

(2)可選步數為任意步,SG(x) = x; 

(3)可選步數為一系列不連續的數,用mex(計算每個節點的值) 

7、練習:hdoj 1847 1536 3980

 

參考:

http://blog.csdn.net/lgdblue/article/details/15809893

http://www.cnblogs.com/celia01/archive/2011/11/15/2250171.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM