資源簡介
以優化SVM算法的參數c和g為例,對SA(模擬退火)算法MATLAB源碼進行了逐行中文注解。是很好的學習材料。

代碼片段和文件信息
%?使用模擬退火法求函數?f(xy)=x^2+y^2的最小值
%?使用METROPOLIS接受準則進行模擬
%%?清空環境
tic?%?計時
clear
clc
close?all
format?compact
%%?繪制目標函數圖像
x=-5:0.1:5;
y=-5:0.1:5;
[XY]=meshgrid(xy);
value=X.*X+Y.*Y;
figure(‘Name‘‘目標函數圖像‘)
mesh(XYvalue)
%%?SA算法主程序
lb=[-5-5];?%?參數取值下界
ub=[55];?%?參數取值上界
%?冷卻表參數
MarkovLength=1000;?%?馬可夫鏈長度
DecayScale=0.95;?%?衰減參數
StepFactor=0.02;?%?Metropolis步長因子
Temperature0=100;?%?初始溫度
Temperatureend=1;?%?最終溫度
Boltzmann_con=1;?%?Boltzmann常數
AcceptPoints=0.0;?%?Metropolis過程中總接受點
%?隨機初始化參數
range=ub-lb;
Par_cur=rand(size(lb)).*range+lb;?%?用Par_cur表示當前解
Par_best_cur=Par_cur;?%?用Par_best_cur表示當前最優解
Par_best=rand(size(lb)).*range+lb;?%?用Par_best表示冷卻中的最好解
%?每迭代一次退火(降溫)一次,直到滿足迭代條件為止
t=Temperature0;
itr_num=0;?%?記錄迭代次數
while?t>Temperatureend
????itr_num=itr_num+1;
????t=DecayScale*t;?%?溫度更新(降溫)
????for?i=1:MarkovLength
????????%?在此當前參數點附近隨機選下一點
????????p=0;
????????while?p==0
????????????Par_new=Par_cur+StepFactor.*range.*(rand(size(lb))-0.5);
????????????%?防止越界
????????????if?sum(Par_new>ub)+sum(Par_new
????????????????p=1;
????????????end
????????end
????????%?檢驗當前解是否為全局最優解
????????if?(objectFunction(Par_best)>objectFunction(Par_new))
????????????%?保留上一個最優解
????????????Par_best_cur=Par_best;
????????????%?此為新的最優解
????????????Par_best=Par_new;
????????end
????????%?Metropolis過程
????????if?(objectFunction(Par_cur)-objectFunction(Par_new)>0)
????????????%?接受新解
????????????Par_cur=Par_new;
????????????AcceptPoints=AcceptPoints+1;
????????else
????????????changer=-1*(objectFunction(Par_new)-objectFunction(Par_cur))/Boltzmann_con*Temperature0;
????????????p1=exp(changer);
????????????if?p1>rand
????????????????Par_cur=Par_new;
????????????????AcceptPoints=AcceptPoints+1;
????????????end
????????end
????end
end
%%?結果顯示
disp([‘最小值在點:‘num2str(Par_best)]);
Objval_best=?objectFunction(Par_best);
disp([‘最小值為:‘num2str(Objval_best)]);
%%?顯示運行時間
toc
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2179??2016-09-30?14:05??my_SA_exmp.m
?????文件????????3476??2016-09-30?16:18??my_SA_SVM_exmp.m
?????文件?????????113??2016-09-30?13:40??ob
?????文件?????????414??2016-09-30?15:49??objfun_svm.m
?????文件???????20168??2016-09-30?15:49??wine.mat
- 上一篇:工資系統UML圖
- 下一篇:GSA引力搜索算法MATLAB源碼,中文詳細注解
評論
共有 條評論