1. 爬山法 hill-climbing
爬山法是向值增加的方向持續移動到簡單迴圈過程,演算法在到達乙個「峰頂」時終止,
此時相鄰狀態中沒有比該「峰頂」更高的值。
爬山法不維護搜尋樹,當前節點只需要記錄當前狀態及其目標函式值;
爬山法不會前瞻與當前狀態不直接相鄰的狀態的值
——「就像健忘的人在大霧中試圖登頂珠峰一樣」
function hillclimbing(
problem) return 乙個區域性最優狀態
輸入:problem
區域性變數:
current, 乙個節點
neighbor,乙個節點
current = makenode(initial-state(
problem));
loop do
neighbor = a highest-valued successor of
current ;
if value[
neighbor] <= value[
current] then return state[
current];
current =
neighbor ;
爬山法又稱貪婪區域性搜尋,只是選擇相鄰狀態中最好的乙個。儘管貪婪是七宗罪之一,
但是貪婪演算法往往能夠獲得很好的效果。當然,爬山法會遇到以下問題:
(1)區域性極值
(2)山脊:造成一系列的區域性極值
(3)高原:平坦的區域性極值區域——解決辦法:繼續側向移動
2. 爬山法的變體形式
隨機爬山法:
在上山移動中,隨機選擇下一步,選擇的概率隨著上山移動到陡峭程度而變化;
首選爬山法
隨機地生成後繼節點直到生成乙個優於當前節點的後繼
隨機重新開始的爬山法
「如果一開始沒有成功,那麼嘗試,繼續嘗試」
演算法通過隨機生成的初始狀態來進行一系列的爬山法搜尋,找到目標時停止搜尋。
該演算法以概率1接近於完備:因為演算法最終會生成乙個目標狀態作為初始狀態
如果每次爬山搜尋成功的概率為p,則需要重新開始搜尋的期望次數為 1/p。例如:
八皇后問題,大概需要7次迭代(6次失敗,1次成功)即可找到目標,即:
p=1/7=0.14
所需步數的期望值:一次成功迭代的搜尋步數 + 失敗搜尋步數 * (1-p)/p
1*4+6*3=22
搜尋演算法 爬山法
一 爬山演算法 爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前位置的臨近空間中選擇乙個最優解作為當前解,直到達到乙個區域性最優解。爬山演算法可以模擬成乙個有失憶的人在濃霧中爬山。這裡就揭示了爬山演算法的兩個問題 失憶 就是說這個人不記得他去過什麼地方,他只記得他現在所處的位置,以及周邊的情...
搜尋演算法 爬山法
爬山法是深度優先搜尋的改進演算法。在這種方法中,使用某種貪心演算法來幫助我們決定在搜尋空間中向哪個方向搜尋。由於爬山法總是選擇往區域性最優的方向搜尋,所以可能會有 無解 的風險,而且找到的接不一定是最優解。但是他比深度優先搜尋的效率要高很多。主要的演算法描述如下 1 構造由根節點組成的1元棧。2 檢...
通用區域性搜尋演算法之爬山法也叫貪婪演算法
在上山移動中,隨機選擇下一步,選擇的概率隨著上山移動到陡峭程度而變化 隨機地生成後繼節點直到生成乙個優於當前節點的後繼 如果一開始沒有成功,那麼嘗試,繼續嘗試 演算法通過隨機生成的初始狀態來進行一系列的爬山法搜尋,找到目標時停止搜尋。該演算法以概率1接近於完備 因為演算法最終會生成乙個目標狀態作為初...