赞
踩
0.前言
上一篇文章主要对基于反向学习的改进粒子群算法原理及matlab代码进行讲解,并将改进后粒子群算法的寻优能力进行测试。上篇文章链接如下:https://blog.csdn.net/hbdlhy/article/details/134035085
该篇文章同样基于上部分改进方向,针对群体智能算法中的种群初始化部分进行改进讲解,本次主要介绍基于Tent混沌映射的改进粒子群优化算法。
1.Tent混沌映射原理
- %基于Tent映射的种群初始化
- function x_apply = Tent_int(dim,a,Lb,Ub)
- x(1,1)=(Lb(1,1)+rand()*(Ub(1,1)-Ub(1,1)))/Ub(1,1); %初始点
-
- %根据Tent映射函数,生成后续初始种群
- for i=1:dim-1
- if x(i)<a
- x(i+1)=2*x(i);
- elseif x(i)>=a
- x(i+1)=2*(1-x(i)) ;
- end
- end
-
- %获取在粒子边界约束内的种群解
- x_apply=x.*Ub;
-
- %粒子边界约束检查
- I=x_apply<Lb;
- x_apply(I)=Lb(I);
- U=x_apply>Ub;
- x_apply(U)=Ub(U);
- end
2.基于Tent混沌映射的改进粒子群算法
第1节主要对Tent混沌映射原理及matlab代码复现进行讲解,该部分将Tent混沌映射初始化与传统粒子群算法相结合,实现基于Tent混沌映射的改进粒子群算法,具体matlab代码如下所示:
- %% 基于Tent混沌映射的改进粒子群算法主程序
- clc;
- clear all;
- close all
- %% 算法基本参数设置
- c1=2; %学习因子1
- c2=2;%学习因子2
- w=0.7;%惯性权重
- MaxDT=500;%最大迭代次数
- D=3;%搜索空间维数(未知数个数)
- N=30;%初始化群体个体数目
- Lb=[-100,-100,-100];%种群解的下限
- Ub=[100,100,100];%种群解的上限
- Vmax=[1,1,1];%速度上限
- Vmin=[-1,-1,-1];%速度下限
- a=0.5;%Tent混沌系数,0~1之间
- Best_f=[];pop=[];
- %% 基于Tent混沌映射的种群初始化
- for L=1:N
- pop(L,:) = Tent_int(D,a,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('适应度')
为了验证改进后粒子群算法寻优效果,同时对各改进方式进行对比,本文应用第二期相同测试函数对改进后粒子群算法性能进行对比,具体测试函数及相关matlab文件见第二期“基于反向学习的改进粒子群算法”,链接如下:https://blog.csdn.net/hbdlhy/article/details/134035085
基于上述测试函数,运行10次后目标函数值及适应度曲线如下所示:
图1 基于Tent映射的改进粒子群算法迭代曲线
表1 改进前后不同算法适应度函数对比
运行次数 | 基于反向学习改进后 | 标准粒子群算法 | 基于Tent映射改进后 |
1 | 3.36E-31 | 0.0831 | 3.71E-29 |
2 | 1.82E-29 | 0.0547 | 5.55E-31 |
3 | 1.85E-32 | 0.0294 | 3.24E-28 |
4 | 2.74E-29 | 0.0119 | 2.26E-28 |
5 | 3.08E-33 | 0.0477 | 1.02E-28 |
6 | 2.28E-29 | 0.0399 | 3.00E-28 |
7 | 7.67E-31 | 0.0459 | 3.73E-29 |
8 | 2.90E-31 | 0.0235 | 8.03E-28 |
9 | 1.26E-31 | 0.0043 | 4.35E-29 |
10 | 1.39E-31 | 0.0532 | 8.26E-30 |
均值 | 7.01E-30 | 0.03936 | 1.88215E-28 |
最小值 | 3.08E-33 | 0.0043 | 5.54668E-31 |
最大值 | 2.74E-29 | 0.0831 | 8.03128E-28 |
根据表中结果可知,基于Tent映射改进后粒子群算法的寻优能力明显增强,但在该测试函数下,运行10次后其性能与基于反向学习的改进策略略有差距。但算法寻优能力在不同适应度函数下的表现不同,因此大家可自行使用其他经典测试函数进行测试对比,本文暂不对其余测试函数进行对比补充。
3.后续改进
本部分仅对种群初始化部分进行介绍,后续该部分将在种群更行迭代部分,对t分布自适应变异、Levy飞行策略等改进方法进行讲解,感谢大家耐心阅读,本文代码改进部分均为作者自身复现,谢绝转载,严禁以此进行二次售卖。
作者主要更新方向为:
(1)智能算法复现及改进;
(2)微电网/综合能源系统容量配置、优化调度等方向
(3)时间序列预测(机器学习、深度学习方向)
欢迎大家相互交流,另作者水平有限,难免存在疏忽之处,若有错误请大家指正,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。