資源簡介
PSO粒子群優化算法MATLAB源代碼,并且進行了ACKELY多峰值函數的測試
代碼片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%PSO—ACKELY測試%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%程序初始化
%目標函數?NEEDEL???-20*exp(-0.2*sqrt(1/2*(test(1)^2+test(2)^2)))-exp(1/2*(cos(2*pi*test(1))+cos(2*pi*test(2))))+22.71282;
%進化次數50
%種群規模?20
%function?result=aim(test)?為目標函數
???%test(1)=x??test(2)=y
%程序初始化
function?PSO_SA_Ackley
clc;
clear?all;
gen=50;?????%設置進化代數
popsize=20;?????%設置種群規模大小
best_in_history(gen)=inf;???%初始化全局歷史最優解
max_velocity=1;???????%最大速度限制
best_fitness=inf;???????%全局最優
pop(popsize8)=0;?????????%初始化種群
c1=0.09;
c2=0.4;
w=0.98;
TN=2;
T=max_velocity;???????
k=0.8;
num=2;
high=5;
low=-5;
partx=zeros(popsizegen);
party=zeros(popsizegen);
for?i=1:popsize
????pop(i1)=high*(2*rand()-1);?????%初始化種群中的粒子位置
????pop(i2)=high*(2*rand()-1);?????%初始化種群中的粒子位置
????pop(i5)=pop(i1);??%初始狀態下個體最優值等于初始位置
????pop(i6)=pop(i2);??%初始狀態下個體最優值等于初始位置
????pop(i3)=0.2*(rand()*2-1);????%初始化種群微粒速度
????pop(i4)=0.2*(rand()*2-1);????%初始化種群微粒速度
????pop(i7)=inf;
????pop(i8)=inf;
end
??????gbest_x=pop(11);???%全局最優初始值為種群第一個粒子的位置
??????gbest_y=pop(12);
for?exetime=1:gen
%計算適應值并賦值
for?i=1:popsize
?????pop(i8)=aim(pop(i1:num));
????if?pop(i7)>pop(i8)????%若當前適應值優于個體最優值,則進行個體最優信息的更新
????????pop(i7)=pop(i8);??????????%適值更新
????????pop(i5:6)=pop(i1:2);??????%位置坐標更新
????end
end
%計算完適應值后尋找當前全局最優位置并記錄其坐標
if?best_fitness>min(pop(:7))
????best_fitness=min(pop(:7));????%全局最優值
????gbest_x=pop(find(pop(:7)==min(pop(:7)))1);????%全局最優粒子的位置???
????gbest_y=pop(find(pop(:7)==min(pop(:7)))2);
end
?%???plot(gbest_xgbest_y‘bx‘);
??%??hold?on;
best_in_history(exetime)=best_fitness;??%記錄當前全局最優
%實時輸出結果
%輸出當前種群中粒子位置
%subplot(121);
for?i=1:popsize
?%???plotyy(pop(i1)pop(i2)‘plot‘);
?%???hold?on;
???partx(iexetime)=pop(i1);??
???party(iexetime)=pop(i2);
end
%pause(0.1);
%plot(gbest_xgbest_y‘ro‘);axis([-5.125.12-5.125.12]);
hold?on;
%subplot(122);
%figure(2)
%axis([0gen-0.010.01]);
%if?exetime-1>0
?%???line([exetime-1exetime][best_in_
- 上一篇:GSO算法matlab代碼
- 下一篇:500w逆變器
評論
共有 條評論