不平等博弈问题学习记录(一)(超实数篇)
前言
聽到博弈問題,第一個想到的想必是用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
- 如果當前狀態只有第一個玩家能進行操作,那么狀態為xxx(xxx為第一個玩家連續能走的步數-[后繼狀態中第二個玩家是否能走])
- 如果當前狀態只有第二個玩家能進行操作,那么狀態為?x-x?x(xxx為第二個玩家連續能走的步數-[后繼狀態中第一個玩家是否能走])
我們發現,這種定義的狀態對單局而言非常無腦
我們發現當狀態為000時,一定是先手必敗態
當狀態不等于000時,我們不能直接的根據狀態值判斷誰必勝(證明略)
多個后繼狀態(引入超實數輔助定義)
如果狀態的后繼不止一個怎么辦?
這是大部分題目里的情況,也是文章的重點
我們用超實數來概括所有的情況
定義超實數{X∣Y}\{X|Y\}{X∣Y}(本質上它是超實數,但是好理解一點可以將其當成運算),XXX是第一個玩家能執行操作的后繼狀態的集合,YYY是第二個玩家能執行操作的后繼狀態的集合(可以是空集,這個之后會討論),結果為當前的狀態
若X,YX,YX,Y都是有限集,那么{L∣R}={max(L)∣min(R)}\{L|R\}=\{max(L)|min(R)\}{L∣R}={max(L)∣min(R)}
對于一個狀態l∣r{l|r}l∣r,如果l<rl<rl<r那么{l∣r}\{l|r\}{l∣r}的結果:
若l、rl、rl、r之間有整數,{l∣r}=x\{l|r\}=x{l∣r}=x(l<x<rl < x < rl<x<r且xxx是所有滿足的數中離000最近的整數)
若l、rl、rl、r之間無整數,{l∣r}=x/y\{l|r\}=x/y{l∣r}=x/y(l<x/y<rl < x/y < rl<x/y<r且y=2k(k∈Z?)y=2^k(k\in\Z^*)y=2k(k∈Z?)且y是所有滿足條件的數中最小的數,x是在滿足前面的條件下的可取值中離000最近的整數
前面說到在{L∣R}\{L|R\}{L∣R}的運算中,LLL或RRR會有為空集的情況
空集可以用Φ\PhiΦ表示,不過一般也用"不寫任何東西"來表示,比如說{∣}=0\{|\}=0{∣}=0
事實上,空集可以當做無窮(如果是左邊是空集,那么可以視為是無窮小,如果右邊是空集,那么可以視為是無窮大)
總結
這里的內容已經是真·簡化版了
根據定義,L∣R{L|R}L∣R才是超實數,而定義這個結果,建立了博弈的實數定義與超實數的部分聯系
下圖為達利函數(即一個實數與超實數的對應關系)
這個東西本身就是超實數,為什么這樣你可以去論文里看超實數的定義
當然如果懶的看論文,那記住這些就好了,到后面的靈活運用才是最重要的
在下一篇文章中我會講述{l∣r}\{l|r\}{l∣r}中的特殊情況的結果,記錄(一)到這里就結束了
update by 2019.1.9:對文章進行了結構調整(開頭一段我進行了保留,算是對我一開始寫這篇博客時的感受的紀念吧)
總結
以上是生活随笔為你收集整理的不平等博弈问题学习记录(一)(超实数篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态开点线段树(多棵线段树)的内存分配与
- 下一篇: 不平等博弈问题学习记录(二)(对于超实数