現在我們來研究乙個看上去似乎更為一般的遊戲:給定乙個有向無環圖和乙個起始頂點上的一枚棋子,兩名選手交替的將這枚棋子沿有向邊進行
移動,無法移動者判負。事實上,這個遊戲可以認為是所有
impartial comb
inatorial games
的抽象模型。也就是說,
任何乙個
icg都可以通過把每個局面看成乙個頂點,對每個局面和它的子局面連一條有向邊來抽象成這個
「有向圖遊戲
」。下面我們就在有向無環圖的頂點上
定義sprague-garundy
函式。首先定義
mex(
mini
malexcludant)
運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如
mex=3
、mex=0
、mex{}=0
。對於乙個給定的有向無環圖,定義關於圖的每個頂點的
sprague-garundy函式g
如下:g(x)=mex
。來看一下
sg函式的性質。首先,所有的
terminal position
所對應的頂點,也就是沒有出邊的頂點,其
sg值為
0,因為它的後繼集合是空集。然後對於乙個
g(x)=0
的頂點x
,它的所有後繼
y都滿足
g(y)!=0
。對於乙個
g(x)!=0
的頂點,必定存在乙個後繼y滿足
g(y)=0
。以上這三句話表明,頂點
x所代表的
postion
是p-position
當且僅當
g(x)=0
(跟p-positioin/n-position
的定義的那三句話是完全對應的)。我們通過計算有向無環圖的每個頂點的
sg值,就可以對每種局面找到必勝策略了。但
sg函式的用途遠沒有這樣簡單。如果將有向圖遊戲變複雜一點,比如說,有向圖上並不是只有一枚棋子,而是有
n枚棋子,每次可以任選一顆進行移動,這時,怎樣找到必勝策略呢?
讓我們再來考慮一下頂點的
sg值的意義。當
g(x)=k
時,表明對於任意乙個
0<=i,都存在
x的乙個後繼y滿足
g(y)=i
。也就是說,當某枚棋子的
sg值是
k時,我們可以把它變成
0、變成1、
……、變成
k-1,但絕對不能保持
k不變。不知道你能不能根據這個聯想到
nim遊戲,
nim遊戲的規則就是:每次
選擇一堆數量為
k的石子,可以把它變成
0、變成1、
……、變成
k-1,但絕對不能保持
k不變。這表明,如果將
n枚棋子所在的頂點的
sg值看作
n堆相應數量的石子,那麼這個
nim遊戲的每個必勝策略都對應於原來這
n枚棋子的必勝策略!對於n
個棋子,設它們對應的頂點的
sg值分別為
(a1,a2,...,an)
,再設局面
(a1,a2,...,an)
時的nim
遊戲的一種必勝策略是把
ai變成
k,那麼原遊戲的一種必勝策略就是把第
i枚棋子移動到乙個
sg值為
k的頂點。這聽上去有點過於神奇
——怎麼繞了一圈又回到
nim遊戲上了。
其實我們還是只要證明這種多棋子的有向圖遊戲的局面是
p-position
當且僅當所有棋子所在的位置的
sg函式的異或為
0。這個證明與上節的
bouton's theorem
幾乎是完全相同的,只需要適當的改幾個名詞就行了。
剛才,我為了使問題看上去更
容易一些
,認為n
枚棋子是在乙個有向圖上移動。但如果不是在乙個有向圖上,而是每個棋子在乙個有向圖上,每次可以任選乙個棋子(也就是任選乙個有向圖)進行移動,這樣也不會給結論帶來任何變化。
所以我們可以定義有向圖遊戲的和
(sum of graph games)
:設g1、g2
、……、gn
是n個有向圖遊戲,定義遊戲g是
g1、g2、
……、gn的和
(sum)
,遊戲g
的移動規則是:任選乙個子遊戲
gi並移動上面的棋子。
sprague-grundy theorem
就是:g(g)=g(g1)^g(g2)^...^g(gn)
。也就是說,遊戲的和的
sg函式值是它的所有子遊戲的
sg函式值的異或。
icg都可以抽象成乙個有向圖遊戲。所以
「sg函式」和
「遊戲的和
」的概念就不是侷限於有向圖遊戲。我們給每個
icg的每個
position
定義sg
值,也可以定義n個
icg的和。所以說當我們面對由
n個遊戲組合成的乙個遊戲時,只需對於每個遊戲找出求它的每個局面的
sg值的方法,就可以把這些
sg值全部看成
nim的石子堆,然後依照找
nim的必勝策略的方法來找這個遊戲的必勝策略了!
回到本文開頭的問題。有
n堆石子,每次可以從第
1堆石子裡取1顆、
2顆或3顆,可以從第
2堆石子裡取奇數顆,可以從第
3堆及以後石子裡取任意顆
……我們可以把它看作
3個子遊戲,第
1個子遊戲只有一堆石子,每次可以取1、
2、3顆,很容易看出
x顆石子的局面的
sg值是
x%4。第
2個子遊戲也是只有一堆石子,每次可以取奇數顆,經過簡單的畫圖可以知道這個遊戲有
x顆石子時的
sg值是
x%2。第
3個遊戲有
n-2堆石子,就是乙個
nim遊戲。對於原遊戲的每個局面,把三個子遊戲的
sg值異或一下就得到了整個遊戲的
sg值,然後就可以根據這個
sg值判斷是否有必勝策略以及做出決策了。其實看作
3個子遊戲還是保守了些,乾脆看作
n個子遊戲,其中第1、
2個子遊戲如上所述,第
3個及以後的子遊戲都是
「1堆石子,每次取幾顆都可以
」,稱為
「任取石子遊戲
」,這個超簡單的遊戲有
x顆石子的
sg值顯然就是
x。其實,
n堆石子的
nim遊戲本身不就是n個
「任取石子遊戲
」的和嗎?
博弈論講解(二)
尼姆博奕 nimm game 公平組合博弈 impartial combinatori games 理論知識 1 若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。2 乙個局面是勝態的充要條件是該局面進行某種決策後會成為必敗態。3 乙個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態 ...
博弈論講解(二)
尼姆博奕 nimm game 公平組合博弈 impartial combinatori games 理論知識 1 若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。2 乙個局面是勝態的充要條件是該局面進行某種決策後會成為必敗態。3 乙個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態 ...
人機博弈之(二) 棋盤表示
棋盤表示主要 的是使用什麼資料結構來表示棋盤上的資訊。一般來說與具體的棋類相關。通常,用來描述棋盤及其上棋子資訊的是乙個二維陣列。中國象棋可以用9x10個位元組的二維陣列來表示中國象棋的棋盤,陣列中每乙個位元組代表棋盤上的乙個交點,其值表明這個交點上放置的是乙個什麼棋子或是沒有棋子。但在中國象棋中,...