国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Alpha-Beta 剪枝

這篇具有很好參考價值的文章主要介紹了Alpha-Beta 剪枝。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Minimax 算法

定義

Minimax$?算法又叫極小化極大算法,是一種找出失敗的最大可能性中的最小值的算法。1

在局面確定的雙人對弈里,常進行對抗搜索,構建一棵每個節(jié)點都為一個確定狀態(tài)的搜索樹。奇數(shù)層為己方先手,偶數(shù)層為對方先手。搜索樹上每個葉子節(jié)點都會被賦予一個估值,估值越大代表我方贏面越大。我方追求更大的贏面,而對方會設法降低我方的贏面,體現(xiàn)在搜索樹上就是,奇數(shù)層節(jié)點(我方節(jié)點)總是會選擇贏面最大的子節(jié)點狀態(tài),而偶數(shù)層(對方節(jié)點)總是會選擇我方贏面最小的的子節(jié)點狀態(tài)。

過程

Minimax 算法的整個過程,會從上到下遍歷搜索樹,回溯時利用子樹信息更新答案,最后得到根節(jié)點的值,意義就是我方在雙方都采取最優(yōu)策略下能獲得的最大分數(shù)。

解釋

來看一個簡單的例子。

稱我方為 MAX,對方為 MIN,圖示如下:

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

例如,對于如下的局勢,假設從左往右搜索,根節(jié)點的數(shù)值為我方贏面:

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

我方應選擇中間的路線。因為,如果選擇左邊的路線,最差的贏面是 3;如果選擇中間的路線,最差的贏面是 15;如果選擇右邊的路線,最差的贏面是 1。雖然選擇右邊的路線可能有 22 的贏面,但對方也可能使我方只有 1 的贏面,假設對方會選擇使得我方贏面最小的方向走,那么經(jīng)過權衡,顯然選擇中間的路線更為穩(wěn)妥。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

實際上,在看右邊的路線時,當發(fā)現(xiàn)贏面可能為 1 就不必再去看贏面為 12、20、22 的分支了,因為已經(jīng)可以確定右邊的路線不是最好的。

樸素的 Minimax 算法常常需要構建一棵龐大的搜索樹,時間和空間復雜度都將不能承受。而α ? β?

剪枝就是利用搜索樹每個節(jié)點取值的上下界來對 Minimax 進行剪枝優(yōu)化的一種方法。

需要注意的是,對于不同的問題,搜索樹每個節(jié)點上的值有著不同的含義,它可以是估值、分數(shù)、贏的概率等等,為方便起見,我們下面統(tǒng)一用分數(shù)來稱呼。

alpha-beta 剪枝

過程

對于如下的局勢,假設從左往右搜索:

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

若已知某節(jié)點的所有子節(jié)點的分數(shù),則可以算出該節(jié)點的分數(shù):對于 MAX 節(jié)點,取最大分數(shù);對于 MIN 節(jié)點,取最小分數(shù)。

若已知某節(jié)點的部分子節(jié)點的分數(shù),雖然不能算出該節(jié)點的分數(shù),但可以算出該節(jié)點的分數(shù)的取值范圍。同時,利用該節(jié)點的分數(shù)的取值范圍,在搜素其子節(jié)點時,如果已經(jīng)確定沒有更好的走法,就不必再搜索剩余的子節(jié)點了。

記 v 為節(jié)點的分數(shù),且 α ≤ v ≤ β,即 α 為最大下界,β 為最小上界。當 α ≥ β 時,該節(jié)點剩余的分支就不必繼續(xù)搜索了(也就是可以進行剪枝了)。注意,當 α = β 時,也可以剪枝,這是因為不會有更好的結果了,但可能有更差的結果。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

初始化時,令 α = ?∞, β = +∞,也就是 ?∞ ≤ v ≤ +∞。到節(jié)點 A 時,由于左 子節(jié)點的分數(shù)為 3,而節(jié)點 A 是 MIN 節(jié)點,試圖找分數(shù)小的走法,于是將 β 值修 改為 3,這是因為 3 小于當前的 β 值(β = +∞)。然后節(jié)點 A 的右子節(jié)點的分數(shù) 為 17,此時不修改節(jié)點 A 的 β 值,這是因為 17 大于當前的 β 值(β = 3)。之 后,節(jié)點 A 的所有子節(jié)點搜索完畢,即可計算出節(jié)點 A 的分數(shù)為 3。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

節(jié)點 A 是節(jié)點 B 的子節(jié)點,計算出節(jié)點 A 的分數(shù)后,可以更新節(jié)點 B 的分數(shù)范 圍。由于節(jié)點 B 是 MAX 節(jié)點,試圖找分數(shù)大的走法,于是將 α 值修改為 3,這是 因為 3 大于當前的 α 值(α = ?∞)。之后搜索節(jié)點 B 的右子節(jié)點 C,并將節(jié)點 B 的 α 和 β 值傳遞給節(jié)點 C。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

對于節(jié)點 C,由于左子節(jié)點的分數(shù)為 2,而節(jié)點 C 是 MIN 節(jié)點,于是將 β 值修改 為 2。此時 α ≥ β,故節(jié)點 C 的剩余子節(jié)點就不必搜索了,因為可以確定,通過節(jié) 點 C 并沒有更好的走法。然后,節(jié)點 C 是 MIN 節(jié)點,將節(jié)點 C 的分數(shù)設為 β,也 就是 2。由于節(jié)點 B 的所有子節(jié)點搜索完畢,即可計算出節(jié)點 B 的分數(shù)為 3。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

計算出節(jié)點 B 的分數(shù)后,節(jié)點 B 是節(jié)點 D 的一個子節(jié)點,故可以更新節(jié)點 D 的分 數(shù)范圍。由于節(jié)點 D 是 MIN 節(jié)點,于是將 β 值修改為 3。然后節(jié)點 D 將 α 和 β 值 傳遞給節(jié)點 E,節(jié)點 E 又傳遞給節(jié)點 F。對于節(jié)點 F,它只有一個分數(shù)為 15 的子 節(jié)點,由于 15 大于當前的 β 值,而節(jié)點 F 為 MIN 節(jié)點,所以不更新其 β 值,然 后可以計算出節(jié)點 F 的分數(shù)為 15。?

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

?計算出節(jié)點 F 的分數(shù)后,節(jié)點 F 是節(jié)點 E 的一個子節(jié)點,故可以更新節(jié)點 E 的分 數(shù)范圍。節(jié)點 E 是 MAX 節(jié)點,更新 α,此時 α ≥ β,故可以剪去節(jié)點 E 的余下分 支。然后,節(jié)點 E 是 MAX 節(jié)點,將節(jié)點 E 的分數(shù)設為 α,也就是 3。此時,節(jié)點 D 的所有子節(jié)點搜索完畢,即可計算出節(jié)點 D 的分數(shù)為 3。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

計算出節(jié)點 D 的分數(shù)后,節(jié)點 D 是節(jié)點 H 的一個子節(jié)點,故可以更新節(jié)點 H 的分 數(shù)范圍。節(jié)點 H 是 MAX 節(jié)點,更新 α。然后,按搜索順序,將節(jié)點 H 的 α 和 β 值依次傳遞給節(jié)點 I、J、K。對于節(jié)點 K,其左子節(jié)點的分數(shù)為 2,而節(jié)點 K 是 MIN 節(jié)點,更新 β,此時 α ≥ β,故可以剪去節(jié)點 K 的余下分支。然后,將節(jié)點 K 的分數(shù)設為 2。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

計算出節(jié)點 K 的分數(shù)后,節(jié)點 K 是節(jié)點 J 的一個子節(jié)點,故可以更新節(jié)點 J 的分 數(shù)范圍。節(jié)點 J 是 MAX 節(jié)點,更新 α,但是,由于節(jié)點 K 的分數(shù)小于 α,所以節(jié) 點 J 的 α 值維持 3 保持不變。然后,將節(jié)點 J 的 α 和 β 值傳遞給節(jié)點 L。由于節(jié) 點 L 是 MIN 節(jié)點,更新 β = 3,此時 α ≥ β,故可以剪去節(jié)點 L 的余下分支,由于 節(jié)點 L 沒有余下分支,所以此處并沒有實際剪枝。然后,將節(jié)點 L 的分數(shù)設為 3。

alphabeta剪枝算法,算法基礎,搜索算法,剪枝,算法,c++

?實現(xiàn)

int alpha_beta(int u, int alph, int beta, bool is_max) {
  if (!son_num[u]) return val[u];
  if (is_max) {
    for (int i = 0; i < son_num[u]; ++i) {
      int d = son[u][i];
      alph = max(alph, alpha_beta(d, alph, beta, is_max ^ 1));
      if (alph >= beta) break;
    }
    return alph;
  } else {
    for (int i = 0; i < son_num[u]; ++i) {
      int d = son[u][i];
      beta = min(beta, alpha_beta(d, alph, beta, is_max ^ 1));
      if (alph >= beta) break;
    }
    return beta;
  }
}

新手上路,請多多指教文章來源地址http://www.zghlxwxcb.cn/news/detail-764158.html

到了這里,關于Alpha-Beta 剪枝的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • DFS(基礎,回溯,剪枝,記憶化)搜索

    DFS(基礎,回溯,剪枝,記憶化)搜索

    DFS(深度優(yōu)先搜索) 基于遞歸求解問題,而針對搜索的過程 對于問題的介入狀態(tài)叫初始狀態(tài),要求的狀態(tài)叫目標狀態(tài) 這里的搜索就是對實時產(chǎn)生的狀態(tài)進行分析檢測,直到得到一個目標狀態(tài)或符合要求的最佳狀態(tài)為止。對于實時產(chǎn)生新的狀態(tài)的過程叫擴展 搜索的要點: 1.選定初

    2024年04月12日
    瀏覽(16)
  • 單元測試、冒煙測試、集成測試、系統(tǒng)測試、回歸測試、驗收測試、Alpha、Beta

    1.冒煙測試 代碼跑通即可。 這一術語源自硬件測試:測試一個硬件或硬件組件時,先直接加電,如果冒煙了,則無需進行后續(xù)測試。目的:判斷是否可以進行后續(xù)的正式測試工作。 新編譯的軟件版本,確認其基本功能正常。 2、回歸測試 修改后重新測試。 錯誤被修正后或軟

    2023年04月13日
    瀏覽(18)
  • 簡談軟件版本周期 | Alpha、Beta、RC、Stable版本之間的區(qū)別

    簡談軟件版本周期 | Alpha、Beta、RC、Stable版本之間的區(qū)別

    目錄 ?? 引言 ? 軟件版本周期 ??? 軟件開發(fā)期 ?? 軟件完成期 ?? 商業(yè)軟件版本 定義好版本號,對于產(chǎn)品的版本發(fā)布與持續(xù)更新很重要;但是對于版本怎么定義,規(guī)則如何確定,卻是千差萬別。具體應用,可以結合自己目前的實際情況命名。另外,對于商業(yè)軟件,有的

    2024年02月08日
    瀏覽(35)
  • 如何在Arch Linux上安裝最新的GNOME Alpha/Beta版本

    如何在Arch Linux上安裝最新的GNOME Alpha/Beta版本

    導讀 這是為那些想在 Arch?Linux?上安裝下一個主要版本的 GNOME 桌面環(huán)境的 alpha 或 beta 開發(fā)版的用戶提供的快速而又骯臟的教程,僅供測試之用。 每次有新的 GNOME alpha 版本發(fā)布,人們都會問我如何在各種 GNU/Linux 發(fā)行版上安裝。我總是告訴他們,如果沒有為特定發(fā)行版創(chuàng)建的

    2024年02月16日
    瀏覽(16)
  • 【人工智能】—局部搜索算法、爬山法、模擬退火、局部剪枝、遺傳算法

    【人工智能】—局部搜索算法、爬山法、模擬退火、局部剪枝、遺傳算法

    在某些規(guī)模太大的問題狀態(tài)空間內,A*往往不夠用 問題空間太大了 無法訪問 f 小于最優(yōu)的所有狀態(tài) 通常,甚至無法儲存整個邊緣隊列 解決方案 設計選擇更好的啟發(fā)式函數(shù) Greedy hill-climbing (fringe size = 1) Beam search (limited fringe size) 瓶頸:內存不足,無法存儲整個邊緣隊列 爬山搜

    2023年04月22日
    瀏覽(24)
  • sklearn中決策樹模塊的剪枝參數(shù)ccp_alpha如何可視化調整

    sklearn中決策樹模塊的剪枝參數(shù)ccp_alpha如何可視化調整

    決策樹作為樹模型中最經(jīng)典的算法,根據(jù)訓練數(shù)據(jù)生長并分裂葉子結點,容易過擬合。所以一般來說會考慮生長停止后進行剪枝,把一些不必要的葉子結點去掉(讓其父結點作為葉子結點),這樣或許對其泛化能力有積極作用。 在scikit-learn的決策樹模塊里,默認是不剪枝的,

    2024年02月21日
    瀏覽(16)
  • 【搜索】DFS剪枝與優(yōu)化

    算法提高課筆記 剪枝 是什么意思呢? 我們知道,不管是內部搜索還是外部搜索,都可以形成一棵搜索樹,如果將搜索樹全部遍歷一遍,效率會很低,但如果我們能在搜索的過程中,提前預知,判斷某一些不可能是正確答案的情況,就可以不用遍歷其下的子樹,從而提高我們

    2024年02月14日
    瀏覽(25)
  • DFS:深搜+回溯+剪枝解決矩陣搜索問題

    DFS:深搜+回溯+剪枝解決矩陣搜索問題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝三連?。? . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 1、矩陣搜索問題經(jīng)常要用到向量,也就是我們可以通過dx和dy來幫助我們定義方向

    2024年04月17日
    瀏覽(20)
  • 【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索)

    【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索)

    按照國際象棋的規(guī)則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。 n 皇后問題 研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。 給你一個整數(shù) n ,返回所有不同的 n 皇后問題 的解決方案。 每一種解法包含一個不同的 n 皇后

    2024年02月22日
    瀏覽(23)
  • 從0實現(xiàn)基于Alpha zero的中國象棋AI(會分為多個博客,此處講解蒙特卡洛樹搜索)

    從0實現(xiàn)基于Alpha zero的中國象棋AI(會分為多個博客,此處講解蒙特卡洛樹搜索)

    ? 題主對于阿爾法狗的實現(xiàn)原理好奇,加上畢業(yè)在即,因此選擇中國象棋版的阿爾法zero,阿爾法zero是阿爾法狗的升級版。在完成代碼編寫的歷程中,深刻感受到深度學習環(huán)境的惡劣,網(wǎng)絡上固然資料繁多,但要么水平不行,不知所云,要么國外課程,門檻過高。因而碰壁良

    2024年02月06日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包