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ϕxN

    F(x)NxP

  • PN=V

sprague grundy定理

  • 每個遊戲狀態都會等價於某個數量的一堆的 Nim 遊戲

狀態描述

  • 描述「一疊石頭」的狀態
  • 描述「數疊石頭」的狀態

縮小問題

  • 「整個盤面」是由多個同樣玩法的「單一盤面」組成
  • 每次都是選一個「單一盤面」來「動一步」,其他不動

 

  • 先將問題縮小成「只看單一盤面」

描述「一疊石頭」的狀態

SG值

SG值─用一個數字代表一個狀態

  • 必敗狀態─SG值為0
  • 必勝狀態
    • 看看他所有能夠走一步到達的狀態的SG值集合
    • 找出「最小沒出現過的數字」,即為此狀態的SG值
    • SG(x)=mex({SG(T)|TF(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
    • TF(x)
    • T必敗(SG(T)==0)
  • mex(F(x))0
  • SG(x)0

情況2-2   x可走下一步,且x必敗

  • 對於所有 TF(x)TN (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)|AF(A)}{SG(A+B)|BF(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)的情況下,xSG(A)<SG(B)或xSG(B)<SG(A)必有一個會成立
  • 假設已知xSG(A)<SG(B)會成立,則必然存在一個SG(B')=xSG(A)
  • xSG(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

Made with Slides.com