蒙特卡羅演算法並不是一種演算法的名稱,而是對一類隨機演算法的特性的概括。**說「蒙特卡羅演算法打敗武宮正樹」,這個說法就好比說「我被乙隻脊椎動物咬了」,是比較火星的。實際上是zen的演算法具有蒙特卡羅特性,或者說它的演算法屬於一種蒙特卡羅演算法。
那麼「蒙特卡羅」是一種什麼特性呢?我們知道,既然是隨機演算法,在取樣不全時,通常不能保證找到最優解,只能說是盡量找。那麼根據怎麼個「盡量」法兒,我們我們把隨機演算法分成兩類:
舉個例子,假如筐裡有100個蘋果,讓我每次閉眼拿1個,挑出最大的。於是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。這個挑蘋果的演算法,就屬於蒙特卡羅演算法——
盡量找好的,但不保證是最好的
。而拉斯維加斯演算法,則是另一種情況。假如有一把鎖,給我100把鑰匙,只有1把是對的。於是我每次隨機拿1把鑰匙去試,打不開就再換1把。我試的次數越多,開啟(最優解)的機會就越大,但在開啟之前,那些錯的鑰匙都是沒有用的。這個試鑰匙的演算法,就是拉斯維加斯的——
盡量找最好的,但不保證能找到
。所以你看,這兩個詞並不深奧,它只是概括了隨機演算法的特性,演算法本身可能複雜,也可能簡單。這兩個詞本身是兩座著名賭城,因為賭博中體現了許多隨機演算法,所以借過來命名。
這兩類隨機演算法之間的選擇,往往受到問題的侷限。如果問題要求在有限取樣內,必須給出乙個解,但不要求是最優解,那就要用蒙特卡羅演算法。反之,如果問題要求必須給出最優解,但對取樣沒有限制,那就要用拉斯維加斯演算法。對於機器圍棋程式而言,因為每一步棋的運算時間、堆疊空間都是有限的,而且不要求最優解,所以zen涉及的隨機演算法,肯定是蒙特卡羅式的。
機器下棋的演算法本質都是搜尋樹,圍棋難在它的樹寬可以達到好幾百(西洋棋只有幾十)。在有限時間內要遍歷這麼寬的樹,就只能犧牲深度(俗稱「往後看幾步」),但圍棋又是依賴遠見的遊戲,甚至不僅是看「幾步」的問題。所以,要想保證搜尋深度,就只能放棄遍歷,改為隨機取樣——這就是為什麼在沒有mcts(蒙特卡羅搜樹)類的方法之前,機器圍棋的水平幾乎是笑話。而採用了mcts方法後,搜尋深度就大大增加了。比如,在題主說的zen與武宮正樹九段的對局中,我們可以看這一步棋:
武宮正樹九段(執白)第53步大飛,明顯企圖攻角,而zen(執黑)卻直接不理,放棄整個右下角,轉而把中腹走厚。這個交換究竟是否划算,就不在這裡討論了,但我們至少可以看出,zen敢於在此脫先,捨棄這麼大的眼前利益,其搜尋深度確實達到了人類專業棋手的水平。
隨機演算法 蒙特卡羅演算法與拉斯維加斯演算法比較
蒙特卡羅 monte carlo 演算法並不是一種特定的演算法,而是對一類隨機演算法的特性的概括。它的名字 於賭城蒙特卡羅,象徵概率。它的基本思想是通過大量隨機樣本,去了解乙個系統,進而得到要計算的值。它非常強大靈活,又相當簡單易懂,很容易實現。隨機演算法分為兩大類 蒙特卡羅演算法和拉斯維加斯演算法...
隨機演算法 蒙特卡羅演算法和拉斯維加斯演算法
隨機演算法分成兩類 上圖區分記憶一下 蒙特卡羅是一類隨機方法的統稱,這裡摘一段知乎大神 鵪鶉 的概括 這些蒙特卡羅的應用,肯定對這些有過深刻的了解之後才能總結出來的,以下摘抄 蒙特卡羅演算法 大家聽說過蒙特卡羅求 吧?就是畫乙個正方形和內切圓,隨機撒點,數一下點落在園內和正方形內的數量之比,就是二者...
蒙特卡羅方法和拉斯維加斯方法
這幾天alphago比較火,許多文章中都出現了蒙特卡羅搜尋樹這樣的名詞,蒙特卡羅模擬過程倒是知道,比如說經典的蒲豐投針實驗 將圓周率的求解裝化為隨機過程 等,但是蒙特卡羅搜尋樹確實不知是何物,不過應該會有類似的思想。蒙特卡羅是一類隨機方法的統稱。這類方法的特點是,可以在隨機取樣上計算得到近似結果,隨...