複製鏈接
請複製以下鏈接發送給好友

極小化極大算法

鎖定
Minimax算法(亦稱 MinMax or MM)又名極小化極大算法,是一種找出失敗的最大可能性中的最小值的算法。
中文名
極小化極大算法
外文名
Minimax算法
別    名
MinMaxorMM

極小化極大算法介紹

Minimax算法常用於棋類等由兩方較量的遊戲和程序。該算法是一個零總和算法,即一方要在可選的選項中選擇將其優勢最大化的選擇,另一方則選擇令對手優勢最小化的方法 [1]  。而開始的時候總和為0。很多棋類遊戲可以採取此算法,例如井字棋(tic-tac-toe)。

極小化極大算法基本算法思想

極小化極大(minimax)算法顧名思義,就是讓最大得情況最小,這裏的最大一般是指最差的情況,比如遊戲中最不利的情況。
該算法需要滿足零和博弈,初略的解釋就是若有兩個玩家進行遊戲,如果其中一方得到利益那麼另一方就會失去利益,遊戲利益的總和為0(某些情況下為常數)。
因此,零和的約束條件也使得該算法在很多遊戲中圖體現出很好的效果,比如大多數的棋類遊戲。
其實説白了,這個算法就是一個樹形結構的遞歸算法,每個節點的孩子和父節點都是對方玩家,所有的節點被分為極大值(我方)節點和極小值(對方)節點。

極小化極大算法算法優化

α-β剪枝算法
在上述的極大極小算法中,MIN和MAX過程將所有的可能性省搜索樹,然後再從端點的估計值倒推計算,這樣的效率非常低下。而α-β算法的引入可以提高運算效率,對一些非必要的估計值進行捨棄。其策略是進行深度優先搜索,當生成結點到達規定深度時,立即進行靜態估計,一旦某一個非端點的節點可以確定倒推值的時候立即賦值,節省下其他分支拓展到節點的開銷。
剪枝規則:
(1)α剪枝,任一極小層節點的β值不大於他任一前驅極大值層節點的α值,即α(前驅層)≥β(後繼層),則可以終止該極小層中這個MIN節點以下的搜索過程。這個MIN節點的倒推值確定為這個β值。
(2)β剪枝,任一極大層節點的α值不小於它任一前驅極小值層節點的β值,即β(前驅層)≤α(後繼層),則可以終止該極大值層中這個MAX節點以下的搜索過程。這個MAX節點的倒推值確定為這個α值。

極小化極大算法偽代碼

function minimax(node, depth)

    if node is a terminal node or depth = 0

        return the heuristic value of node

    if the adversary is to play at node

        let α := +∞

        foreach child of node

            α := min(α, minimax(child, depth-1))

    else {we are to play at node}

        let α := -∞

        foreach child of node

            α := max(α, minimax(child, depth-1))

    return α
參考資料