1. 程式人生 > >博弈論整理

博弈論整理

就是 等於 同時 表示 lin 觀察 公式 計算 i+1

博弈論整理

1. \(\text{Nim}\) 遊戲

\(n\) 堆石子,每次可以從其中任意一堆石子中取出若幹塊石子(可以取完),不能不取。

最後無石子可取者為輸家。假設兩人都按最優情況走,問是否先手必勝。

為了計算這個問題,我們對這些狀態定義 \(\text{position}\),設 \(\text{N-position}\) 表示先手必勝狀態,\(\text{P-position}\) 表示先手必敗狀態

我們再定義某狀態的後繼狀態為這個狀態取走一些石子之後達到的新狀態

那麽顯然,\(\text{N-position}\) 的後繼狀態一定有一個是 \(\text{P-position}\)

,而 \(\text{P-position}\) 的後繼狀態全是 \(\text{N-position}\)

有了這兩種定義,我們再來觀察 \(\text{Nim}\) 遊戲:顯然,\(0\) 枚石子是一個 \(\text{P-position}\),接著,\(1,2,\dots,\inf\) 枚石子都是 \(\text{N-position}\)

2. \(\text{SG}\) 函數

\(SG(x)\) 表示 \(x\) 個石子的函數值,當且僅當 \(x\) 個石子對應的狀態為必敗態 \((P)\)\(SG(x)=0\)

也就是說,當前狀態為必勝態時,\(SG(x)>0\)

\(\text{SG}\)

函數的公式:\(SG(x)=mex \{SG(S)\}\)

其中 \(mex\) 表示一個集合中沒有出現的最小自然數,\(S\) 表示 \(x\) 狀態的所有後繼狀態的集合

\(\text{SG}\) 函數的作用是為了應對多堆石子的情況:

一堆石子的 \(\text{SG}\) 值為每堆石子的 \(\text{SG}\) 的異或和

證明如下:

局面為 \(S>0\) 時,設 \(S={a_1} \oplus {a_2} \oplus \dots \oplus {a_n}=d\),假設 \(d\) 的二進制最高位為 \(k\),那麽一定存在至少一個 \(a_i\)\(k\) 位為 \(1\)

,顯然 \(a_i \oplus d<a_i\)(因為異或後第 \(k\) 位變為 \(0\)\(a_i\) 減去 \(2^k\),而其它位最多加上 \(2^k-1\))。那麽只要將 \(a_i\) 改變為 \(a_i \oplus d\),異或和變為 \(d \oplus a_1\oplus \dots \oplus a_n=d \oplus d=0\)。即 \(S>0\) 時一定可以走到一個 \(T=0\) 的狀態。

當遊戲為終止局面 \(S=0\) 時,假設可以將 \(a_i\) 變為 \(a_i'\),使 \(T\)\(0\)。由於 \(S={a_1} \oplus {a_2} \oplus \dots \oplus {a_n}=0\),即 \(a_i=a_1\oplus \dots \oplus a_{i-1} \oplus a_{i+1} \oplus \dots \oplus a_n\)。同理得 \(a_i'=a_i=a_1\oplus \dots \oplus a_{i-1} \oplus a_{i+1} \oplus \dots \oplus a_n\)。這樣 \(a_i=a_i'\),顯然矛盾,所以一個 \(S=0\) 的狀態只能到達 \(T>0\)

這樣就可以遞推求出 \(\text{SG}\) 函數的值,並且快速求解一些問題了

3. \(\text{Anti-SG}\) 問題與 \(\text{SJ}\) 定理

所謂 \(\text{Anti-SG}\) 問題,指的是最後操作的人失敗的問題,普通的 \(\text{SG}\) 函數無法應對這樣的問題,因為無法確定 \(SG(0)\) 的函數值

我們繼續考慮 \(Nim\) 遊戲,唯一的區別就是取走最後一個石子的人失敗

如果假定 \(SG(0)=0\),那麽 \(SG(1)=mex \{ SG(0)\}\) 應該為 \(1\),然而實際上 \(SG(1)\) 是必敗態,應該為 \(0\)

如果假定 \(SG(0)=1\),那麽兩堆石子,每一堆均為 \(0\) 個,此時應該是先手必勝,然而 \(SG()= 1 \oplus 1 =0\),矛盾

這時候就要用上 \(\text{SJ}\) 定理了

若把 \(\text{SG}\) 遊戲中的空狀態定義為必勝狀態,那麽狀態是先手必勝當且僅當下述條件同時成立或同時不成立:

  1. \(SG(S)=0\)

  2. \(?x∈S,SG(x)≤1\)

其中,\(SG(S)\) 是狀態的 \(\text{SG}\) 值,\(SG(x)\) 是各子問題的 \(\text{SG}\) 值。

證明如下 \((by \ \ rqy)\)

首先,終止狀態由於滿足兩個條件,所以必勝。

其次,證明必敗態的後繼全是必勝態:

  1. 若滿足條件1而不滿足2,那麽 \(\text{SG}\) 值大於 \(1\) 的一定不止一個(因為異或中小於等於 \(1\) 的之會影響最後一位,所以前面所有位必須有至少兩個數,即至少有兩個數大於 \(1\)),那麽,進行一步後 \(\text{SG}\) 值一定非零,且還是有大於 \(1\) 的,即兩條件都不滿足。

  2. 若滿足條件2而不滿足條件1,可以發現現在一定只有奇數個 \(1\) 和若幹 \(0\)。那麽現在有兩種可能:

  (1)將一個 \(1\) 變成 \(0\),或將一個 \(0\) 變成 \(1\)(註意,\(\text{SG}\) 值可以變大,但不會不變),那麽條件1得到滿足,且條件2仍滿足,即為必勝態;

  (2)將一個數變得大於 \(1\)。此時可發現 \(\text{SG}\) 值異或和必不為 \(0\),所以兩條件都不滿足,為必勝態。

最後,證明必勝態至少有一個後繼是必敗態:

  1. 若兩條件都滿足,那麽必有偶數個 \(1\) 和若幹 \(0\),此時只需要將一個 \(1\) 變成 \(0\),就會使條件1不滿足。

  2. 若兩條件都不滿足,那麽:

  (1)若只有一個數大於 \(1\),那麽將其變為 \(0\) 和變為 \(1\) 都會滿足條件2,且必有一個選擇使 \(\text{SG}\) 值不為 \(0\),即為必敗態;

  (2)否則,後繼必不滿足條件2,此時類似於 \(\text{SG}\) 定理,必定能使 \(\text{SG}\) 值變為 \(0\),即為必敗態。

證畢。

博弈論整理