博弈論總結(只會打表,永不證明)(博弈論)


概述

博弈論的研究對象是一類游戲,有特定的模型。

基礎模型——先手必勝還是后手必勝?

好像有個專門的名詞叫做Impartial Combinatorial Games(簡稱ICG)

大概的定義如下:

整個游戲可以抽象成一個DAG;

每個點都代表游戲過程中的某個決策狀態(特殊的,出度為0的點是游戲的終止狀態);

每條邊都表示可以從某個狀態,經過直接的一次操作,轉移到另一個狀態。

有兩個玩家,從指定的某個狀態開始,依次執行操作,誰先因為當前到達了終止狀態而無法操作的人輸。

因為是DAG,所以一定會轉移到終止狀態的。

問題就是,從某狀態開始,先手必勝還是后手必勝?


舉個栗子——Nim游戲的一個變種

有一堆\(n\)個石子,每次可以取\(1-k\)個,當前無法操作的人輸,問是否先手存在必勝策略?

對於這種問題,對於以每個狀態為起點的情況,我們都會唯一確定是先手必勝還是后手必勝。

這應該是很好想,幾乎不用證明的。

可以對每個點標記兩種狀態N和P,分別表示先手必勝和后手必勝

首先根據定義,終狀態為P

然后,所有能直接到達終狀態的狀態就為N了

進一步推廣,如果某點的出邊指向的點的集合中,有至少一個點為P,那么這個點為N;否則就為P。

比如對於上面提到的栗子

對每個狀態都標號為當前剩余石子數

那么\(0\)是P,\(1-k\)就都是N,\(k+1\)是P。。。。。。

接着就可以推出當且僅當\((k+1)\mid a\)時a是P。

對於這種基礎的問題,枚舉狀態建好圖后DP或者記憶化搜索就可以快速解決了。

模型升級——SG函數與SG定理

博弈論所涉及到的更多的游戲,會把若干ICG拼湊在一起,成為一個規模更大的模型。

比如說上面那個Nim游戲變種的升級版——

\(n\)堆石子,每堆\(a_i\)個,每次可以取\(1-k\)個,當前無法操作的人輸,問是否先手存在必勝策略?

這時候,如果仍沿用上面的方法求解,我們會發現狀態維度很大,時間和空間根本承受不了。

這里介紹SG函數與SG定理,詳細證明就算了,我太弱了。

strangedbly巨佬的博客給出了十分易懂的證明,個人力薦。

定義運算\(mex(S)\)(S是一個自然數集合),結果為S中未出現的最小自然數。

定義\(SG(i)\)(i是一個狀態,在圖中是一個點)為對所有\(i\)可直達狀態(在圖中與i通過有向邊連接的所有點)的SG函數值取mex的值,即。

\[SG(i)=mex({j\mid SG(j),(i,j)\in G}) \]

定義SG定理:點\(i\)為P當且僅當\(SG(i)=0\)

若干ICG(可以不相同)組合在一起的游戲,把每個游戲的SG值異或起來,不為0則先手必勝。


接着對例子分析一下。

可以發現,對於單堆石子來說,剩零個時\(SG\)值為\(0\),剩一個時為\(1\)。。。剩\(k\)個為\(k\),剩\(k+1\)個時因為不能轉移到零個,\(SG\)值又變成了\(0\)。。。。。。

這可以說明SG函數對於判斷狀態為N還是P是非常有效的。

那么對於若干堆石子(即整個升級版游戲)來說,勝負又會如何呢?只要把這若干個\(SG\)值都異或起來就完全OK啦。

實現

簡單的ICG可直接通過遞推、DP等方法推導出所有點的狀態。當然,如果找到規律,可以直接\(O(1)\)判斷都說不好。

多個ICG的組合游戲,則一定是離不開SG函數的。

但假如點非常多,或者每個點的后繼確定起來非常麻煩的時候,DP是不能解決問題的。

那怎么辦?那肯定是有規律啊!一眼看不出規律怎么辦?可別忘了打表啊!

當然,打表也是有技巧的。至於如何如何,蒟蒻也說不出什么門道來,還是多刷題為上上策。

題目


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM