2 部分代码
3 仿真结果
%% 粒子群算法function
[Best_pos,Best_score,curve]=PSO(pop,Max_iter,lb,ub,dim,fobj,Vmax,Vmin)%% 参数设置w
= 0.9; % 惯性因子c1 = 2; % 加速常数c2 = 2; % 加速常数Dim = dim;
% 维数sizepop = pop; % 粒子群规模maxiter = Max_iter; % 最大迭代次
数if(max(size(ub)) == 1) ub = ub.*ones(1,dim); lb = lb.*ones(1,dim); endfun
= fobj; %适应度函数%% 粒子群初始化Range = ones(sizepop,1)*(ub-lb);pop =
rand(sizepop,Dim).*Range + ones(sizepop,1)*lb; % 初始化粒子群V =
rand(sizepop,Dim)*(Vmax-Vmin) + Vmin; % 初始化速度fitness =
zeros(sizepop,1);for i=1:sizepop fitness(i,:) = fun(pop(i,:));
% 粒子群的适应值end%% 个体极值和群体极值[bestf,
bestindex]=min(fitness);zbest=pop(bestindex,:); % 全局最佳gbest=pop;
% 个体最佳fitnessgbest=fitness; % 个体最佳适应值fitnesszbest=bestf;
% 全局最佳适应值%% 迭代寻优iter = 0;while( (iter < maxiter )) for
j=1:sizepop % 速度更新 V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) -
pop(j,:)) + c2*rand*(zbest - pop(j,:)); if V(j,:)>Vmax
V(j,:)=Vmax; end if V(j,:)<Vmin V(j,:)=Vmin; end
% 位置更新 pop(j,:)=pop(j,:)+V(j,:); for k=1:Dim
if pop(j,k)>ub(k) pop(j,k)=ub(k); end if
pop(j,k)<lb(k) pop(j,k)=lb(k); end end %
适应值 fitness(j,:) =fun(pop(j,:)); % 个体最优更新 if
fitness(j) < fitnessgbest(j) gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j); end % 群体最优更新 if fitness(j)
< fitnesszbest zbest = pop(j,:); fitnesszbest = fitness(j);
end end iter = iter+1; % 迭代次数更新
curve(iter) = fitnesszbest;end%% 绘图Best_pos = zbest;Best_score =
fitnesszbest;end
评论0