1. 程式人生 > >不平等博弈問題學習記錄(一)

不平等博弈問題學習記錄(一)

聽到博弈問題,第一個想到的想必是用SG函式做的博弈題,就比如Nim遊戲

Nim遊戲:有N堆石子,每次選一堆石子,拿走若干石子(不能不取),先不能取的人輸

定義個SG函式
對於SG函式,大致就記錄兩個東西吧

定義SG函式g(x)=mex{ g(y) | y是x的後繼 }
遊戲的和的SG函式值是它的所有子游戲的SG函式值的異或

SG函式能解決很多問題,但是它並不是萬能的(我今天才知道,逃~)他只適用於兩個玩家家能進行的操作完全相同的情況(平等博弈)
今天上午做清華集訓2017day3T2,一開始以為SG就可以做,後來因為T1、T3比較好打,所以就沒打T2,下午講題的時候聽講題的時候才知道這是不平等博弈題,所以不能使用SG函式
那麼怎麼做呢,聽高三同學講完了一遍,我彷彿還是在雲裡霧裡,於是去找了2009的集訓隊論文方展鵬《淺談如何解決不平等博弈問題》

感覺這篇論文還是講的挺好的,但是呢,為了讓我更好的記憶,我就開始寫這一系列的學習記錄了
不平等博弈問題(Partizan Games)有一個很好的解決方法是用 超實數(Surreal Number,高屆的同學戲稱其為super real number),具體的用處會在後面寫到
話不多說,對於不平等博弈問題,先定義狀態,當然這裡先討論只有每個玩家操作後只有一種後繼狀態的情況

如果沒有人能操作,那麼狀態為0
如果當前狀態到結束狀態只有第一個玩家能進行操作,那麼狀態為x(x為第一個玩家能再走的步數)
如果當前狀態到結束狀態只有第二個玩家能進行操作,那麼狀態為x(x為第二個玩家能再走的步數)
如果當前狀態到結束狀態兩個玩家都能進行操作,那麼狀態為x-y(x為第一個玩家能再走的步數,y為第二個玩家能再走的步數)(為什麼能這麼定義呢,我也不會證)

上面定義較為簡單,那麼,如果某個玩家的後繼不止一個怎麼辦,這個時候就要用一個運算來概括所有的情況了
類似與SG函式,定義一個運算{X|Y},X是第一個玩家能執行操作的後繼狀態的集合,Y是第二個玩家能執行操作的後繼狀態的集合(可以是空集,這個之後會討論),結果為當前的狀態
若X,Y都是有限集,那麼{L|R}={max(L)|min(R)}
對於一個狀態{l|r},如果l < r那麼{l,r}的結果:
若l、r之間有整數,{l|r}=x(l < x < r且x是所有滿足的數中離0最近的整數)
若l、r之間無整數,{l|r}=x/y(l < x/y < r且y=2^k(k是正整數)且y是所有滿足條件的數中最小的數,x是在滿足前面的條件下的可取值中離0最近的整數)
這有點麻煩,先不用想為什麼這麼定義,靈活運用才是最重要的
在下一篇文章中我會講述{l|r}中的特殊情況的運算結果,記錄(一)到這裡就結束了