3 仿真结果
clearclcclose all%% 参数初始化pso_option =
struct('c1',2.05,'c2',2.05,'maxgen',5000,'sizepop',30, ...
'k',0.6,'wV',1.1,'wP',1.1,'v',5, ... 'popmax',30,'popmin',-30);D=10;Vmax =
pso_option.k*pso_option.popmax;Vmin = -Vmax ;eps = 10^(-5);%% 产生初始粒子和速度for
i=1:pso_option.sizepop % 随机产生种群和速度 pop(i,:) = (pso_option.popmax-
pso_option.popmin)*rand(1,D)+pso_option.popmin; V(i,:)=Vmax*rands(1,D);
% 计算初始适应度 fitness(i)=myfunc_fit1(pop(i,:)); end% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值local_fitness=fitness; % 个体
极值初始化global_x=pop(bestindex,:); % 全局极值点local_x=pop; % 个体极值点初始化%
每一代种群的平均适应度avgfitness_gen = zeros(1,pso_option.maxgen);%% 迭代寻优for
i=1:pso_option.maxgen for j=1:pso_option.sizepop %速度更新
V(j,:) = pso_option.wV*V(j,:) + pso_option.c1*rand*(local_x(j,:) - pop(j,:))
+ pso_option.c2*rand*(global_x - pop(j,:)); if find(V(j,:) > Vmax)
V_maxflag=find(V(j,:) > Vmax); V(j,V_maxflag) = Vmax; end
if find(V(j,1) < Vmin) V_minflag=find(V(j,1) < Vmin);
V(j,V_minflag) = Vmin; end %种群更新
pop(j,:)=pop(j,:) + pso_option.wP*V(j,:); if find(pop(j,:) >
pso_option.popmax) pop_maxflag=find(pop(j,:) > pso_option.popmax);
pop(j,pop_maxflag) = pso_option.popmax; end if find(pop(j,:)
< pso_option.popmin) pop_minflag=find(pop(j,:) < pso_option.popmin);
pop(j,pop_minflag) = pso_option.popmin; end
% 自适应粒子变异 if rand>0.5 k=ceil(2*rand); pop(j,k)
= (pso_option.popmax-pso_option.popmin)*rand + pso_option.popmin; end
%适应度值 fitness(j)=myfunc_fit1(pop(j,:)); %个体
最优更新 if fitness(j) < local_fitness(j) local_x(j,:) =
pop(j,:); local_fitness(j) = fitness(j); end if
fitness(j) == local_fitness(j) && length(pop(j,:) < local_x(j,:))
local_flag=find(pop(j,:) < local_x(j,:)); local_x(j,local_flag) =
pop(j,local_flag); local_fitness(j) = fitness(j); end
%群体最优更新 if fitness(j) < global_fitness global_x =
pop(j,:); global_fitness = fitness(j); end % if
abs( fitness(j)-global_fitness )<=eps && length(pop(j,:) < global_x)%
global_flag=find(pop(j,:) < global_x);% global_x(global_flag) =
pop(j,global_flag);% global_fitness = fitness(j);% end
end fit_gen(i)=global_fitness; avgfitness_gen(i) =
sum(fitness)/pso_option.sizepop;endxlswrite('fit_gen.xlsx',fit_gen);xlswrite('av
gfitness_gen.xlsx',avgfitness_gen);%% 结果分析figure;hold on;plot(fit_gen,'r*-
','LineWidth',1.5);plot(avgfitness_gen,'o-','LineWidth',1.5);legend('最佳适应
度','平均适应度');xlabel('进化代数','FontSize',12);ylabel('适应
度','FontSize',12);grid on;bestX = global_x;bestCVmse =
fit_gen(pso_option.maxgen);line1 = '适应度曲线MSE[PSOmethod]';line2 = ['(参数
c1=',num2str(pso_option.c1), ... ',c2=',num2str(pso_option.c2),',终止代数=',
... num2str(pso_option.maxgen),',种群数量pop=', ...
num2str(pso_option.sizepop),')'];title({line1;line2},'FontSize',12);