1. 程式人生 > >ICG博弈_尼姆博弈(Nim Game)及證明

ICG博弈_尼姆博弈(Nim Game)及證明

這是最後一篇ICG博弈,尼姆博弈,對比前面的巴什博弈和威佐夫博弈,尼姆博弈的玩法更加自由化,因此想贏的過程也更加複雜。

  如果沒有了解過巴什博弈和威佐夫博弈的,建議先看上兩篇 :巴什博弈及證明威佐夫博弈及證明

尼姆博弈(Nimm Game)

  目前有任意堆石子,每堆石子個數也是任意的,雙方輪流從中取出石子,規則如下:   ①每一步應取走至少一枚石子;每一步只能從某一堆中取走部分或全部石子;   ②如果誰取到最後一枚石子就勝。   設(a,b,c,d…)為每堆石子的個數(石子個數>=0),甲乙兩人遊戲,且甲先行。 在這裡插入圖片描述

  一樣的思路,找出必敗態,這裡用遞增窮舉的方法:   剩下1堆石子

,明顯(0)是一個必敗態,(k)是一個必勝態。

  剩下2堆石子,根據遊戲規則可知,(1,1)是一個失敗態,(1,2)是一個必勝態,(2,2)是一個失敗態,……發現(k,k)是一個必敗態,無論你怎麼取,對手只要從數量較少的一堆取走和你取走一樣的數量,則又回到了(k‘,k’)狀態,這樣一直下去,總會變成(1,1)或者(0,0),(k,k+m)是一個必勝態

  剩下3堆石子,根據前面的結論,我們知道 (1,1,k)、(1,k,k)和(k,k,k)都是必勝態【都可以留下(k,k)必敗態給對手】,接下來對於任一個(a,b,c)都可以轉化為(k+m,k+n.k+p),而對於m\n\p,有3種情況,分別是①三者相等

,就是(k’,k’,k’),為必勝態。②兩者相等,假設為(k+m,k+p.k+p),這樣把k+m取完,留下必敗態給對手,也是必勝態。③三者不等,這種情況非常複雜,用簡單的公式難以表達,我們可以觀察到(1,2,3)是必敗態,但是(1,2,4)是必勝態,兩者只是相差一個石子,因此這裡先擱一擱。   ……   經過一些簡單的窮舉,儘管難以發現遞迴式或者通項公式,但是我們還是能感覺到一點非常重要的因素:一個狀態是必勝態還是必敗態,與剩下的石子堆之間是否相等有很大的關係。上面3種窮舉的結果如下:   必敗態:(0)、(k,k)   必勝態:(k)、(k,k+m)、(k,k,k)、(m,k,k) 在這裡插入圖片描述

  小白猜想不了這種規律的表達,但是被別人與計算機二進位制的異或運算聯絡了起來(這個人是誰,小白也不知道),對於異或運算⊕,也是和運算物件是否相等有關,小白的記憶方法是 異1同0

,也就是對於二進位制:

A B A⊕B
0 0 0⊕0 = 0 (同0)
0 1 0⊕1 = 1 (異1)
1 0 1⊕0 = 1 (異1)
1 1 1⊕1 = 0 (同0)

  兩個相異的數異或⊕就是1,兩個相同的數異或⊕就是0。

  使用異或運算,可以根據當前局面判斷全域性輸贏,判斷過程是:對於當前局面(a1,a2,a3……an),如果a1⊕a2⊕a3⊕……⊕an = 0,那麼當前局面就是必敗態,否則是必勝態。

  我們先代入窮舉出來的結果:   (0)、(k,k):異1同0,確實k⊕k = 0,為必敗態。   (k)、(k,k+m)、(k,k,k)、(m,k,k):異1同0,確實k⊕(k+m) ≠ 0,k⊕k⊕k ≠ 0,m⊕k⊕k ≠ 0,為必勝態 在這裡插入圖片描述

證明

  命題:尼姆博弈,如果當前局面(a1,a2……an)中,a1⊕a2⊕……⊕an = 0,那麼當前局面是必敗態。

  證明:明顯當a1=a2=……=an = 0的時候成立,(0)為必敗態。當(a1,a2……an)不全等於0的時候,有2種情況:   ① k = a1⊕a2⊕…⊕am⊕…⊕an ≠ 0,此時k的二進位制最高位為1,則一定存在am它的最高位也為1,因為異或運算保證了當運算結果為1的時候,某一方一定是1,於是ap = am ⊕ k < am【異1同0,兩個最高位的1異或得到0】,此時把am替換為ap,(a1⊕a2⊕…⊕ am ⊕…⊕an) => (a1⊕a2⊕…⊕ ap ⊕…⊕an) = (a1⊕a2⊕…⊕ am ⊕ k ⊕…⊕an)=(a1⊕a2⊕…⊕ am ⊕…⊕ank) = k ⊕ k = 0,這個過程證明了 當 a1⊕a2⊕……⊕an ≠ 0的時候,存在有效的取法ap = am ⊕ k使得取後的 結果a1⊕a2⊕……⊕an = 0。   ② k = a1⊕a2⊕…⊕am⊕…⊕an = 0,根據遊戲規則,必須從am中至少取走1個成為ap < am,可以用反證法得到a1⊕a2⊕…⊕ap⊕…⊕an ≠ 0,假設a1⊕a2⊕…⊕ap⊕…⊕an = 0,那麼(a1⊕a2⊕…⊕am⊕…⊕an) = (a1⊕a2⊕…⊕ap⊕…⊕an) = 0,兩邊依次同時異或aj(j從1遞增到n),就可以得到ap = am,與前提ap < am矛盾,假設不成立,這個過程證明了 當a1⊕a2⊕…⊕am⊕…⊕an = 0的時候,不存在有效的取法讓取後的結果a1⊕a2⊕…⊕am⊕…⊕an = 0。

  綜上所述,當a1⊕a2⊕……⊕an ≠ 0的時候,存在有效的取法,令到a1⊕a2⊕……⊕an ≠ 0,而a1⊕a2⊕……⊕an = 0不存在有效的取法使得a1⊕a2⊕……⊕an = 0【也就必勝態有辦法讓下一步為必敗態,必敗態下一步一定為必勝態】,隨著局面的變化,a1⊕a2⊕……⊕an = 0最終會變成(0,0,0……0)也就是(0)必敗態,所以如果當前局面(a1,a2……an)中,a1⊕a2⊕……⊕an = 0,那麼當前局面是必敗態。

  如果不夠明白,可以訪問 大神鏈