1 简介
Kennedy等人于1995年提出的粒子群优化算法具有概念简明、参 数 易 调 节、计算效率高和优化精度好的优点,因此被 广 泛 应 用 于 解 决 现 实 生 活 中 各 个 领 域 的 优 化 问题。但是,随着优化问题复杂度的提高,传统 PSO 算法的寻优效率 越 来 越 低。例 如,在解决复杂的多峰测试问题时,PSO 算法存在早熟收敛现象,容 易 陷 入 局 部 最 优。在PSO 算法中,种群中的每个粒子都代表待优化问题的一个潜在解,其中粒子状态利用速度向量和位置向量进行表征。在粒子进化过程中,PSO 算法中更新策略的主要目的是推动种群逼近全局最优解。然 而,当全局最优解周围存在多个局部最优 时,种群在飞行过程中有可能会陷入局部最优。因此,如何 调 整 PSO 算法的飞行参数或重新 设计进化机制以提高种群的多样性和优化解的精度是亟待解决的问题。
为了取得全局探索和局部开发的最佳平衡,本 文 提 出了一种基于竞争学习思想的进化策略,并将其集成到基本PSO 算法中,构 建 了 CLPSO (competitivelearning-basedPSO)算法。在 CLPSO中,通过将种群动态地分成3个子群,并为每个子群中的粒子设计不同的进化机制,从 而 增强种群多样 性,提高局部搜索能力,避免了粒子对全局最优粒子的盲目跟 随,克服了在求解多峰问题时容易陷入局部最优的缺陷。具体改进思路详细参照文末文献。
2 部分代码
%_________________________________________________________________________%
% 粒子群优化算法 %
%_________________________________________________________________________%
function [ zbest ,yy,fitnesszbest]=pso(sizepop,Max_iter,popmin,popmax,dim,fobj,Vmax,Vmin,c1,c2)
X0=initialization(sizepop,dim,popmax,popmin);%种群初始化
V=rand(sizepop,dim);%初始化速度
%% 产生初始粒子和速度
pop= X0;
%计算初始适应度值
fitness = zeros(1,sizepop);
for i = 1:sizepop
fitness(i) = fobj(pop(i,:));%计算适应度值
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:Max_iter
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%适应度值
fitness(j)=fobj(pop(j,:));
end
for j=1:sizepop
%个体最优更新
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
yy(i)=fitnesszbest;
end
3 仿真结果
4 参考文献
[1]张钰,王蕾,周红标,赵环宇.基于竞争学习的粒子群优化算法设计及应用[J/OL].计算机测量与控制:1-9[2021-06-18]
部分理论引用网络文献,若有侵权联系博主删除。