博弈知識點整理
博弈滿足的條件:
玩家只有兩個人,輪流做出決策
遊戲的狀態集有限,保證遊戲在有限步後結束,這樣必然會產生不能操作者,其輸
對任何一種局面,勝負只決定於局面本身,而與輪到哪位選手無關
一、巴什博弈(Bash Game)
- 問題模型:
只有一堆n 個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m 個,最後取光者得勝。 - 解決思路:
當n=m+1 時,由於一次最多隻能取m 個,所以無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝,所以當一方面對的局勢是n 時,其面臨的是必敗的局勢。所以當n=(m+1)∗r+s ,(r 爲任意自然數,s≤m )時,如果先取者要拿走s 個物品,如果後取者拿走x(x≤m) 個,那麼先取者再拿走m+1−k 個,結果剩下(m+1)(r−1) 個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1) 的倍數,就能最後獲勝。 - 變形:
條件不變, 改爲最後去光的人輸。 - 解決思路:
結論:當(n−1)%(m+1)==0 時後手勝利。
二、尼姆博弈(Nim)
- 題目類型:
有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取一個,多者不限,最後取光者得勝。 - 解決思路:
用(a,b,c) 表示某種局勢,顯證(0,0,0) 是第一種奇異局勢,無論誰面對奇異局勢,都必然失敗。第二種奇異局勢是(0,n,n) ,只要與對手拿走一樣多的物品,最後都將導致(0,0,0) 。 根據(0,n,n) , 我們可一得到a^b^c == 0 爲必敗狀態。
證明a^b^c != 0爲必勝
拓展到n個數
三、約數博弈:
- 題目類型:
甲乙兩個人玩一個博弈遊戲。遊戲初始狀態包含1-n, 這n個正整數。
甲乙兩個人輪流玩這個遊戲。每輪遊戲中,遊戲者任意選擇一個還存在的數,然後刪掉它和它所有的約數。
誰最後沒有數可刪,誰就輸掉了。 - 解決思路:
先手有必勝策略。這個證明不是構造性的,也就是說沒有給出先手怎麼下才能贏。反證法:假設後手B有必勝策略,而先手A第一次取數1,B取了一個數x是必勝策略,然而A完全可以第一次取x(同時也必取了1)是必勝策略。故B必沒有必勝策略。 - 變形:
考慮一個新的規則“不準寫數字1”。如果加上這個新規則後先寫者有必勝策略,那麼這個策略對於原遊戲同樣適用(因爲1是所有數的約數,本來就不能寫);如果在新規則下後寫者必勝,則原遊戲中的先寫者寫下數字1,然後他就變成了新規則下的後寫者。於是不管怎麼樣,先寫者總是有必勝策略。
四、 斐波那契數列博弈(Fibonacci)
- 問題類型:
有一堆個數爲n的石子,遊戲雙方輪流取石子,滿足:
- 先手不能在第一次把所有的石子取完;
- 之後每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。 約定取走最後一個石子的人爲贏家。
- 解決思路:
當n爲Fibonacci數時,先手必敗。即存在先手的必敗態當且僅當石頭個數爲Fibonacci數。 - 證明:
用第二數學歸納法證明:
- 爲了方便,我們將
n 記爲f[i] 。當i=2 時,先手只能取1 顆,顯然必敗,結論成立。 - 假設當
i<=k 時,結論成立。 則當i=k+1 時,f[i]=f[k]+f[k−1] 。
則我們可以把這一堆石子看成兩堆,簡稱k 堆和k−1 堆。
- (一定可以看成兩堆,因爲假如先手第一次取的石子數大於或等於
f[k−1] ,則後手可以直接取完f[k] ,因爲f[k]<2∗f[k−1] )
- (一定可以看成兩堆,因爲假如先手第一次取的石子數大於或等於
- 對於
k−1 堆,由假設可知,不論先手怎樣取,後手總能取到最後一顆。下面我們分析一下後手最後取的石子數x的情況:
- 如果先手第一次取的石子數
y>=f[k−1]3 ,則這小堆所剩的石子數小於2y ,即後手可以直接取完,此時x=f[k−1]−y ,則x<=23∗f[k−1] 。 - 我們來比較一下
23∗f[k−1] 與12∗f[k] 的大小。即4∗f[k−1] 與3∗f[k] 的大小,對兩值作差後不難得出,後者大。 - 所以我們得到,
x<12∗f[k] 。即後手取完k−1 堆後,先手不能一下取完k 堆,所以遊戲規則沒有改變,則由假設可知,對於k 堆,後手仍能取到最後一顆,所以後手必勝。 即i=k+1 時,結論依然成立。
- 如果先手第一次取的石子數
- 那麼,當n不是Fibonacci數的時候,情況又是怎樣的呢?
- 這裏需要藉助“Zeckendorf定理”(齊肯多夫定理):任何正整數可以表示爲若干個不連續的Fibonacci數之和。
- 分解的時候,要取儘量大的Fibonacci數。
比如分解85:85在55和89之間,於是可以寫成85=55+30,然後繼續分解30,30在21和34之間,所以可以寫成30=21+9,依此類推,最後分解成85=55+21+8+1。
- 則我們可以把
n 寫成n=f[a1]+f[a2]+……+f[ap]。(a1>a2>……>ap) - 我們令先手先取完
f[ap] ,即最小的這一堆。由於各個f 之間不連續,則ap−1>ap+1 ,則有f[ap−1]>2∗f[ap] 。即後手只能取f[ap−1] 這一堆,且不能一次取完。 - 此時後手相當於面臨這個子游戲(只有
f[ap−1] 這一堆石子,且後手先取)的必敗態,即先手一定可以取到這一堆的最後一顆石子。 - 同理可知,對於以後的每一堆,先手都可以取到這一堆的最後一顆石子,從而獲得遊戲的勝利。
- 爲了方便,我們將
威佐夫博奕
五、公平組合博弈(Impartial Combinatori Games)
- 定義:
(1)兩人蔘與。
(2)遊戲局面的狀態集合是有限。
(3)對於同一個局面,兩個遊戲者的可操作集合完全相同
(4)遊戲者輪流進行遊戲。
(5)當無法進行操作時遊戲結束,此時不能進行操作的一方算輸。
(6)無論遊戲如何進行,總可以在有限步數之內結束. - 模型:給定一個有向無環圖和一個起始頂點上的一枚棋子,兩名選手交替的將這枚棋子沿有向邊進行移動,無法移動者判負。事實上,這個遊戲可以認爲是所有公平組合遊戲(Impartial Combinatori Games)的抽象模型。其實,任何一個ICG都可以通過把每個局勢看成一個頂點,對每個局勢和它的子局勢連一條有向邊來抽象成這個“有向圖遊戲”。
- 一個狀態是必敗狀態當且僅當他的所有後繼狀態都是必勝狀態
- 一個狀態是必勝狀態當且僅當他至少有一個後繼點是必敗狀態
- Sprague-Grudy定理 (SG函數):
- 令
N={0,1,2,3,...} 爲自然數的集合。Sprague-Grundy 函數給遊戲中的每個狀態分配了一個自然數。結點v的Grundy值等於沒有在v的後繼的Grundy值中出現的最小自然數. - 形式上:給定一個有限子集
S⊂N ,令mex S(最小排斥值)爲沒有出現在S中的最小自然數。定義mex(minimal excludant)運算,這是施加於一個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0 。 - 對於一個給定的有向無環圖,定義關於圖的每個頂點的Sprague-Garundy函數g如下:
g(x)=mex{g(y)|y是x的後繼} 。
- 令
- 性質:
- (1)所有的終結點所對應的頂點,其SG值爲
0 ,因爲它的後繼集合是空集——所有終結點是必敗點(P點)。 - (2)對於一個
g(x)=0 的頂點x ,它的所有後繼y 都滿足g(y)!=0 ——無論如何操作,從必敗點(P點)都只能進入必勝點(N點)//對手走完又只能把N留給我們。 - (3)對於一個
g(x)!=0 的頂點,必定存在一個後繼點y滿足g(y)=0 ——從任何必勝點(N點)操作,至少有一種方法可以進入必敗點(P點)//就是那種我們要走的方法。
- (1)所有的終結點所對應的頂點,其SG值爲