博弈論中的Nim博弈


瞎扯

 \(orzorz\) \(cdx\) 聚聚給我們講了博弈論。我要沒學上了,祝各位新年快樂。現在讓我講課我都不知道講什么,我會的東西大家都會,太菜了太菜了。
 
 馬上就要回去上文化課了,今明還是收下尾再稍微開一波多項式吧,不然萬一文化課上自閉了被錘自閉了站教室外面沒課聽了還能有事情做……所以把這兩天學到的東西稍微整理一下,以后再慢慢完善好了。
 
 發現博弈論的題目還是 \(Nim\) 博弈和其他的比較多。這次就先簡單整理一些 \(Nim\) 博弈的類型和東西吧,主要是以某博客里搜來的一串題目為引導。因為是整理,所以就寫一些自己的理解,不會說的很詳細了……
 

Bash 博弈

 一類經典而基礎的博弈問題。
 
 兩個人玩游戲,有一堆石子,每次僅從一堆中取且可以取 \(1 ~ m\) 個,無子可取者為負,問誰有必勝策略。
 
 引入了 \(N\) (先手必勝)狀態和 \(P\) (先手必敗)狀態的概念,在博弈論問題中,顯然最終狀態是一個讓當前狀態先手無路可走的 \(P\) 狀態。這樣根據定義,能轉移到此狀態的狀態就是 \(N\) 狀態,常用這樣的逆推方法,推到起手為止。
 
 而經過觀察與推算,這樣的問題常常是存在可總結的規律的,經過這樣的總結往往可以使時空復雜度大幅度降低以致到常數級別。
 
 例如對於本題,可以從簡單的狀態入手,當石子數為 \(0\) 時為一個 \(P\) 狀態,則石子數為 \([1, m]\) 時是 \(N\) 狀態,因為總可以一次拿完。而石子數為 \(m + 1\) 時,先手無論如何操作,后手總可以拿完剩下的石子,故是一個 \(P\) 狀態。繼續向前推發現,當石子數為 \(m + 1\) 的倍數時,與上述情況是相同的,先手必敗;否則,先手總可以讓后手處於上述狀態,后手必敗。
 

Bash 博弈 II

 一類經典而基礎的博弈問題的加強版。
 
 兩個人玩游戲,有一堆石子,事先給定一個數集 \(S\),每次僅從一堆中取且可以取的石子的數量 \(x \in S\),無子可取者為負,問誰有必勝策略。
 
 顯然可以用與前面一個問題相同的方法找規律求解,但有可能十分麻煩。如何抽象地讓計算機去做這件事情或者打出表找規律呢?可以引入一個函數 \(SG(u) = mex\{\ SG(v)\ \}\),其中 \(u\) 為當前局面,\(v\) 表示后繼局面,以方便表示狀態。
 

SG 函數

 上面提到了 \(SG\) 函數,這是博弈論中重要的概念和工具。
 
 \(SG\) 函數主要利用了其定義以判斷當前的勝負狀態。往往最終局面的 \(SG\) 函數值被設為 \(0\),且當 \(SG\) 函數值為 \(0\) 時當前局面被認為是 \(P\) 狀態,反之是一個 \(N\) 狀態。這個結論是巧妙地和定義結合在一起的,因為若 \(\forall SG(v) \ne 0\),則 \(SG(u) = 0\),對應了 \(P\) 狀態的后繼狀態都是 \(N\) 狀態;若 \(\exists SG(v) = 0\),則 \(SG(u) \ne 0\),對應了一個 \(N\) 狀態總有一個后繼狀態是 \(P\) 狀態。
 
 \(SG\) 函數的用途很廣,而且有着十分神奇的性質,后面會提到。
 

DAG 與博弈

 這一類問題中,\(SG\) 函數的用法顯而易見,也有很多很多問題可以轉化為此類問題。
 
 在這一類問題中,前驅與后繼狀態清晰明了,而且往往沒有顯然的規律,以至於出題人會給你充足的時間讓你把各種起手的狀態處理一遍。這時就要用到 \(SG\) 函數了,而且很顯然是讓你把起手時的 \(SG\) 函數值推出來存下來 …… 於是就可以將其他的一些問題也對應到 \(DAG\) 上,然后直接通過 \(SG\) 函數之間的轉移而解決幾乎全部的問題。
 

Nim 博弈

 又是一類經典而基礎的博弈問題的最初版本。
 
 兩個人玩游戲,有 \(n\) 堆石子,每次操作可以選一堆石子xjb拿,最少拿一顆,無子可取者為負。
 
 介紹一個 \(SG\) 定理:游戲的和的 \(SG\) 值是各個子游戲的 \(SG\) 值的 \(xor\)
 
 知道了以上結論,想到 \(Nim\) 游戲實際上可以分為 \(n\)\(Bash\) 游戲,而 \(Bash\) 游戲若可以無限取子,則以當前局面剩余石子數為狀態,\(SG(x) = x\)。所以這個題目的答案即為各個堆石子數的異或值,若值為 \(0\),先手必敗,否則先手總有方案使得下一局面異或值為 \(0\),后手必敗。
 
 不僅僅是 \(Nim\) 游戲,\(SG\) 定理是可以推而廣之的。
 

對稱博弈

 一類博弈問題的套路 (好像不屬於 Nim 博弈)
 
 這類模型可以直接寫出結論:若先手有着在第一步就取勝的方法,則先手勝;否則后手可以通過一定的操作將局面分成無法互相影響的相同的兩部分,這樣,先手做什么操作,后手就在另一部分上做相同的操作,所以最后一步一定是后手做的,此時先手必敗。
 

階梯博弈

 \(Nim\) 博弈的直接變種一,有着類似的特性且廣泛出現 (以下三種博弈的相關證明)
 
 對於這一類模型,通常情況下只有兩兩之間的狀態可以決定局面的勝負。我們可以將每兩堆石子綁定在一起,若石子堆數為奇數,則將 \(0\) 位置與第 \(1\) 堆綁定在一起。而石子數可以是兩堆間距離,可以是能夠轉移的數量等。
 
 把所有奇數階梯看成 \(N\) 堆石子做 \(Nim\)。把石子從奇數堆移動到偶數堆可以理解為拿走石子,就相當於幾個奇數堆的石子在做 \(Nim\)。存在必勝態的一方只要一直保持奇數堆不變,就可以跟着另一方把偶數堆的石子最終移動到 \(0\),所以偶數堆的移動不會影響奇數堆做 \(Nim\) 博弈的過程。
 

反 Nim 博弈

 \(Anti-Nim\)\(Nim\) 博弈的直接變種二,已經是有些分析難度的模型了。
 
 兩個人玩游戲,有 \(n\) 堆石子,每次操作可以選一堆石子最少拿一顆,最后取子者為負。
 
 一個狀態為必勝態,當且僅當所有堆的石子個數為 \(1\),且 \(xor\_sum = 0\);或至少有一堆的石子個數大於 \(1\),且 \(xor\_sum \ne 0\)
 
 當所有堆石子數均為 \(1\) 時,勝負態與奇偶數相關;當僅有一堆石子數不為 \(1\) 時,先手總存在將其轉化為前一種情況的必勝態的方案;當有多堆石子數不為 \(1\) 時,可以分類討論以證明。
 

Moore's Nimk

 \(Nim\) 博弈的直接變種三,變得更麻煩起來了。
 
 兩個人玩游戲,有 \(n\) 堆石子,每次操作可以選不超過 \(k\) 堆石子取任意多個,最少拿一顆,無子可取者為負。
 
 把 \(n\) 堆石子的石子數用二進制表示,統計每個二進制位上 \(1\) 的個數,若每一位上 \(1\) 的個數 \(mod\ (k+1)\) 全部為 \(0\),則必敗,否則必勝,可以如下證明。
 
 全為 \(0\) 的局面是必敗態。
 
 在某一次移動中,至少有一堆被改變,也就是說至少有一個二進制位被改變。由於最多只能改變 \(k\) 堆石子,所以對於任何一個二進制位,\(1\) 的個數至多改變 \(k\)。而若原 \(i\)\(1\) 的總數為 \(k+1\) 的整數倍,所以改變之后必然不是 \(k+1\) 的整數倍。故在 \(P\) 狀態下一次操作的結果必然是 \(N\) 狀態。
 
 任何 \(N\) 狀態,總能使其變成 \(P\) 狀態,即總有一種方法讓所有二進制位上的 \(1\) 的數量都恢復到 \(k+1\) 的整數倍。
 

樹上博弈

 又是 \(Nim\) 的變種,不過已經看不太出來了呢。
 
 一棵樹,有一個點作為樹的根節點。游戲者輪流從樹中刪去邊,刪去一條邊后,不與根節點相連的部分將被移走,誰無法移動誰輸。
 
 葉子節點的 \(SG\) 值為 \(0\),中間節點的 \(SG\) 值為它的所有子節點的 \(SG\) 值加\(1\) 后的異或和。
 

圖上博弈

 和樹上博弈類似的東西,只是多了一點技巧而已。
 
 一個無向聯通圖,有一個點作為圖的根節點。游戲者輪流從圖中刪去邊,刪去一條邊后,不與根節點相連的部分將被移走,誰無法移動誰輸。
 
 對於這個模型,有一個著名的 \(Fusion Principle\) 定理。可以對無向圖做如下改動:將圖中的任意一個偶環縮成一個新點,任意一個奇環縮成一個新點加一個新邊,所有連到原先環上的邊全部改為與新點相連。這樣的改動不會影響圖的 \(SG\) 值。
 
 
 就先這么多吧……有沒有 \(dalao\) 補充啊 \(orz\),后排膜一下 \(Attack\) 大爺 \(orz\)
 
 —— 我知道有些人是愛我的,但我好像缺乏愛人的能力。  《人間失格》


免責聲明!

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



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