0.引言
在第六期中作者介绍了基于Sine混沌映射的改进粒子群优化算法,对Sine混沌映射及相关matlab代码进行分享,并根据目标函数,对SIne-PSO算法与传统PSO算法进行对比,得出采用Sine混沌映射的PSO算法具有更好的求解精度及稳定性。然而尽管SIne混沌映射能够在上述对比中取得较好的结果,但其仍具有概率密度分布不均的缺点。因此,本文参照文献[1],利用改进的Sine混沌映射策略作为PSO算法的种群初始化改进策略。
1.改进SIne混沌映射策略原理及matlab代码
由于SIne混沌映射存在概率密度分布不均的缺点,因此采用改进的Sine策略作为PSO算法种群初始化手段,使混沌映射空间遍历性更好,种群更加多样。改进后的Sine混沌映射策略如下:
式中:、
取值范围为(0,1);k为控制参数,取值1200;
为迭代混沌序列值;mod(b,1)表示对b取1的余数。
根据上述公式,matlab代码如下:
%改进sine混沌映射
function best_x=Isine_int(D,Lb,Ub)
k=1200;%控制参数
ax=rand();%随机参数
bx=rand();%随机参数
for L=2:D+1
ax(1,L)=sin(k*pi*ax(1,L-1));
bx(1,L)=sin(k*pi*bx(1,L-1));
x_sine(1,L-1)=mod((ax(1,L)+bx(1,L)),1);%迭代的混沌序列值
end
%将改进后的sine混沌序列映射至解空间
best_x=Lb+x_sine.*(Ub-Lb);
end
2.基于改进Sine混沌映射策略的ISPSO优化算法
文章第1节中已经对改进Sine混沌映射策略的原理及matlab代码进行了相应的讲解及复现,现将改进Sine混沌映射策略与传统PSO算法、基于Sine的PSO算法相结合,并基于相应目标函数进行求解,以验证改进PSO算法的可行性,具体matlab代码如下:
%% 基于ISine混沌映射的改进粒子群算法主程序
clc;
clear all;
close all
%% 算法基本参数设置
c1=2; %学习因子1
c2=2;%学习因子2
w=0.7;%惯性权重
MaxDT=500;%最大迭代次数
D=3;%搜索空间维数(未知数个数)
N=30;%初始化群体个体数目
Lb=-100.*ones(1,D);%种群解的下限
Ub=100.*ones(1,D);%种群解的上限
Vmax=1.*ones(1,D);%速度上限
Vmin=-1.*ones(1,D);%速度下限
a=0.5;%Tent混沌系数,0~1之间
Best_f=[];pop=[];
%% 基于ISine混沌映射的种群初始化
for L=1:N
pop(L,:)=Isine_int(D,Lb,Ub);
Best_f(1,L)=fitness_obl(pop(L,:));
end
V=rand(N,D);
%计算各个粒子的适应度值并初始化Pi和Pg
[fitnessgbest bestindex]=min(Best_f);
gbest=pop(bestindex,:);
pbest=pop;
fitnesspbest=Best_f;
%% 粒子群算法更新迭代部分
for i=1:MaxDT
for j=1:N
%种群更新
V(j,:)=w*V(j,:)+c1*rand*(pbest(j,:)-pop(j,:))+c2*rand*(gbest-pop(j,:));
%更新速度边界检查
I=V(j,:)<Vmin;
V(j,I)=Vmin(I);
U=V(j,:)>Vmax;
V(j,U)=Vmax(U);
pop(j,:)=pop(j,:)+V(j,:);
%粒子边界检查
PI=pop(j,:)<Lb;
pop(j,PI)=Lb(PI);
PU=pop(j,:)>Ub;
pop(j,PU)=Ub(PU);
%计算更新后种群的适应度函数值
Best_f(j)=fitness_obl(pop(j,:));
%个体极值更新
if Best_f(j)<fitnesspbest(j)
pbest(j,:)=pop(j,:);
fitnesspbest(j)=Best_f(j);
end
%全局极值更新
if Best_f(j)<fitnessgbest
gbest=pop(j,:);
fitnessgbest=Best_f(j);
end
end
%记录粒子全局最优解
Fgbest(i)=fitnessgbest;
end
%% 结果可视化
figure
plot(Fgbest)
title(['适应度曲线 ' '终止次数=' num2str(MaxDT)]);
xlabel('进化代数');
ylabel('适应度')
为验证改进后算法的求解效果,本文将采用ISine策略改进前后及原始PSO算法寻优结果进行对比,采用测试函数与第1-5期测试函数相同,此处不再赘述。
根据上述目标函数,基于ISine改进的PSO算法适应度曲线如下:
图1 基于ISine-PSO算法的适应度迭代曲线(粒子维度为3)
图2 标准粒子群算法适应度曲线(粒子维度为3)
根据上述对比可知,采用ISIne混沌映射策略后,能够获得更好的初始解,解的质量更高,有助于PSO算法更快的实现收敛,并获取更好的求解精度。为了验证基于ISIne混沌映射粒子群算法的求解稳定性,分别对该目标函数求解10次,并分别记录10次中目标函数最小值、最大值及均值。运行结果如下所示:
粒子维度3 | |||
运行次数 | 标准粒子群算法 | Sine-PSO | ISine-PSO |
1 | 0.0831 | 7.43E-31 | 2.30E-30 |
2 | 0.0547 | 5.55E-32 | 5.72E-28 |
3 | 0.0294 | 2.23E-29 | 7.30E-31 |
4 | 0.0119 | 1.23E-32 | 2.92E-29 |
5 | 0.0477 | 3.18E-29 | 6.17E-27 |
6 | 0.0399 | 1.39E-31 | 3.06E-30 |
7 | 0.0459 | 9.76E-29 | 4.19E-31 |
8 | 0.0235 | 2.13E-29 | 9.33E-30 |
9 | 0.0043 | 5.18E-31 | 4.63E-30 |
10 | 0.0532 | 7.53E-29 | 7.27E-27 |
均值 | 0.03936 | 2.49776E-29 | 1.40588E-27 |
最小值 | 0.0043 | 1.2326E-32 | 4.19082E-31 |
最大值 | 0.0831 | 9.76339E-29 | 7.26677E-27 |
根据上述结果能够发现,尽管采用ISine算法后,PSO算法能够具有较好的提升,但与Sine混沌映射相比,当粒子维度为3时,ISine算法改进的PSO算法解的精度及稳定性反而有所降低。为了进一步对比二者的求解情况,分别对该测试函数进行粒子维度为5、10、50及100情况下适应度函数对比情况,具体结果如下:
粒子维度5时二者适应度值对比情况:
粒子维度5 | ||
运行次数 | Sine-PSO | ISine-PSO |
1 | 1.62E-22 | 1.52E-21 |
2 | 1.03E-22 | 2.01E-22 |
3 | 7.04E-25 | 4.74E-24 |
4 | 4.27E-21 | 1.05E-23 |
5 | 5.66E-22 | 5.89E-23 |
6 | 4.82E-23 | 4.93E-24 |
7 | 7.58E-25 | 4.02E-23 |
8 | 1.32E-25 | 9.18E-23 |
9 | 2.91E-23 | 5.71E-22 |
10 | 2.79E-22 | 4.15E-22 |
均值 | 5.46339E-22 | 2.91637E-22 |
最小值 | 1.31822E-25 | 4.74013E-24 |
最大值 | 4.27388E-21 | 1.51773E-21 |
粒子维度为10时,二者适应度函数的对比情况:
粒子维度10 | ||
运行次数 | ISine-PSO | Sine-PSO |
1 | 2.15E-05 | 1.01E-06 |
2 | 7.47E-07 | 3.68E-09 |
3 | 2.25E-05 | 0.000205002 |
4 | 1.37E-05 | 7.03E-05 |
5 | 6.15E-06 | 2.19E-07 |
6 | 2.84E-05 | 4.47E-10 |
7 | 3.79E-06 | 2.93E-09 |
8 | 2.83E-05 | 8.94E-09 |
9 | 4.49E-09 | 2.84E-06 |
10 | 4.29E-06 | 4.63E-06 |
均值 | 1.29349E-05 | 2.84036E-05 |
最小值 | 4.49273E-09 | 4.47233E-10 |
最大值 | 2.84421E-05 | 0.000205002 |
粒子维度为50时,二者适应度函数的对比情况:
粒子维度50 | ||
运行次数 | ISine-PSO | Sine-PSO |
1 | 3.716615135 | 4.65689791 |
2 | 3.126207275 | 4.053907075 |
3 | 2.170533957 | 5.942409671 |
4 | 2.263532591 | 2.69338274 |
5 | 3.700010786 | 2.92443506 |
6 | 2.067282683 | 3.562016503 |
7 | 3.248771805 | 19803.65408 |
8 | 2.37256134 | 5.317398751 |
9 | 3.416930864 | 9907.125206 |
10 | 4.292095684 | 5.882953292 |
均值 | 3.037454212 | 2974.581269 |
最小值 | 2.067282683 | 2.69338274 |
最大值 | 4.292095684 | 19803.65408 |
粒子维度为100时,二者适应度函数的对比情况:
粒子维度100 | ||
运行次数 | ISinePSO | Sine-PSO |
1 | 31.3088386 | 10045.23924 |
2 | 30.57659121 | 10039.88843 |
3 | 27.53145305 | 288.447776 |
4 | 35.8015407 | 183.8666929 |
5 | 44.21608253 | 19938.62958 |
6 | 30.89931467 | 10045.64049 |
7 | 34.42130675 | 10021.72415 |
8 | 33.42632033 | 738.2758468 |
9 | 29.05607031 | 355.0614265 |
10 | 30.65269607 | 10011.66353 |
均值 | 32.78902142 | 7166.843716 |
最小值 | 27.53145305 | 183.8666929 |
最大值 | 44.21608253 | 19938.62958 |
根据上述结果可知,当粒子维度为3时ISine-PSO算法求解能力弱于Sine-PSO算法,但随着粒子维度的增加ISine-PSO算法的求解稳定性及优越性更加突出,以粒子维度为100时为例,采用ISine混沌映射策略的PSO算法适应度函数值明显优于Sine-PSO算法,且领先幅度较大。而当粒子维度为50时,Sine-PSO算法在多数求解过程中与ISine-PSO算法差距不打,但存在某几次时适应度函数较大的情况,这可能与上述Sine混沌光映射的缺点有关,导致在迭代次数500次的情况下Sine-PSO算法没能够找到较好的精确解,且该情况随着粒子维度的增加变得更加明显。
3.总结
根据第2节中的仿真结果可知,Sine-PSO算法在地位空间中具有较好的求解性能,但随着粒子解维度的逐渐提升,Sine混沌映射策略本身的缺点被逐渐放大,从而导致无法获取较好的精确解。而ISine混沌映射策略能够更好的处理高维粒子优化求解问题,当粒子维度逐渐升高时,依旧能够获取较好的初始解及精确解。
限于作者水平有限,上述文章在复现过程中可能存在不足,欢迎大家批评指正。本文在写作过程中Sine混沌映射原理参照下述文献进行,在此对该文献作者进行感谢,若有侵权,请联系我进行修改删除。参考文献如下:
[1]刘磊;姜博文;周恒扬;浦晨玮;钱鹏飞;刘波. 融合改进Sine混沌映射的新型粒子群优化算法 [J]. 西安交通大学学报, 2023, 57 (08): 182-193.
往期传送门:
【Matlab群体智能算法第一期】粒子群算法及其变体(一)_粒子群算法示意图-CSDN博客
【Matlab群体智能算法第二期】基于反向学习的改进粒子群算法(含matlab代码)-CSDN博客
【Matlab群体智能算法第三期】基于Tent混沌映射的TPSO算法(含完整matlab代码)-CSDN博客
【Matlab群体智能算法第四期】基于Tent混沌映射、自适应t分布和动态选择策略的TDPSO算法(含完整matlab代码)-CSDN博客