Combinatorial Game Theory
NCTU PCCA
SouthRa 2017
經典例子-Nim game
OOO
OOOO
OOOOO
必勝/必敗
- 全部XOR起來
- 如果是0就必敗,否則必勝
- 必勝時的走法:把它變XOR=0的狀態
!!?
Combinatorial game
- 玩家有兩個
- 輪流動一步,一定要動,不能不動
- 不能動就輸了
- 同樣的盤面下,不管輪到誰,能做的動作都一樣
- 已經出現過的盤面不會再出現
Game tree
Game tree
Game tree
Game tree
Game tree
性質整理
- 定義 F(x) 為所有頂點 x 連出的邊指到的頂點所成的集合
- 定義必敗狀態為P
- 定義必勝狀態為N
-
F(x)∩P≠ϕ⇒x∈N
F(x)⊆N⇒x∈P
-
P∪N=V
sprague grundy定理
- 每個遊戲狀態都會等價於某個數量的一堆的 Nim 遊戲
狀態描述
- 描述「一疊石頭」的狀態
- 描述「數疊石頭」的狀態
縮小問題
- 「整個盤面」是由多個同樣玩法的「單一盤面」組成
- 每次都是選一個「單一盤面」來「動一步」,其他不動
- 先將問題縮小成「只看單一盤面」
描述「一疊石頭」的狀態
SG值
SG值─用一個數字代表一個狀態
- 必敗狀態─SG值為0
- 必勝狀態
- 看看他所有能夠走一步到達的狀態的SG值集合
- 找出「最小沒出現過的數字」,即為此狀態的SG值
- SG(x)=mex({SG(T)|T∈F(x)})
S={0,1,2,5,6,7} => mex(S)=3
SG定理證明
- 先來證明SG(x)==0若且唯若x是必敗狀態
情況1 x是遊戲結束狀態(必敗)
- F(x)=ϕ
- SG(x)=mex(ϕ)=0
- 得證#
情況2 x並非遊戲結束狀態
- 情況2-1 x必勝
- 情況2-2 x必敗
情況2-1 x可走下一步,且x必勝
- x必勝若且唯若存在一個T
- T∈F(x)
- T必敗(SG(T)==0)
- mex(F(x))≠0
- SG(x)≠0
情況2-2 x可走下一步,且x必敗
- 對於所有 T∈F(x),T∈N (SG(T)≠0)
- mex(F(x))=0
- SG(x)=0
SG值不是0的時候,為什麼要讓他等於mex(SG(F(x)))呢?
- 這個設定可以使得SG(A+B)=SG(A)⊕SG(B)
- 待會你就知道 (?)
Game tree
0
0
0
Game tree
0
0
0
1
1
Game tree
0
0
0
1
1
2
Game tree
0
0
0
1
1
2
0
Game tree
0
0
0
1
1
2
0
1
舉例
- 一般NIM規則
- 只可以一次拿走2或3顆的
一般NIM GAME規則
OOOOOO
OOOOO
OOOO
OOO
OO
O
一般NIM GAME規則
OOOOOO
OOOOO
OOOO
OOO
OO
O
5
4
3
2
1
0
6
一次只能拿走2或3顆石頭
OOOOOO
OOOO
OOO
OO
O
O
一次只能拿走2或3顆石頭
OOOOOO
OOOO
OOO
OO
O
O
0
0
0
0
1
1
2
0
為什麼SG值就是他下一步的所有SG值中最小沒出現過的數?
- 因為某狀態「所有」能夠變成的狀態,就是SG值小於該狀態的「所有狀態」
- 就跟一疊NIM石頭一樣
描述「數疊石頭」的狀態
SG值的XOR
為什麼是xor?
回憶一下
combinatorial game的定義
- 必勝狀態一定可以走到必敗狀態
- 必敗狀態一定不能走到必敗狀態
- XOR等於0的一堆數,改變其中一個數的值之後一定無法維持XOR等於0
- XOR不等於0的一堆數,一定可以改變其中一個數的值使得XOR等於0
嚴謹證明
- SG(A+B)=SG(A)⊕SG(B)
情況1 當 F(A)=ϕ 且 F(B)=ϕ
- mex(SG(F(A)+F(B)))=0
- SG(A+B)=0
- SG(A)⊕SG(B)=0
- => SG(A+B)=SG(A)⊕SG(B)
情況2 當 F(A)≠ϕ 或 F(B)≠ϕ
- 令W為A動了一步後的狀態SG值和B動了一步的狀態SG值的集合
- W={SG(A′+B)|A′∈F(A)}∪{SG(A+B′)|B′∈F(B)}
- 接著證明mex(W)=SG(A)⊕SG(B)
情況2 當 F(A)≠ϕ 或 F(B)≠ϕ
- 要證明mex(W)=SG(A)⊕SG(B)
- 先證明(SG(A)⊕SG(B))∉W
- 因為不管是動A還是動B,不管是SG(A')⊕SG(B)還是SG(A)⊕SG(B'),都不可能等於SG(A)⊕SG(B)
- 得證
情況2 當 F(A)≠ϕ 或 F(B)≠ϕ
- 要證明mex(W)=SG(A)⊕SG(B)
- 證明所有小於SG(A)⊕SG(B)的數x都∈W
- 已知在x<SG(A)⊕SG(B)的情況下,x⊕SG(A)<SG(B)或x⊕SG(B)<SG(A)必有一個會成立
- 假設已知x⊕SG(A)<SG(B)會成立,則必然存在一個SG(B')=x⊕SG(A)
- x⊕SG(A)⊕SG(A)=x => SG(B')⊕SG(A)=x
- x=SG(B')⊕SG(A)=SG(B'+A)∈W
結論
- 遊戲結束時的SG值是0
- 否則遊戲的SG值是所有個別盤面SG值的XOR
範例
- 一般的NIM GAME
- 規則為每次操作都是平分一堆的NIM GAME
一般NIM GAME
- OOO
- OOOO
- OOOOO
一般NIM GAME
- OOO
- OOOO
- OOOOO
3
4
5
3^4^5=2
規則:操作為平分一堆
OOOOOO
OOO OOO
OO OO OO
O O O O O O
O O O
O O
規則:操作為平分一堆
OOOOOO
OOO OOO
OO OO OO
O O O O O O
O O O
O O
0
0
0
規則:操作為平分一堆
OOOOOO
OOO OOO
OO OO OO
O O O O O O
O O O
O O
0
0
0
1
1
1
1
1
規則:操作為平分一堆
OOOOOO
OOO OOO
OO OO OO
O O O O O O
O O O
O O
0
0
0
1
1
1
1
1
1
0
規則:操作為平分一堆
OOOOOO
OOO OOO
OO OO OO
O O O O O O
O O O
O O
0
0
0
1
1
1
1
1
1
0
2
Thank you
By SouthRa 2017
Combinatorial game theory
By ko19951231
Combinatorial game theory
- 1,315