自适应粒子群优化算法的MATLAB性能仿真
UP目录
一、理论基础
粒子群优化(PSO)是一种基于群体的随机优化技术。与其它基于群体的进化算法相比,它们均初始化为一组随机解,通过迭代搜寻最优解。不同的是:进化计算遵循适者生存原则,而PSO模拟社会,将每一个可能产生的解表述为群中的一个微粒,每个微粒都具有自己的位置向量和速度向量,以及一个由目标函数决定的适应度。所有微粒在搜索空间中以一定的速度飞行,通过追随当前搜索到的最优值来寻找全局最优。
PSO初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。
基本粒子群算法的流程如下:
第一:首先对粒子群的随机位置和速度进行初始化,即在速度和位置的限定
范围内产生随机值;
第二:利用适应度函数计算每个粒子的适应值;
第三:比较每个粒子的适应值和自身所经历过最好位置Pi的适应值,若当前值更好,则将当前值作为自身最好位置;
第四:比较每个粒子的适应值和全局最好位置Pg的适应值,若当前值更好,则将当前值作为全局最好位置;
第五:更新粒子的速度和位置;
第六:如此时已满足结束条件,即达到最大的迭代次数或最小的错误要求,则进化终止,输出最优解,否则,转到步骤2。
自适应的粒子群算法,在原有的基础上,它增加了3个改进的方面:
① 进化状态评估(ESE):
每一次粒子群移动后,都有一个全局的状态记录,目的是为了收敛的状态进行评估和划分,为后面自适应参数(c1,c2,w)提供基础
状态的划分步骤:
步骤一:计算每个粒子i的相对于其他粒子的平均距离(欧式距离),与其他粒子都计算一遍距离,最后求平均值;公式如下:
其中N是种群的大小,D为问题的维数,在我们优化SVM问题中,问题的维数为2,因为我们只优化2个参数(c,g)
步骤二:在众多di中选取dg,g为当前最优粒子的下标, 故dg代表了当前最优粒子与其他粒子的平均距离;同时选取中dmax与dmin,最大与最小平均距离;计算进化因子f;公式如下:
步骤三:根据进化因子f,选择当前隶属于哪一种状态,如下图,采用有规则基准的方式:
(1) 参数c1:个体认知加速度,促进该粒子获得它历史上最好的位置,有利于开发局部中最好的解,增加粒子群的多样性
(2) 参数c2:社会认知加速度,它能推进粒子向全局中最好的区域收敛,加快收敛速度
二、核心程序
.............................................................
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=init+range*rand(1,n); %初始种群
V(i,:)=rand(1,n); %初始化速度
%计算适应度
fitness(i)=Rastrigrin(pop(i,:)); %染色体的适应度
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
i
ind_1=ind;
factor=calfactor(pop,sizepop,zbest);
if i==1
ind_1=1;
end
ind=fuzzyclassification(factor,ind_1);
if ind==1
c1=c1+unifrnd(0.05,0.1);
c2=c2-unifrnd(0.05,0.1);
elseif ind==2
c1=c1+0.5*unifrnd(0.05,0.1);
c2=c2-0.5*unifrnd(0.05,0.1);
elseif ind==3
c1=c1+0.5*unifrnd(0.05,0.1);
c2=c2+0.5*unifrnd(0.05,0.1);
p=zbest;
d=unidrnd(n);
p(d)=p(d)+(popmax-popmin)*normrnd(0,sig^2);
p(find(p(:)>popmax))=popmax;
p(find(p(:)<popmin))=popmin;
cv=Rastrigrin(p);
if cv<fitnesszbest
zbest=p;
else
[aa,bb]=max(fitness);
pop(bb,:)=p;
end
else
c1=c1-unifrnd(0.05,0.1);
c2=c2+unifrnd(0.05,0.1);
end
w=1/(1+1.5*exp(-2.6*factor));
if c1<1.5
c1=1.5;
elseif c1>2.5
c1=2.5;
end
if c2<1.5
c2=1.5;
elseif c2>2.5
c2=2.5;
end
crange=c1+c2;
c1=(c1/crange)*4;
c2=(c2/crange)*4;
sig=sigmax-(sigmax-sigmin)*(i/maxgen);
for j=1:sizepop
%速度更新
V(j,:) = w*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)=Rastrigrin(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
%% 结果分析
figure(1);
plot(yy,'r');
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
up105
三、测试结果
在matlab2021a中仿真得到如下的效果:
相关文章
- 【DSP视频教程】DSP视频教程第5期:Matlab生成C算法文件在STM32上运行,相比Simulink生成C工程具有更广泛适用性(2022-03-27)
- 多目标遗传优化算法NSGA-Ⅱ算法(Matlab)
- 基于机器学习算法与历史数据预测未来的站点关闭(Matlab代码实现)
- 基于多目标灰狼算法的冷热电联供型微网低碳经济调度(Matlab代码实现)
- 【图像分割】基于遗传算法的进化聚类技术对彩色图像进行分割(Matlab代码实现)
- 基于原子势函数及人工蜂群算法进行形状匹配优化(Matlab代码实现)
- m瑞利信道下对比ZF-SIC,MMSE-SIC,MRC三种均衡算法的误码率matlab仿真
- m基于EM参数估计的Gamma随机过程电池剩余寿命预测matlab仿真
- m基于OFDM系统,对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析
- m基于蚁群优化模糊控制的机器人路线规划和避障算法matlab仿真
- m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深度图像
- 二维图像的原子匹配追踪投影算法的图像重建matlab仿真
- MATLAB | 二维波函数坍缩算法随机地图生成
- MATLAB | 如何绘制这种带竖线散点的核密度图
- VR视频流的预测、通信和计算持续时间优化(Matlab代码实现)
- 基于智能优化算法PSO/GWO/AFO+柔性车间生产调度(Matlab代码实现)
- matlab sobel和canny边缘检测代码
- GMM高斯混合模型的EM算法参数估计matlab仿真
- m基于matlab的LDPC译码算法性能仿真,对比BP译码,最小和译码以及归一化偏移最小和译码三种算法
- m基于整数序列的QC-LDPC的稀疏校验矩阵构造算法性能对比matlab仿真,对比差分序列,PEG,Mackey等
- 基于FPGA的图像sobel边缘提取算法实现,包含testbench和matlab验证程序
- Matlab在线IDE:MATLAB Online介绍与计算定积分案例
- Matlab使用笔记(四):将编写完matlab函数放入simulink模型