模擬退火法
模擬退火法簡單解釋:為了找出地球上最高的山,一群兔子們開始想辦法。首先兔子們用酒將自己灌醉了,它們隨機地跳了很長的時間。在這期
間,它們可能走向高處,也可能踏入平地。但是,隨著時間的流逝,它們漸漸清醒了並朝著最高的方向跳去。最後就達到了珠穆朗瑪峰。
所謂的退火是指將固體加熱到足夠高的溫度,使分子呈隨機排列狀態,然後逐步降溫使之冷卻,最後分子以低能狀態排列,固體達到某種穩定狀
態。重要理解:
假設材料在狀態i之下的能量為e(i),那麼材料在溫度t時從狀態i進入狀態j就遵循如下規律:
如果 e(j)<= e(i),接受該狀態被轉移
如果 e(j)> e(i),則狀態轉移以如下的概率被接受:
exp 其中,k 是物理學中的波爾茲曼常數,t 是材料溫度。
演算法關鍵引數和操作的設定:
從演算法的流程上看,模擬退火演算法包括三函式兩準則,即狀態產生函式、狀態接受函式、溫度更新函式、內迴圈終止準則和外迴圈終止準則,這
些環節的設計將決定模擬退火演算法的優化效能。此外,初溫的選擇對模擬退火演算法效能也有很大影響。
狀態產生函式:
原則:設計狀態產生函式(領域函式)的出發點應該是盡可能保證產生的候選解遍布全部的解空間。通常,狀態產生函式由兩部分組成,即產生候
選解的方式和候選解產生的概率分布。
方法:在當前狀態的領域結構內以一定概率方式(均勻分布、正態分佈、指數分布等)產生
狀態接受函式:
原則:函式一般以概率的方式給出,不同接受函式的差別主要在於接受概率的形式不同。設計狀態接受概率,應該遵循以下原則:
(1)在固定溫度下,接受使目標函式下降的候選解的概率要大於使目標函式上公升的候選解概率;
(2)隨溫度的下降,接受使目標函式上公升的解的概率要逐漸減少;
(3)當溫度趨於零時,只能接受目標函式下降的解。
方法:狀態接受函式的引入是模擬退火演算法實現全域性搜尋的最關鍵的因素,模擬退火演算法中通常用 min[1,exp(-△c/t)]作為狀態接受函式。
初始溫度:
初始溫度、溫度更新函式、內迴圈終止準則和外迴圈終止準則通常被稱為退火歷程。
原則:通過理論分析可以得到初溫的解析式,但解決實際問題時難以得到精確的引數;實際應用時往往要讓初溫充分大。實驗表明:初溫越大,
獲得高質量解的機率越大,但花費較多的計算時間。
方法:(1)均勻抽樣一組狀態,以各狀態目標值的方差為初溫;
(2)隨機產生一組狀態,確定兩兩狀態間的最大目標差值,根據差值,利用一定的函式確定初溫,譬如 t0 =-△/lnpr,其中pr 為初始接受函式;
(3)利用經驗公式。
溫度更新函式:
溫度更細函式,即溫度的下降方式,用於在外迴圈中修改溫度值。
內迴圈終止準則:
常用的metropolis 抽樣準則:
(1)檢驗目標函式的均值是否穩定;
(2)連續若干步的目標值變化較小;
(3)按一定的步數抽樣。
外迴圈終止準則
(1)設定終止溫度的閾值;
(2)設定外迴圈迭代次數;
(3)演算法搜尋到的最優值連續若干步保持不變;
(4)概率分析方法。
模擬退火的基本思想:
(1) 初始化:初始溫度t(充分大),初始解狀態s(是演算法迭代的起點), 每個t值的迭代次數l
(2) 對k=1,……,l做第(3)至第6步:
(3) 產生新解s′
(4) 計算增量δt′=c(s′)-c(s),其中c(s)為評價函式
(5) 若δt′<0則接受s′作為新的當前解,否則以概率exp(-δt′/t)接受s′作為新的當前解.
(6) 如果滿足終止條件則輸出當前解作為最優解,結束程式。終止條件通常取為連續若干個新解都沒有被接受時終止演算法。
(7) t逐漸減少,且t->0,然後轉第2步。
以下是例項程式:
[plain]view plain
copy
print?
main.m 檔案
zuobiao=[0.37 0.75 0.45 0.76 0.71 0.07 0.42 0.59 0.32 0.6 0.3 0.67 0.62 0.67 0.20 ...
0.35 0.27 0.94 0.82 0.37 0.61 0.42 0.6 0.39 0.53 0.4 0.63 0.5 0.98 0.68;
0.91 0.87 0.85 0.75 0.72 0.74 0.71 0.69 0.64 0.64 0.59 0.59 0.55 0.55 0.5...
0.45 0.43 0.42 0.38 0.27 0.26 0.25 0.23 0.19 0.19 0.13 0.08 0.04 0.02 0.85];
plot(zuobiao(1,:),zuobiao(2,:),'g*'),hold on
plot(zuobiao(1,:),zuobiao(2,:))
length=max(size(zuobiao));
%求初始距離..
zhixu=randperm(length); %隨機生成乙個路線經過點的順序
temp=zuobiao(1,:);
newzuobiao(1,:)=temp(zhixu);
temp=zuobiao(2,:);
newzuobiao(2,:)=temp(zhixu);
newzuobiao;
f=juli(newzuobiao);
%引數定義區--------------------------------------
%初始溫度為10000
tmax=100;
tmin=0.001;
%溫度下降速率
down=0.95;
%退火演算法的函式..
figure
t=tmax;
while t>tmin
for n=1:500
newzuobiao=newpath(zuobiao,length);
newf=juli(newzuobiao);
if newfzuobiao=newzuobiao;
f=newf;
elseif randzuobiao=newzuobiao;
f=newf;
end
end
huatu=[zuobiao,zuobiao(:,1)];
plot(huatu(1,:),huatu(2,:)),hold on
plot(huatu(1,:),huatu(2,:),'ro'),hold off
pause(0.00001);
t=t*down;
f;
end
newpath.m 檔案(隨機的交換兩個點的座標)
function zuobiao=newpath(zuobiao,length)
%隨機交換兩個點的座標..
a=ceil(rand(1,2)*length);
qian=a(1);
hou=a(2);
temp=zuobiao(:,qian);
zuobiao(:,qian)=zuobiao(:,hou);
zuobiao(:,hou)=temp;
juli.m 檔案(計算按某種方式圍成的圈的總路程)
function lucheng=juli(zuobiao)
length=max(size(zuobiao));
s=0;
for i=2:length
s=s+sqrt(sum((zuobiao(:,i)-zuobiao(:,i-1)).^2));
end
if length~=2
s=s+sqrt(sum((zuobiao(:,1)-zuobiao(:,length)).^2));
end
lucheng=s;
模擬退火法
模擬退火演算法是一種通用概率演演算法,用於在乙個大的空間內尋找命題的最優解。根據熱力學原理,在溫度為t時,出現能量差為de的降溫概率為p de 標識為 p de exp de kt k為常數,exp為自然數,且de 0,公式指出 溫度越高,出現一次能量差為de的降溫概率越大。溫度越低,出現降溫的概率...
優化方法 模擬退火法
模擬退火法是針對爬山法只能求出區域性最優解提出來的。模擬退火法其實也是一種貪心法,但是他搜尋最優解的過程中引入了隨機因素,允許在中間的計算過程中按照一定的概率來接受相對較差的中間結果,因此它有可能調出區域性最優解尋找到全域性的最優解。模擬退火法演算法描述 若j y i 1 j y i 即移動後得到更...
C 數值計算之模擬退火法簡介 一
摘要 本文簡介了模擬退火的基本思想,以於模擬時的主要引數的選擇根據,然後給出乙個求二維函式極值的具體問題和解法,並給出c 源 l 概述 在管理科學 電腦科學 分子物理學和生物學以及超大規模積體電路設計 設計 影象處理和電子工程等科技領域中,存在大量組合優化瓿。其中許多問題如貨郎擔問題 圖著色問題 裝...