對抗搜索
- 博弈問題
博弈問題窮舉有時可以獲得必勝結(jié)果,但是稍微復(fù)雜一點的問題就很難窮舉了。 - 極大極小過程
- alpha-beta剪枝
- Monte-Carlo博弈
極大極小過程
極大極小過程的想法非常直白,即:我方走步,則選擇極大值;對方走步,則選擇極小值。
極大極小過程是博弈問題的一個最基本的決策模式,alpha-beta剪枝法是建立在極大極小過程基礎(chǔ)上的。
alpha-beta剪枝法
假如A和B博弈,不妨令局面估值函數(shù)為A的利益,那么A追求節(jié)點值極大,B追求節(jié)點值極小。
定義:極大節(jié)點的下界為alpha,極小節(jié)點的上界為beta。
剪枝:后輩節(jié)點的beta<=祖先節(jié)點的alpha,alpha剪枝;后輩節(jié)點的alpha>=祖先節(jié)點的beta,beta剪枝。
MyRemark
這個地方可能會給出一個樹然后考手寫求解過程,一個比較簡單的手寫方法是,先把每一層是極大還是極小標出來,然后標注這一行寫alpha還是beta,之后從最后一層開始向上推。正常情況下一定是alpha小于beta的。如果出現(xiàn)alpha大于beta,就從中間剪開。這時候,被剪開上面是誰,就是誰剪枝。
實際實現(xiàn)的時候會發(fā)現(xiàn),在ab剪枝法中,局面評價函數(shù)是非常重要的。深藍能夠依靠這個算法實現(xiàn),很大程度上是因為成功構(gòu)造出了一個局面評價函數(shù)。
在做大作業(yè)的時候,實在是沒想出來合適的局面評價函數(shù),效果特別差,所以最后用了蒙特卡洛。不過alpha-beta剪枝的效率真的是很好,現(xiàn)在想想假如用蒙特卡洛的結(jié)果訓練神經(jīng)網(wǎng)絡(luò),把這個作為估值函數(shù),這樣就相當于沒有時間限制,算是一種cheat的方式吧(攤手)。
Monte-Carlo模擬
蒙特卡洛方法就很簡單,就是不斷地試,然后選擇最優(yōu)的。
主要就是UCT算法。每次模擬,假如沒有拓展就拓展,每次拓展走子的時候,都選擇UCB1最大的點走子。
最終選擇被模擬次數(shù)最多的節(jié)點作為最佳走步。
AlphaGo用的是Monte-Carlo,顯然是因為圍棋比象棋復(fù)雜太多,局面估值函數(shù)實在是不好做。
AlphaGo在實際做的時候有以下幾個操作:
- 利用策略網(wǎng)絡(luò)縮小搜索范圍
- 將估值網(wǎng)絡(luò)的結(jié)果結(jié)合到信心上限的計算中
- 一個節(jié)點被模擬一定的次數(shù)之后才擴展(這個還是挺重要)
- 最終選擇模擬次數(shù)最多的節(jié)點作為最佳走步
這個部分做了一個大作業(yè),可能就不考了吧(天真臉)