搜尋演算法 爬山法

2021-09-29 10:04:31 字數 2088 閱讀 7955

一、

爬山演算法:爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前位置的臨近空間中選擇乙個最優解作為當前解,直到達到乙個區域性最優解。爬山演算法可以模擬成乙個有失憶的人在濃霧中爬山。這裡就揭示了爬山演算法的兩個問題:

失憶:就是說這個人不記得他去過什麼地方,他只記得他現在所處的位置,以及周邊的情況(因為有濃霧,所以他只能看到最近的周邊的情況)。所以說他在任何時候只儲存乙個當前的狀態,之前的所有的狀態全部不記得了。那麼我們就可以看出爬山演算法非常依賴於這個初始狀態(如果初始狀態距離全域性最值點很近的話,是更容易搜尋到全域性最值點的)。

濃霧:當他走到乙個區域性最值點時,因為他看見遠處是否還有更大的最值點,所以就把當前這個區域性最值點返回給你(爬山演算法的返回是返回乙個狀態而不是乙個路徑,這個狀態就是乙個區域性最值點)。

爬山演算法的輸入是定義的兩個區域性變數,乙個是當前狀態(當前結點),還有乙個就是用來儲存鄰居結點的neighbor。我們從初始結點(也就是我們的當前結點)出發,開始往前爬山(往前搜尋)。首先根據當前結點能夠產生多少個後續結點,然後在這些後續結點中選擇乙個最大值(這個值是用你所定義的評估函式評估出來的)的後續結點,並將它放進neighbor中,然後將後續結點的值與當前結點的值進行比較,如果發現當前結點的值比後續結點的值要大,那麼就意味著當前結點就是乙個區域性最值點了,所以就不用動了,把當前結點對應的狀態返回即可。但是如果當前結點的值比後續結點的值要小,那麼就往前走。這樣一步一步地進行迭代,直到走到乙個區域性最值點。

所以說,爬山演算法的主要缺點是可能會陷入區域性最優解,而不一定能搜尋到全域性最優解。當然有一種辦法就是多執行幾次爬山搜尋演算法,每一次都使用不同的初始狀態,然後從裡面挑乙個最大的值作為這個問題的解。

在某個給定的定義域x內,求函式f(x)對應的最優值。這裡假設求最小值:

如果x是離散有限取值,那麼可以通過窮取法獲得問題的最優解;

如果x是連續的,且f(x)是凸的,那麼可以通過梯度下降等方法獲得最優解;

如果x是連續的,但是f(x)是非凸的,雖說也可以通過梯度下降找到區域性最優解但不一定找到全域性最優解。

優點:①避免遍歷,採用啟發式搜尋策略,效率更高

(啟發式搜尋:在狀態空間中進行搜尋並對每乙個搜尋的位置進行評估,從而得到最好的位置)

(狀態空間:用來描述乙個問題的全部狀態以及這些狀態之間的相互關係)

缺點:①因為不是全面搜尋,所以結果可能只是區域性最優解,而不是全域性最優解

②如果到達高地(平頂),那麼就無法確定最佳搜尋方向,會產生隨機走動,使得搜尋效率降低

③搜尋可能會在山脊的兩面來回振盪,前進步伐很小

# 我的**

# @time : 2019/11/14 下午 3:09

'''問題:設方程y=x1+x2-x3,

x1是區間[-2,5]中的整數,

x2是區間[2,6]中的整數,

x3是區間[-5,2]中的整數,

使用爬山法,找到使得y取值最小的解

'''import numpy as np

y = 10000

list_mid = list()

list_x = np.zeros(3)

for x1 in range(-10, 6):

for x2 in range(2, 7):

for x3 in range(-5, 9):

s = x1+x2-x3

if s < y:

y = s

list_x = [x1, x2, x3] #最優搜尋選擇

continue

else:

continue

if s < y:

print(s)

else:

print(y)

print(list_x)

print(list_mid)

搜尋演算法 爬山法

爬山法是深度優先搜尋的改進演算法。在這種方法中,使用某種貪心演算法來幫助我們決定在搜尋空間中向哪個方向搜尋。由於爬山法總是選擇往區域性最優的方向搜尋,所以可能會有 無解 的風險,而且找到的接不一定是最優解。但是他比深度優先搜尋的效率要高很多。主要的演算法描述如下 1 構造由根節點組成的1元棧。2 檢...

爬山搜尋演算法

1.爬山法 hill climbing 爬山法是向值增加的方向持續移動到簡單迴圈過程,演算法在到達乙個 峰頂 時終止,此時相鄰狀態中沒有比該 峰頂 更高的值。爬山法不維護搜尋樹,當前節點只需要記錄當前狀態及其目標函式值 爬山法不會前瞻與當前狀態不直接相鄰的狀態的值 就像健忘的人在大霧中試圖登頂珠峰一...

通用區域性搜尋演算法之爬山法也叫貪婪演算法

在上山移動中,隨機選擇下一步,選擇的概率隨著上山移動到陡峭程度而變化 隨機地生成後繼節點直到生成乙個優於當前節點的後繼 如果一開始沒有成功,那麼嘗試,繼續嘗試 演算法通過隨機生成的初始狀態來進行一系列的爬山法搜尋,找到目標時停止搜尋。該演算法以概率1接近於完備 因為演算法最終會生成乙個目標狀態作為初...