蒙特卡洛樹簡單介紹


蒙特卡洛樹簡單介紹

一、總結

一句話總結:

2006年,Remi Coulom開發了一款叫做【Crazy Stone的圍棋游戲】,該款游戲表現令人驚訝,斬獲了好幾個錦標賽冠軍。【蒙特卡洛樹就是該游戲的一個核心算法】。
從全局來看,蒙特卡洛樹搜索的主要目標是:【給定一個游戲狀態來選擇最佳的下一步】。

 

1、Alpha Go/Zero的核心組件包括?

【蒙特卡洛樹搜索】——【使用PUCT函數的一種樹遍歷的特定變體】
【殘差卷積神經網絡】——【使用policy network(策略網絡)和value network(價值網絡)來進行比賽的評估和落子先驗概率的估計】
【強化學習】——【通過自我對局來訓練網絡】

 

2、蒙特卡洛樹搜索(Monte Carlo Tree Search,MCTS)運行所在的框架/環境是一個游戲,它本身是一個非常抽象和寬泛的概念,因此這里我們只關注一種游戲類型:【雙人有限零和順序游戲】?

【游戲】:意味着我們在一種需要【交互的情境】中,交互通常會涉及一個或多個角色;【有限】:表明在任意時間點,角色之間存在的【交互方式都是有限的】
【雙人】:游戲中只有【兩個角色】;【順序】:【玩家依次交替】進行他們的動作
【零和】:【參與游戲的兩方有完全相反的目標】,換句話說就是,【游戲的任意結束狀態雙方的收益之和等於零】
我們可以很輕松的驗證,圍棋、國際象棋和井字棋都是雙人有限零和順序游戲:【有兩位玩家參與,玩家能進行的動作總是有限的,雙方的游戲目標是完全相反的(所有游戲的結果之和等於0)】。

 

 

3、如何表示一個游戲?

在一本博弈論的書中,你也許會找到如下定義:定義:一個廣義形式的游戲可以有一個元組定義:$$\\\Gamma_E=\{\mathcal{X,A},I,p,\alpha,\mathcal{H},H,\imath,\rho,u \} $$
我們可以用一種【常見的數據結構以來表示游戲——游戲樹】。
游戲樹是一個樹,其中【每一個節點代表游戲的一個確定狀態】。從一個節點到該節點的一個子節點(如果存在)是一個移動。節點的子節點數目稱為分支因子。【游戲樹的根節點代表游戲的初始狀態。游戲樹的終端節點是沒有子節點的節點,至此游戲結束,無法再進行移動】。終端節點的狀態也就是游戲的結果(輸/贏/平局)。

 

 

4、什么是“最佳的下一步”?

【游戲樹是一種遞歸的數據結構】,每次選擇完最佳的下一步時,會移動到下一個子節點,而這個子節點又是它子樹的根節點。【因此我們可以把一局游戲視為“最佳下一步”的一個問題序列】,每一次都可以由一個不同根節點的游戲樹表示。通常在實際應用中,【我們不需要記住到當前狀態的路徑,因為這不是當前游戲狀態的關注點】。
關於這個問題並沒有直接的答案。首先,我們根本無法提前知道對手的策略,對手可能是一個職業選手或者只是個並不怎么樣的業余選手。【以國際象棋為例,如果你的對手是一個業余選手,你也許可以選擇簡單的策略來欺騙他並迅速獲得勝利。但是如果遇上很強的對手,仍然使用這個策略,情況可能就反過來了】。
如果你完全不了解你的對手,這里有一個【非常極端的策略,稱為minmax】。這個策略【就是假設你的對手每一步都使用最優的策略】,然后最大化你的游戲收益。

 

 

5、minmax策略:就是假設你的對手每一步都使用最優的策略?

$$v _ { A } ( s _ { i } ) = \max _ { a _ { i } } v _ { B } ( \operatorname { move } ( s _ { i } , a _ { i } ) ) \quad v _ { A } ( \hat { s } ) = \operatorname { eval } ( \hat { s } )$$
$$v _ { B } ( s _ { i } ) = \min _ { a _ { i } } v _ { A } ( \operatorname { move } ( s _ { i } , a _ { i } ) ) \quad v _ { B } ( \hat { s } ) = - \operatorname { eval } ( \hat { s } )$$
其中,【v_A和v_B是玩家A和B的效益函數】,【move是給定當前狀態s_i和該狀態下的動作a_i產生下一個游戲狀態的函數】,eval是評估最終游戲狀態的函數,\hat{s}是任意一個終端游戲狀態。
簡單來說,【給定一個狀態s,你想要找到一個動作a_i能夠獲得最大回報(假設你對手總是在最小化你的收益)】,這也是【minmax算法的由來】。我們所需要做的只是展開整個游戲樹,並根據遞歸公式(1)來進行反向傳播。

 

6、蒙特卡洛樹搜索(MCTS)——基本概念?

MCTS對游戲進行【多次模擬】,然后【嘗試基於模擬結果對最佳下一步進行預測】。
【MCTS的主要概念還是搜索】。搜索是沿着游戲樹的一組遍歷的集合,【單次遍歷是從根節點(當前游戲狀態)到一個未完全展開節點的路徑】。
一個未完全展開的節點意味着它至少有一個未被訪問的子節點。【當遇到未完全展開的節點時,從該節點的子節點中選取一個未被訪問過的用來進行一次模擬】。
模擬的結果然后反向轉播是當前樹的根節點,並更新節點的統計信息。【當搜索結束時(受限於時間或計算能力),就可以根據收集的統計信息來決定下一步怎么走】。

 

 

7、我們應該【什么時候結束】蒙特卡洛樹搜索(MCTS)過程?

【它取決於上下文】。如果你考慮搭建一個游戲引擎,【那么你的“思考時間”可能是有限的,計算能力也是有限的】。因此最保險的做法是在【你資源允許的情況下盡可能久地運行MCTS】。
當MSCT程序結束時,最佳的移動通常是【訪問次數最多的那個節點】。

 

 

二、蒙特卡洛樹簡單介紹

轉自或參考:蒙特卡洛樹搜索(新手教程)
https://blog.csdn.net/qq_16137569/article/details/83543641

本篇博客為《Monte Carlo Tree Search – beginners guide》的翻譯的總結,水平有限,有興趣的朋友可以直接閱讀原文。

 


免責聲明!

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



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