博弈論入門

adsd45666發表於2024-08-24

博弈論入門

博弈論主要研究的是:在一個遊戲中,進行遊戲的多位玩家的策略。

公平組合遊戲

定義:

  • 遊戲有兩個人參加,輪流參加決策,雙方均知道遊戲的完整資訊;
  • 任意一名玩家在某一狀態可以做出的決策集合只與當前狀態有關,與遊戲者無關;
  • 遊戲中某一狀態不可能多次抵達,遊戲以玩家無法行動為結束,且遊戲一定會在有限步後以非平局結束。

\(Nim\) 遊戲

\(Nim\) 遊戲便是一個典型的公平組合遊戲。

\(n\) 堆石子,分別有 \(a_1,a_2,a_3,a_4...a_n\) 個石子,兩個玩家分別取走任意一堆的任意個石子,但不能不取。取走最後一個石子的人獲勝。

博弈圖與狀態

如果將每個狀態視作一個點,再將其與其後續狀態連邊則得到一個博弈狀態圖。

若將節點 \((i,j,k)\) 表示局面 \(i,j,k\) 時的狀態,則可以這樣表示博弈狀態圖:

定義 必勝狀態(後簡稱 \(N\) ) 為先手必勝的狀態,必敗狀態(後簡稱 \(P\) )為先手必敗的狀態。

易得以下三個結論:

  1. 沒有後繼狀態的狀態是 \(P\)
  2. 一個狀態是 \(N\) ,當且僅當存在至少一個 \(P\) 為它的後繼結點。
  3. 一個節點是 \(P\) ,當且僅當它的後繼結點都為 \(N\)

對於定理一,若遊戲進行不下去了,則此玩家輸掉遊戲。

對於定理二,如果該狀態至少有一個後繼狀態為 \(P\) ,則玩家可以透過操作到該 \(P\) 狀態,則對手一定是 \(P\) 狀態——對手一定失敗,自己就贏得了勝利。

對於定理三,如果不存在一個後繼結點為 \(P\) ,則無論如何操作,只能達到 \(N\) ,則對手一定是 \(N\) 狀態——對手一定勝利,則自己一定失敗。

\(Nim\)

讓我們再次回到 \(Nim\) 遊戲。

透過繪畫博弈圖,我們可以在 \(O(\prod_{i=1}^n a_i)\) 的時間裡求出該局面是否先手必贏。

但是,這樣時間複雜度實在太高。有沒有更好的方法呢?

定義 \(Nim\)\(=a_1 \oplus a_2 \oplus a_3 \oplus ... \oplus a_n\) 。0

當且僅當 \(Nim\) 和為零時,該狀態為必敗狀態,否則為必勝狀態。

證明

為什麼異或的結果會與勝負有關?

要解決這個問題,只需證下面三個定理:

  1. 沒有後繼狀態的狀態是 \(P\)
  2. 對於 \(a_1 \oplus a_2 \oplus ... \oplus a_n \ne 0\) 的局面,一定存在某種移動使 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\)
  3. 對於 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\) 的局面,一定不存在某種移動使 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\)

對於一,唯一無後繼結點的狀態為全0局面,此時 \(a_1 \oplus a_2 \oplus ... \oplus a_n = 0\)

對於二,假設 \(a_1 \oplus a_2 \oplus ... \oplus a_n = k \ne 0\) 。設我們將 \(a_i\) 改為 \(a_j\)\(a_j=a_i \oplus k\) 假設 \(k\) 的最高位為 \(d\)\(k \in [2^d,d^{d+1})\) 。根據定義,一定有奇數個 \(a_i\) 的二進位制第 \(d\) 位為1。滿足這個條件的 \(a_i\) 一定也滿足 \(a_j > a_i \oplus k\) ,所以這是一個合法的移動。

對於三,若要將 \(a_i\) 變為 \(a_j\) ,根據異或的運算規則可以得出 \(a_i=a_j\) ,顯然不是合法移動。

有向圖遊戲和 \(SG\) 函式

有向圖遊戲是一個經典的博弈遊戲——實際上,大部分公平組合遊戲都可以轉化為有向圖遊戲。

在一個有向無環圖上,只有一個起點,上面有個棋子,兩個玩家輪流沿著有向邊推動棋子,不能走的玩家判負。

定義 \(max\) 函式的值為不屬於集合 \(S\) 的最小非負整數,即:

\(mex(S)=min\{x\}(x \notin S ,x \in N)\)

例如 \(mex(\{0,2,4\})=1,mex(\{1,2\}=0)\)

對於狀態 \(x\) 和他的所有 \(k\) 個後續 \(y_1,y_2,...,y_k\) ,定義 \(SG\) 函式:

\(SG(x)=mex\{SG(y_1),SG(y_2),...,SG(y_k) \}\)

而對於由 \(n\) 個有向圖組成的有向圖遊戲組成的組合遊戲,設他們的起點分別為 \(s_1,s_2...s_n\) ,則有定理:當且僅當 \(SG(s_1) \oplus SG(s_2) \oplus...SG(s_n) \not = 0\) 時,這個遊戲是先手必勝的。同時,這也是一個組合遊戲的遊戲狀態 \(x\)\(SG\) 值。

這一定理被稱為 \(Sprague–Grundy\) 定理( \(Sprague–Grundy Theorem\) ),簡稱 \(SG\) 定理。

\(SG\) 函式的證明

使用數學歸納法。

假設對於遊戲狀態 \(x\) ,其當前節點 \(s_1^`,s_2^`,...s_n^`(對於任意i有s_i^`<s_ i)\) ,皆滿足 \(SG\) 定理,顯然當 \(SG(s_1)^`=SG(s_2)^`=...=SG(s_n)^`=0\) 時,該狀態能滿足 \(SG\) 定理。

只需證明對於遊戲狀態 \(x\) ,當其節點 \(s_1^`,s_2^`,...s_n^`\) 符合 \(SG\) 定理, \(SG\) 定理便成立。

其實可以看做一個 \(Nim\) 遊戲,後略。

\(SG\) 函式的應用

\(SG\) 定理適用於 任何公平的兩人遊戲 ,它常被用於決定遊戲的輸贏結果。

計算給定的狀態的 \(SG\) 值的步驟一般包括:

  • 獲取從此狀態所有可能的轉換;

  • 每個轉換都可以導致 一系列獨立的博弈(退化情況下只有一個)。計算每個獨立博弈的 \(SG\) 值並對它們進行 異或求和

  • 在為每個轉換計算了 \(SG\) 值之後,狀態的值是這些數字的 \(mex\)

  • 如果該值為零,則當前狀態為輸,否則為贏。

相關文章