爬山搜尋演算法

2021-05-28 07:42:56 字數 1194 閱讀 1024

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接近於完備 因為演算法最終會生成乙個目標狀態作為初...