1. 程式人生 > >蒙特卡洛樹演算法 (MCTS)

蒙特卡洛樹演算法 (MCTS)

實質上可以看成一種增強學習


蒙特卡羅樹搜尋(MCTS)會逐漸的建立一顆不對稱的樹。可以分為四步並反覆迭代:


(1)選擇
從根節點,也就是要做決策的局面R出發向下選擇一個最急迫需要被拓展的節點T;局面R是第一個被檢查的節點,被檢查的節點如果存在一個沒有被評價過的招式m,那麼被檢查的節點在執行m後得到的新局面就是我們所需要展開的T;如果被檢查的局面所有可行的招式已經都被評價過了,那麼利用ucb公式得到一個擁有最大ucb值的可行招式,並且對這個招式產生的新局面再次進行檢查;如果被檢查的局面是一個遊戲已經結束的遊戲局面,那麼直接執行步驟4;通過反覆的進行檢查,最終得到一個在樹的最底層的最後一次被檢查的局面c和它的一個沒有被評價過的招式m,執行步驟2。


(2)拓展
對於此時存在於記憶體中的局面c,新增一個它的子節點。這個子節點由局面c執行招式m而得到,也就是T。


(3)模擬
從局面T出發,雙方開始隨機的落子。最終得到一個結果(win/lost),以此更新T節點的勝利率。


(4)反向傳播
在T模擬結束之後,它的父節點c以及其所有的祖先節點依次更新勝利率。一個節點的勝利率為這個節點所有的子節點的平均勝利率。並從T開始,一直反向傳播到根節點R,因此路徑上所有的節點的勝利率都會被更新。


之後,重新從第一步開始,不斷地進行迭代。使得新增的局面越來越多,則對於R所有的子節點的勝利率也越來越準。最後,選擇勝利率最高的招式。


實際應用中,mcts還可以伴隨非常多的改進。我描述的這個演算法是mcts這個演算法族中最出名的uct演算法,現在大部分著名的ai都在這個基礎上有了大量的改進了。

第二種解釋:

傳統意義上講,演算法名字帶有蒙特卡洛的意思就是,他對搜尋空間的搜尋都是隨機給一個方向的,譬如說蒙塔卡羅算圓周率,就是在一個正方形裡面隨機取點,看看落在圓裡面有多少。蒙特卡洛光線追蹤,在需要對環境積分的時候隨機取角度射光線。蒙特卡洛走迷宮,隨便走。