这效果直接起飞!基于莱维飞行的量子粒子群,在CEC2005和CEC2017函数上跑

今天为大家带来的智能优化算法是:基于莱维飞行的量子粒子群

写此代码的初衷是收到后台小伙伴的留言,需要量子粒子群在CEC2017函数上跑,结果,作者写完之后,发现量子粒子群的效果虽然相较于原始的粒子群略有改善,但是改善的程度很小。寻思就这么出一期文章,也太敷衍大家了,于是乎---作者就将莱维飞行加入到量子粒子群中,结果发现,效果还是不错滴。

这里多说一句,也是与身边的一位科研大佬(兼红颜知己)(在硕士期间就能发两篇SCI一区的大佬,全程只靠自己不靠别人带)学习沟通过后,才知道的:在一些高水平的论文中,一般会将CEC2005和CEC2017作为验证智能算法的测试函数,这两个函数测试集最为经典,其中CEC2005用的频次要比CEC2017用的较多。本篇文章一次性打包,代码中已经全部写好。

依旧是先看结果,首先是CEC2005函数集的测试,其中QPSO是量子粒子群,LQPSO是基于莱维飞行的量子粒子群。随机挑选几个函数:

cc0822337e0fc53c26d17f077b9021b4.png

22ea279820ad6c066803fba09568cf56.png

da58714bcf948df3354a8ee9e9e25adf.png

c2972bd1d037980c4040b2a1fe230139.png

c207535fcc2ac0bad3916a865b40cad5.png

de1b3f227c3c051e9cef2952f9457dbe.png

这效果,在粒子群基础上改出来的,确实已经相当不错了。

然后看一下在CEC2017函数上的测试结果,随机挑选几个函数:

F1

a7ecc28258de9ebb276bef70fc95e0ab.png

F5

4899d90874b19145c2ade24bc8af1db3.png

F8

bb2c7a490b533089e17cc82fec85237c.png

F12

7072eac07c5a955a3775523b4b692154.png

F18

b3c9ad61571789b9668fee04a98f2dff.png

从CEC2017函数上的测试效果看,LQPSO算法与QPSO算法相差不大,但是相较于原始的PSO算法,改善效果还是相当不错的。

代码目录已整理好,两个函数集分别包含LQPSO,QPSO和PSO三种代码。

7320f8cfeece7ad61bc2982fbfb38f0f.png

代码:

clear
clc
close all
addpath(genpath(pwd));
func_num=12;   %改函数
D=50;
lb=-100;
ub=100;
N=100;   %种群数目
T=1000;   %迭代次数
fhd=str2func('cec17_func');


%% PSO
[fMin , bestX,PSO_Convergence_curve ] =PSO(fhd,func_num,N,T,lb,ub,D);
display(['The best optimal value of the objective funciton found by PSO  for ' [num2str(func_num)],'  is : ', num2str(fMin)]);
fprintf ('Best solution obtained by PSO: %s\n', num2str(bestX,'%e  '));


%% QPSO
[Best_score,Best_pos,QPSO_curve]=QPSO(fhd,func_num,N,T,lb,ub,D);  % Calculating the solution of the given problem using PSO
display(['The best optimal value of the objective funciton found by QPSO  for ', [num2str(func_num)],'  is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by QPSO: %s\n', num2str(Best_pos,'%e  '));


%% LQPSO
[LBest_score,LBest_pos,LQPSO_curve]=QPSO(fhd,func_num,N,T,lb,ub,D);  % Calculating the solution of the given problem using PSO
display(['The best optimal value of the objective funciton found by QPSO  for ', [num2str(func_num)],'  is : ', num2str(LBest_score)]);
fprintf ('Best solution obtained by QPSO: %s\n', num2str(LBest_pos,'%e  '));
%Draw objective space
 %% Figure
figure1 = figure('Color',[1 1 1]);
CNT=35;
k=round(linspace(1,T,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:T;
semilogy(iter(k),PSO_Convergence_curve(k),'m-*','linewidth',1);
hold on
semilogy(iter(k),QPSO_curve(k),'b-^','linewidth',1);
hold on
semilogy(iter(k),LQPSO_curve(k),'g-p','linewidth',1);
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('PSO','QPSO','LQPSO')
set (gcf,'position', [300,300,400,320])

代码说明:

①代码采用量子行为改进粒子群算法

②代码采用莱维飞行和量子行为改进粒子群算法

代码注释很详细。获取完整代码方式:电机下方卡片回复关键词获取。

关键词:LQPSO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值