博弈论SG函数
SG函數定義:SG(x) = mes(S),mes為集合運算,表示集合中沒出現的最小非負整數。
其中S為SG(x)的所有后繼狀態的SG函數值的集合,這是一個遞推的運算式子,可知終態SG(t) = 0,因為終態t的后繼狀態是一個空集。
公平的組合游戲,如取石子游戲,如果將狀態和后繼狀態抽象出來建圖,構成的是一個DAG圖。
什么是博弈的狀態:如下一盤棋時,當前的棋局就是一個狀態,你的決策:移動哪個棋子,會使得棋局進入另外一個狀態。取石子游戲中,當前剩余的石子數就是一個狀態,當你拿掉某一堆石子中的某幾顆石子后,就會進入下一個狀態,下一個狀態稱為當前狀態的后繼狀態。可知組合游戲的狀態圖一定是一個DAG圖,無論如何博弈進行,游戲最終會走向一個終態,而終態沒有后繼狀態。
必敗態和必勝態概念:
在組合游戲博弈中存在必敗態和必勝態的這樣的概念,對于游戲的所有可能狀態,每一個狀態都是必敗態或必勝態。只要采取最優的決策,處于必勝態的人可以永遠處于必勝態。
必敗態:當前狀態的所有后繼狀態都是必勝態,則當前狀態是必敗狀態。
必勝態:當前狀態中有一個后繼狀態是必敗態,則當前狀態是必勝狀態。
假設游戲的兩人都絕頂聰明,游戲過程中狀態的變化就是:必勝態 -> 必敗態 -> 必勝態…,交替出現的場景(不夠聰明的情況可能會連續出現必勝態)。
顯然終態是必敗態,可以采用逆推的方式推出其他的狀態是必敗態還是必勝態,以判斷當前狀態是先手贏還是后手贏。(競賽中可以通過打表來求得當前狀態的性質)
單個游戲很容易求得必敗態和必勝態,多個游戲呢?首先介紹一下游戲和(多個游戲組合的游戲)
什么是多個游戲組合的游戲?例如取石子游戲,如果只有一堆石子,就是單個的游戲,如果有n堆石子,就是多個的游戲和(每一堆都是一個游戲)。
這里要用到SG函數了,來看下SG函數的作用:
SG函數的作用:SG函數取值為0當且僅當當前狀態為必敗態。終態SG函數值顯然是0,其它狀態可以用遞推的方式求出,對于每一個狀態枚舉所有的后繼狀態。
SG函數要借助SG定理才能發揮它的作用,對于單個組合游戲,可以直接求得當前狀態是必勝態還是必敗態,而對于多個組合游戲組合的組合游戲,有SG定理:游戲和的SG函數值等于各子游戲SG函數的NIM和(NIM和表示異或和)。
例如有3堆石子的取石子游戲:當前狀態x,y,z 的sg函數值為 sg[x] ^ sg[y] ^ sg[z]
總結
- 上一篇: 近距离无线通信技术对比
- 下一篇: LM算法学习(一)