1. 程式人生 > >一看就懂的 Alpha-Beta 剪枝演算法詳解

一看就懂的 Alpha-Beta 剪枝演算法詳解

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

Alpha-Beta剪枝用於裁剪搜尋樹中沒有意義的不需要搜尋的樹枝,以提高運算速度。

假設α為下界,β為上界,對於α ≤ N ≤ β:

若 α ≤ β  則N有解。

若 α > β 則N無解。

下面通過一個例子來說明Alpha-Beta剪枝演算法。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

上圖為整顆搜尋樹。這裡使用極小極大演算法配合Alpha-Beta剪枝演算法,正方形為自己(A),圓為對手(B)。

初始設定α為負無窮大,β為正無窮大。

640?wx_fmt=png

對於B(第四層)而已,儘量使得A獲利最小,因此當遇到使得A獲利更小的情況,則需要修改β。這裡3小於正無窮大,所以β修改為3。

640?wx_fmt=png

(第四層)這裡17大於3,不用修改β。

640?wx_fmt=png

對於A(第三層)而言,自己獲利越大越好,因此遇到利益值大於α的時候,需要α進行修改,這裡3大於負無窮大,所以α修改為3。

640?wx_fmt=png

B(第四層)擁有一個方案使得A獲利只有2,α=3,  β=2, α > β, 說明A(第三層)只要選擇第二個方案, 則B必然可以使得A的獲利少於A(第三層)的第一個方案。

這樣就不再需要考慮B(第四層)的其他候選方案了,因為A(第三層)根本不會選取第二個方案,多考慮也是浪費。

640?wx_fmt=png

B(第二層)要使得A利益最小,則B(第二層)的第二個方案不能使得A的獲利大於β, 也就是3. 但是若B(第二層)選擇第二個方案, A(第三層)可以選擇第一個方案使得A獲利為15, α=15,  β=3, α > β, 故不需要再考慮A(第三層)的第二個方案, 因為B(第二層)不會選擇第二個方案。

640?wx_fmt=png

A(第一層)使自己利益最大,也就是A(第一層)的第二個方案不能差於第一個方案, 但是A(第三層)的一個方案會導致利益為2, 小於3, 所以A(第三層)不會選擇第一個方案, 因此B(第四層)也不用考慮第二個方案。

640?wx_fmt=png

當A(第三層)考慮第二個方案時,發現獲得利益為3,和A(第一層)使用第一個方案利益一樣。

如果根據上面的分析A(第一層)優先選擇了第一個方案,那麼B不再需要考慮第二種方案,如果A(第一層)還想進一步評估兩個方案的優劣的話, B(第二層)則還需要考慮第二個方案。

若B(第二層)的第二個方案使得A獲利小於3,則A(第一層)只能選擇第一個方案,若B(第二層)的第二個方案使得A獲利大於3,則A(第一層)還需要根據其他因素來考慮最終選取哪種方案。

轉自:tangchenyi

http://blog.csdn.net/baixiaozhe/article/details/51872495

640?wx_fmt=png