日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟退火粒子群优化算法控制程序

發(fā)布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟退火粒子群优化算法控制程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

%%%%%基于模擬退火粒子群優(yōu)化函數(shù)——輪盤賭策略迭代
%%%%慣性權(quán)重二次縮減


clc
clear
%%%%
%導(dǎo)入訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)
train_input=xlsread('Sample Data2',['AA2:AG111']);
train_out=xlsread('Sample Data2',['Z2:Z111']);
test_input=xlsread('Sample Data2',['AA112:AH141']);
test_out=xlsread('Sample Data2',['Z112:Z141']);
%%歸一化
[train_data ,pstrain0] = mapminmax(train_input',0,1);
[test_data] = mapminmax('apply',test_input',pstrain0);
[train_result,pstrain1] = mapminmax(train_out',0,1);
[test_result] = mapminmax('apply',test_out',pstrain1);
%%取轉(zhuǎn)置
train_data = train_data';
train_result=train_result';
test_data = test_data';
%%參數(shù)初始化
N=80;?? %%%種群規(guī)模
c1=1.5;
c2=2.0;
c1f=0.5;c1i=2.5; %c1f、c1i表示對應(yīng)的最終和初始值
c2f=2.5;c2i=0.5;?????? %%%%認(rèn)知因子
wmax=1.2;
wmin=0.8; %%%%慣性權(quán)重的取值范圍
xmax=[1000 100];
xmin=[0.1 0.01];%%%%%%位置范圍
M=400;????????? %%%%%迭代次數(shù)
%MaxC=10;??????? %%%%%混沌搜索步數(shù)
D=2;??????????????? %%%%%問題維數(shù)
vmax=[500 50];
vmin=[-500 -50];??????? %%%%速度范圍
lamda=0.8;? %%%%退火常數(shù)
eps=10^(-8); %機器的浮點運算誤差限,當(dāng)某個數(shù)小于它時則記為0
%%定義LSSVM相關(guān)參數(shù)
type='function estimation'; %回歸
%type=’c’,表示classification 分類,type=’f’,表示回歸。
kernel='RBF_kernel'; %LSSVM的核函數(shù)選取為徑向基內(nèi)核
proprecess='proprecess';
%proprecess表明數(shù)據(jù)已歸一化處理,original表明數(shù)據(jù)沒有進(jìn)行歸一化處理
format long;
%%
%------初始化種群的個體------------

for i=1:N

??? for j=1:D

??????? x(i,j)=(xmax(1,j)-xmin(1,j))*rand(1,1)+xmin(1,j);? %隨機初始化位置

??????? v(i,j)=vmax(1,j)*rands(1,1);? %隨機初始化速度

??? end
end
%------先計算各個粒子的適應(yīng)度,并初始化個體適應(yīng)度P(i)和群體最優(yōu)適應(yīng)度Pg----------------------

for i=1:N
?%%%%%計算各個粒子的適應(yīng)度p(i)
?gam=x(i,1);sig2=x(i,2);
?model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
?model=trainlssvm(model);
?%求出訓(xùn)練集和測試集的預(yù)測值
?[train_predict_y,zt,model]=simlssvm(model,train_data);
?[test_predict_y,zt,model]=simlssvm(model,test_data);
?%訓(xùn)練集和測試集的預(yù)測數(shù)據(jù)反歸一化
?train_predict=mapminmax('reverse',train_predict_y',pstrain1);%訓(xùn)練集預(yù)測值
?test_predict=mapminmax('reverse',test_predict_y',pstrain1); %測試集預(yù)測值
?%%%%預(yù)測數(shù)據(jù)四舍五入保留一位有效數(shù)字
?train_predict=roundn(train_predict,-1);
?test_predict=roundn(test_predict,-1);
?%計算均方差
?result=[train_out;test_out];
?predict=[train_predict';test_predict'];
?allmse=(sum(((result-predict)./result).^2))/length(result);
?fitness(i)=allmse; %以所有數(shù)據(jù)的預(yù)測值計算的均方差為適應(yīng)度值

??? p(i)=fitness(i);

???? y(i,:)=x(i,:);

end

pg = x(N,:);???????????? %Pg為全局最優(yōu)

for i=1:(N-1)
?%%%%%計算群體粒子的最優(yōu)適應(yīng)度pg
?gam=pg(1);sig2=pg(2);
?model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
?model=trainlssvm(model);
?%求出訓(xùn)練集和測試集的預(yù)測值
?[train_predict_y,zt,model]=simlssvm(model,train_data);
?[test_predict_y,zt,model]=simlssvm(model,test_data);
?%訓(xùn)練集和測試集的預(yù)測數(shù)據(jù)反歸一化
?train_predict=mapminmax('reverse',train_predict_y',pstrain1);%訓(xùn)練集預(yù)測值
?test_predict=mapminmax('reverse',test_predict_y',pstrain1); %測試集預(yù)測值
?%%%%預(yù)測數(shù)據(jù)四舍五入保留一位有效數(shù)字
?train_predict=roundn(train_predict,-1);
?test_predict=roundn(test_predict,-1);
?%計算均方差
?result=[train_out;test_out];
?predict=[train_predict';test_predict'];
?allmse=(sum(((result-predict)./result).^2))/length(result);
?global_fitness=allmse; %以所有數(shù)據(jù)的預(yù)測值計算的均方差為適應(yīng)度值


??? if p(i)

??????? pg=x(i,:);

??? end

end

%%
%------進(jìn)入主要循環(huán),按照公式依次迭代------------

T=global_fitness/log(5); %%%設(shè)置初始溫度

for t=1:M
?groupFit=global_fitness %%%%群體最優(yōu)

%%%根據(jù)輪盤賭策略公式確定當(dāng)前溫度下各粒子的適配值
?for i=1:N
? Tfit(i) = exp( - (p(i) - groupFit)/T);
?end
?SumTfit = sum(Tfit);
? ?
??? Tfit = Tfit/SumTfit;
? ?
??? pBet = rand();
?
?for i=1:N
? ComFit(i)=sum(Tfit(1:i));
? if pBet<=ComFit(i)
?? pg_plus=x(i,:);
?? break;
? end
?end
???? c1f=c1i+(c1f-c1i)*t/M;%%c1f遞減
??? c2f=c2i+(c2f-c2i)*t/M; %%c2f遞增
?C=c1+c2;
?ksi=2/abs(2-C-sqrt(C^2-4*C));
%%%%%%%更新粒子的速度與位置
?for i=1:N
? v(i,:)=ksi*(v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg_plus-x(i,:)));
? x(i,:)=x(i,:)+v(i,:);
?
? %%%限制粒子的速度與位置的大小在取值范圍之內(nèi)
? for j=1:D
?? if v(i,j)>vmax(1,j)
???????????????????? v(i,j)=vmax(1,j);
???????????????? end
???????????????? if v(i,j)
????????????????????? v(i,j)=vmin(1,j);
???????????????? end
???????????????? if x(i,j)>xmax(1,j)
???????????????????? x(i,j)=xmax(1,j);
???????????????? end
???????????????? if x(i,j)
???????????????????? x(i,j)=xmin(1,j);
???????????????? end
???????????? end
?%%%%%%%計算更新后粒子的適應(yīng)度
? gam=x(i,1);sig2=x(i,2);
? model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
? model=trainlssvm(model);
? %求出訓(xùn)練集和測試集的預(yù)測值
? [train_predict_y,zt,model]=simlssvm(model,train_data);
? [test_predict_y,zt,model]=simlssvm(model,test_data);
? %訓(xùn)練集和測試集的預(yù)測數(shù)據(jù)反歸一化
? train_predict=mapminmax('reverse',train_predict_y',pstrain1);%訓(xùn)練集預(yù)測值
? test_predict=mapminmax('reverse',test_predict_y',pstrain1); %測試集預(yù)測值
? %%%%預(yù)測數(shù)據(jù)四舍五入保留一位有效數(shù)字
? train_predict=roundn(train_predict,-1);
? test_predict=roundn(test_predict,-1);
? %計算均方差
? result=[train_out;test_out];
? predict=[train_predict';test_predict'];
? allmse=(sum(((result-predict)./result).^2))/length(result);
? fitness(i)=allmse; %以所有數(shù)據(jù)的預(yù)測值計算的均方差為適應(yīng)度值

? local_fit(i)=fitness(i);
? if local_fit(i)


?? p(i)=local_fit(i);
?? y(i,:)=x(i,:);
? end
? if p(i)?? pg=y(i,:);
? end
?
?end
?T=T*lamda;%%%%%%降溫
?yy(t)=groupFit;
?
end
xm=pg'
fv=groupFit
hold on
plot(yy,'g')
hold off
%title(['適應(yīng)度曲線? ' '終止代數(shù)=' num2str(M)]);
%xlabel('進(jìn)化代數(shù)');ylabel('適應(yīng)度');

?

?

總結(jié)

以上是生活随笔為你收集整理的模拟退火粒子群优化算法控制程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。