1. 程式人生 > >博弈論:尋找先手必勝策略——Grundy值

博弈論:尋找先手必勝策略——Grundy值

ble num 百度 任務 否則 str 讓我 problem 人工

選修了人工智能課程,老師布置了調研任務:Grundy,開始看了一些資料並沒有看懂。

後來找到了一篇文,寫的很棒,裏面有好多博弈相關的問題與分析,分享出來給大家:

http://endless.logdown.com/posts/2014/05/05/find-out-the-winning-strategies-of-the-game-nim-and-grundy-number-notes

這個服務器可能是外國的?打開的很慢,不要認為自己的網炸了。。。哈哈哈

下面就貼一點自己為了做海報(Grundy相關的)所摘取的一些描述:(具體的還是看上面鏈接的原文吧~)

對於Grundy值的計算,對應Sprague-Grundy定理:遊戲和的Grundy值等於各遊戲Grundy值的異或和。
而一個遊戲可以切分成若幹個子遊戲,對於每一個子遊戲,我們都可以計算一個Grundy值,
此時對若幹個遊戲全部異或,就可以得到整體這個遊戲的Grundy值。

這裏我們理解為:如果兩個玩家再進行博弈,那麽每一個玩家在行動之後,局面都會增加一個,
我們把每一個局面視為一個遊戲,那麽整個遊戲就可以視為若幹個遊戲的拆分,此時對每一步計算一個Grundy值,
然後進行異或處理。此時我們就可以將問題轉化為Nim問題,而又根據1902年,L.Bouton的對於Nim遊戲提出的定理:異或和值為零則後手勝,否則先手勝。
如果每個玩家都按照最優策略進行,那麽最終的Grundy值為0,那麽後手贏,否則先手贏。

所以,對於我們來說,SG函數與“遊戲的和”的概念不是讓我們去組合、制造稀奇古怪的遊戲,
而是把遇到的看上去有些復雜的遊戲試圖分成若幹個子遊戲,對於每個比原遊戲簡化很多的子遊戲找出它的SG函數,
然後全部異或起來就得到了原遊戲的SG函數,就可以解決原遊戲了。(引自百度百科SG函數)

具體問題可以poj的Cutting Game(http://poj.org/problem?id=2311)

題解也有很多,我是看了這位大神的:http://blog.csdn.net/mikasa3/article/details/51385538

博弈論:尋找先手必勝策略——Grundy值