負極大值搜尋

2021-09-01 05:48:00 字數 1425 閱讀 5778

編者最近在學校五子棋ai博弈演算法,好不容找到一本書籍資源來學習,但其中內容是作者在2023年缺少中文演算法書籍的情況下編寫的,因此有一些語義錯誤或語義不詳的地方,對編者閱讀造成很大影響。比如這個負極大值搜尋的推導則是一筆帶過,讓編者百思不得其解。現在將花了三小時得出的推導過程,在這裡整理一下,如果有錯誤請讀者指正。

首先,負極大值搜尋是極大極小值搜尋的變種,對執行效率上沒有什麼影響,但**更簡潔,很多博弈演算法作者都是用負極大值來演示,因此還是有必要學習的。

其實這個演算法本質上是一種負負得正的關係。先看下極大極小值搜尋的偽**:

1。 p 為棋盤

2。 d 為規定的搜素最大深度,比如d層紅方,d-1層為黑方,d-2層為紅方...依此類推,可採用mod2來判斷當前是哪一方

4。評估棋盤的函式evaluation,當然需要看是哪一方,若紅方為機器,黑方為人,那麼機器(紅方)做為極大(inf),人作為極小(-inf),讓機器選擇最合適的一步。

int minimax(chessmap p , int d)

return bestvalue;

}

我這裡就不詳細解釋了,預設大家都有一定了解。

首先要知道很重要的一點,負極大值的葉節點評估函式與極大極小不同:

極大極小的評估機制:若電腦為黑棋,則預設評估機制為在這個位置上總評分為:

黑棋總分-白棋總分 這個是固定的 不會以執棋物件為改變。而負極大值則是相反

負極大值的評分機制:若執棋方為黑棋 則評分=白棋總分-黑棋總分

若執棋方為白棋 則評分=黑棋總分-白棋總分

而負極大值搜尋的簡潔在於分開電腦和玩家的判斷放在了葉節點 return 相應的評分機制

現在來將負極大值搜尋偽**附上:

落白子時則是求極小值 ,極大值則是return 黑棋評分-白棋評分 與極大極小搜尋相同,但在負極大值函式中則會帶上負號 原來的最大值就是極小值

因此整個負極大值搜尋的**避免了使用條件語句來選擇最大或最小值 歸併成乙個語句

現在仔細回想是不是 就是負負得正的關係?

因此我推導出了另一種求法 也可以簡潔**

方法是 return 仍然分條件,簡潔**的目的其實就是為了讓函式裡不再需要分條件 因此我們可以只讓求極小值時來迎合求 歸併統一的求極大值 那麼只需要讓return 返回時條件是白棋落下 即是求極小值時 變為(白棋評分-黑棋評分) 而負極大值則是(黑棋評分-白棋評分) 而返回函式前不再需要加上負號 因此 求極大值時沒有改變 求極小值時 因為負號改變了大小關係 最大的即是最小的!!

因此我手寫乙份筆記來簡潔表達這種關係:附上

字不好 多多見諒

非極大值演算法

1 演算法思想 非極大值抑制 non maximum suppression,nms 顧名思義就是把非極大值過濾掉 抑制 本質是搜尋區域性極大值,抑制非極大值元素。主要是為了更精確的定位某種特徵,比如用梯度變化表徵邊緣時,梯度變化較大的區域通常比較寬,所以利用x和y方向的梯度確定乙個法向arctan...

非極大值抑制

nms non maximum suppression 中文名非極大值抑制,在很多計算機視覺任務中都有廣泛應用,如 邊緣檢測 目標檢測等。這裡主要以人臉檢測中的應用為例,來說明nms,並給出matlab和c 示例程式。人臉檢測的一些概念 1 絕大部分人臉檢測器的核心是分類器,即給定乙個尺寸固定,分類...

非極大值抑制

參考 思想 1.將每乙個檢測框的得分值排序,得到得分值最大的檢測框,將該檢測框記錄下來 2.然後其他計算所有的檢測框與該框的iou,將iou大於閾值的檢測框去除,iou小於閾值的認為是不同的目標,則保留 3.對剩下的檢測框繼續做上述的處理 import numpy as np def py cpu ...