模擬退火法是針對爬山法只能求出區域性最優解提出來的。模擬退火法其實也是一種貪心法,但是他搜尋最優解的過程中引入了隨機因素,允許在中間的計算過程中按照一定的概率來接受相對較差的中間結果,因此它有可能調出區域性最優解尋找到全域性的最優解。
模擬退火法演算法描述:
若j(y(i+1)) >= j(y(i)) (即移動後得到更優解)則總是接受該移動
若j(y(i+1)) < j(y(i)) (即移動後得到的解比當前解要差) 則以一定的概率接受該移動,並且這個概率隨著時間的推移逐漸降低
上行中一定的概率參考了冶金中的退火過程,其計算公式如下:
p= exp(-(highcost-lowcost)/temperture) 因為溫度(接收較差的解的意願)開始非常高,指數總是接近於0,所以概率接近於1,隨著溫度的降低,高成本和低成本之間的差異越來越大,概率越低。因此該演算法只傾向於稍微差的解而不會是非常差的解。
關鍵**實現:
def annealingoptimize(domain,costf,t=10000.0,cool=0.95,step=1):
#隨機初始化值
vec= [float(random.randint(domain[i][0],domain[i][1]))
for i in range(len(domain))]
while t>0.1:
#選擇乙個索引值
i = random.randint(0,len(domain)-1)
#選擇乙個改變索引的方向
dir = random.randint(-step,step)
#建立乙個代表題解的新列表,改變其中的乙個值
vecb = vec[:]
vecb[i] += dir
if vecb[i] < domain[i][0]:
vecb[i] = domain[i][0]
elif vecb[i] > domain[i][1]:
vech[i] = domain[i][1]
#計算當前新成本和當前
ea = costf(vec)
eb = costf(vecb)
#是更好的解或者按照概率被接收
if (eb
為了退火,函式需要建立乙個合適長度的隨機數,在每個屬性的上下限閾值範圍內。維度t和冷卻率cool是兩個可選的引數,函式每次迭代的時候將i設定為乙個隨機索引,並將dir設為介於-step和step之間的某個隨機數。該函式會持續計算直到設定的溫度退出條件。
模擬退火法
模擬退火演算法是一種通用概率演演算法,用於在乙個大的空間內尋找命題的最優解。根據熱力學原理,在溫度為t時,出現能量差為de的降溫概率為p de 標識為 p de exp de kt k為常數,exp為自然數,且de 0,公式指出 溫度越高,出現一次能量差為de的降溫概率越大。溫度越低,出現降溫的概率...
模擬退火法 matlab
模擬退火法 模擬退火法簡單解釋 為了找出地球上最高的山,一群兔子們開始想辦法。首先兔子們用酒將自己灌醉了,它們隨機地跳了很長的時間。在這期 間,它們可能走向高處,也可能踏入平地。但是,隨著時間的流逝,它們漸漸清醒了並朝著最高的方向跳去。最後就達到了珠穆朗瑪峰。所謂的退火是指將固體加熱到足夠高的溫度,...
C 數值計算之模擬退火法簡介 一
摘要 本文簡介了模擬退火的基本思想,以於模擬時的主要引數的選擇根據,然後給出乙個求二維函式極值的具體問題和解法,並給出c 源 l 概述 在管理科學 電腦科學 分子物理學和生物學以及超大規模積體電路設計 設計 影象處理和電子工程等科技領域中,存在大量組合優化瓿。其中許多問題如貨郎擔問題 圖著色問題 裝...