基于粒子群优化算法的函数寻优算法
文章目录
- 一、理论基础
- 二、案例背景
- 1、问题描述
- 2、解题思路及步骤
- 三、MATLAB程序实现
- 1、PSO算法参数设置
- 2、种群初始化
- 3、寻找初始极值
- 4、迭代寻优
- 5、结果分析
- 四、惯性权重
- 1、惯性权重的选择
- 2、ω\omegaω变化的算法性能分析
- 五、参考文献
一、理论基础
粒子群算法(particle swarm optimization,PSO)是计算智能领域一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法就是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。
假设在一个DDD维的搜索空间中,由nnn个粒子组成的种群X=(X1,X2,⋯,Xn)\boldsymbol{X}=(X_1,X_2,\dotsm,X_n)X=(X1,X2,⋯,Xn),其中第iii个粒子表示为一个DDD维的向量Xi=(Xi1,Xi2,⋯,XiD)T\boldsymbol{X_i}=(X_{i1},X_{i2},\dotsm,X_{iD})^TXi=(Xi1,Xi2,⋯,XiD)T,代表第iii个粒子在DDD维搜索空间中的位置,亦代表问题的一个潜在解。根据目标函数即可计算出每个粒子位置Xi\boldsymbol{X_i}Xi对应的适应度值。第iii个粒子的速度为V=(Vi1,Vi2,⋯,ViD)T\boldsymbol{V}=(V_{i1},V_{i2},\dotsm,V_{iD})^TV=(Vi1,Vi2,⋯,ViD)T,其个体最优极值为Pi=(Pi1,Pi2,⋯,PiD)T\boldsymbol{P_i}=(P_{i1},P_{i2},\dotsm,P_{iD})^TPi=(Pi1,Pi2,⋯,PiD)T,种群的群体最优极值为Pg=(Pg1,Pg2,⋯,PgD)T\boldsymbol{P_g}=(P_{g1},P_{g2},\dotsm,P_{gD})^TPg=(Pg1,Pg2,⋯,PgD)T。
在每次迭代过程中,粒子通过个体极值和群体极值更新自身的速度和位置,即Vidk+1=ωVidk+c1r1(Pidk−Xidk)+c2r2(Pgdk−Xidk)(1)V_{id}^{k+1}=\omega V_{id}^k+c_1r_1(P_{id}^k-X_{id}^k)+c_2r_2(P_{gd}^k-X_{id}^k)\tag{1}Vidk+1=ωVidk+c1r1(Pidk−Xidk)+c2r2(Pgdk−Xidk)(1)Xidk+1=Xidk+Vk+1id(2)X_{id}^{k+1}=X_{id}^k+V_{k+1_{id}}\tag {2}Xidk+1=Xidk+Vk+1id(2)其中,ω\omegaω为惯性权重;d=1,2,⋯,nd=1,2,\dotsm,nd=1,2,⋯,n;kkk为当前迭代次数;VidV_{id}Vid为粒子的速度;c1c_1c1和c2c_2c2是非负的常数,称为加速度因子;r1r_1r1和r2r_2r2是分布于[0,1][0,1][0,1]区间的随机数。为防止粒子的盲目搜索,一般建议将其位置和速度限制在一定的区间[−Xmax,Xmax][-X_{max},X_{max}][−Xmax,Xmax]、[−Vmax,Vmax][-V_{max},V_{max}][−Vmax,Vmax]。
二、案例背景
1、问题描述
本案例寻优的非线性函数为f(x,y)=sinx2+y2x2+y2+ecos2πx+cos2πy2−2.71289(3)f(x,y)=\frac{sin\sqrt{x^2+y^2}}{\sqrt{x^2+y^2}}+e^{\frac{cos2\pi x+cos2\pi y}{2}}-2.71289\tag{3}f(x,y)=x2+y2sinx2+y2+e2cos2πx+cos2πy−2.71289(3)函数图形如图1所示。
图1 函数图形
从函数图形可以看出,该函数有很多局部极大值点,而极限位置为(0,0)(0,0)(0,0),在(0,0)(0,0)(0,0)附近取得极大值,极大值约为1.0054。
2、解题思路及步骤
基于PSO算法的函数极值寻优算法流程图如图2所示。
图2 算法流程
其中,粒子和速度初始化是随机初始化粒子速度和粒子位置;根据式(3)计算粒子适应度值;根据初始粒子适应度值确定个体极值和群体极值;根据式(1)与式(2)更新粒子速度和位置;根据新种群中粒子适应度值更新个体极值和群体极值。
本案例中,适应度函数为函数表达式,适应度值为函数值。种群粒子数为20,每个粒子的维数为2,算法迭代进化次数为300。
三、MATLAB程序实现
1、PSO算法参数设置
设置PSO算法的运行参数,程序代码如下:
%% 清空环境
clc
clear%% 参数初始化
% 速度更新参数
c1 = 1.49445;
c2 = 1.49445;maxgen = 300; % 进化次数
sizepop = 20; % 种群规模% 个体和速度的最大最小值
popmax=2; popmin=-2;
Vmax=0.5; Vmin=-0.5;
2、种群初始化
随机初始化粒子位置和粒子速度,并根据适应度函数计算粒子适应度值。程序代码如下:
%% 随机产生初始粒子和速度
for i = 1:sizepop% 随机产生一个种群pop(i, :) = 2*rands(1, 2); % 初始种群V(i, :) = 0.5*rands(1, 2); % 初始化速度% 计算适应度fitness(i) = fun(pop(i, :)); % 染色体的适应度
end
适应度函数如下:
function y = fun(x)
% 函数用于计算粒子适应度值
% x input 输入粒子
% y output 粒子适应度值
y=sin( sqrt(x(1).^2+x(2).^2) )./sqrt(x(1).^2+x(2).^2)+...exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)-2.71289;
3、寻找初始极值
根据初始粒子适应度值寻找个体极值和群体极值。
%% 个体极值和群体极值
[bestfitness, bestindex] = max(fitness);
zbest = pop(bestindex, :); % 全局最佳
gbest = pop; % 个体最佳
fitnessgbest = fitness; % 个体最佳适应度值
fitnesszbest = bestfitness; % 全局最佳适应度值
4、迭代寻优
根据式(1)与式(2)更新粒子位置和速度,并且根据新粒子的适应度值更新个体极值和群体极值。程序代码如下:
%% 迭代寻优
for i=1:maxgen% 粒子位置和速度更新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) = fun(pop(j, :)); end%% 个体和群体极值更新for j = 1:N% 个体最优更新if fitness(j) < fitnesspbest(j)pbest(j, :) = X(j, :);fitnesspbest(j) = fitness(j);end% 群体最优更新if fitnesspbest(j) > fitnessgbestgbest = pbest(j, :);fitnessgbest = fitnesspbest(j);endend% 每代最优值记录到yy数组中yy(i) = fitnesszbest;
end
5、结果分析
PSO算法反复迭代300次,画出每代最优个体适应度值变化图象。程序代码如下:
%% 画出每代个体最优适应度值
disp(['最优位置:', num2str(zbest)]);
disp(['最优极值:', num2str(fitnesszbest)]);
plot(yy)
title('最优个体适应度', 'fontsize', 12);
xlabel('进化代数', 'fontsize', 12);
ylabel('适应度', 'fontsize', 12);
Command Window中显示的结果为:
最优位置:-0.00015399 -0.00068763
最优极值:1.0054
最优个体适应度值变化如图3所示。
图3 最优个体适应度值变化图
最终得到的最优个体适应度值为1.0054,对应的粒子位置为(-0.00015399,-0.00068763),PSO算法寻优得到最优值接近函数实际最优值,说明PSO算法具有较强的函数极值寻优能力。
四、惯性权重
1、惯性权重的选择
惯性权重ω\omegaω体现的是粒子继承先前的速度的能力,Shi.Y最先将惯性权重ω\omegaω引入PSO算法中,并分析指出一个较大的惯性权值有利于全局搜索,而一个较小的惯性权值则更利于局部搜索。为了更好地平衡算法的全局搜索与局部搜索的能力,Shi.Y提出了线性递减惯性权重(Linear decreasing inertia weight,LDIW),即ω(k)=ωstart−(ωstart−ωend)(Tmax−k)/Tmax(4)\omega(k)=\omega_{start}-(\omega_{start}-\omega_{end})(T_{max}-k)/T_{max}\tag{4}ω(k)=ωstart−(ωstart−ωend)(Tmax−k)/Tmax(4)其中,ωstart\omega_{start}ωstart为初始惯性权重;ωend\omega_{end}ωend为迭代至最大迭代次数时的惯性权重;kkk为当前迭代次数;TmaxT_{max}Tmax为最大迭代次数。一般来说,惯性权重ωstart=0.9,ωend=0.4\omega_{start}=0.9,\omega_{end}=0.4ωstart=0.9,ωend=0.4时算法性能最好。这样,随着迭代次数的增大,惯性权重由0.9线性递减至0.4,迭代初期较大的惯性权重使得算法保持了较强的全局搜索能力,而迭代后期较小的惯性权重有利于算法进行更精准的局部搜寻。线性惯性权重只是一种经验做法,常用的惯性权重的选择还包括以下几种:ω(k)=ωstart−(ωstart−ωend)(kTmax)2(5)\omega(k)=\omega_{start}-(\omega_{start}-\omega_{end})(\frac{k}{T_{max}})^2\tag{5}ω(k)=ωstart−(ωstart−ωend)(Tmaxk)2(5)ω(k)=ωstart+(ωstart−ωend)[2kTmax−(kTmax)2](6)\omega(k)=\omega_{start}+(\omega_{start}-\omega_{end})[\frac{2k}{T_{max}}-(\frac{k}{T_{max}})^2]\tag{6}ω(k)=ωstart+(ωstart−ωend)[Tmax2k−(Tmaxk)2](6)ω(k)=ωend(ωstartωend)1/(1+ck/Tmax)(7)\omega(k)=\omega_{end}(\frac{\omega_{start}}{\omega_{end}})^{1/(1+ck/T_{max})}\tag{7}ω(k)=ωend(ωendωstart)1/(1+ck/Tmax)(7)几种ω\omegaω的动态变化如图4所示。
图4 4种惯性权重的变化
2、ω\omegaω变化的算法性能分析
算法参数设置:种群规模20,进化300代。每个实验设置运行100次,将100次的平均值作为最终结果。
在上述的参数设置下,运用5种ω\omegaω取值方法对函数进行求解,并比较所得解的平均值、失效次数和接近最优值的次数,来分析其收敛精度、收敛速度等性能。
每种ω\omegaω的算法进化曲线如图5所示。
图5 5种惯性权重下函数平均值的收敛曲线
本案例中,将距离最优解1.0054误差为0.01的解视为接近最优解,将0.8477及更小的解视为陷入局部最优解。
由图5和表1可以看出,惯性权重ω\omegaω不变的粒子群优化算法虽然具有较快的收敛速度,但其后期容易陷入局部最优,求解精度低;而几种ω\omegaω动态变化的算法虽然在算法初期收敛稍慢,但在后期局部搜索能力强,利于算法跳出局部最优而求的最优解,提高了算法的求解精度。
式(5)ω\omegaω动态变化方法,前期ω\omegaω变化较慢,取值较大,维持了算法的全局搜索能力;后期ω\omegaω变化较快,极大地提高了算法的局部搜索能力,从而取得了很好的求解效果。
表1 5种惯性权重下的算法性能比较
五、参考文献
[1] J. Kennedy, R. Eberhart. Particle swarm optimization[C]. Proceedings of ICNN’95 - International Conference on Neural Networks, 1995, 4: 1942-1948.
[2] 张选平, 杜玉平, 秦国强, 等. 一种动态改变惯性权的自适应粒子群算法[J]. 西安交通大学学报, 2005(10): 1039-1042.
[3] 郁磊, 史峰, 王辉, 等. MATLAB智能算法30个案例分析(第2版)[M]. 北京: 北京航空航天大学出版社, 2015.
基于粒子群优化算法的函数寻优算法相关推荐
- 基于蚁群算法的函数寻优算法
文章目录 一.理论基础 二.案例背景 1.问题描述 2.解题思路及步骤 三.MATLAB程序实现 1.清空环境变量 2.初始化参数 3.构建解空间和目标函数 4.迭代寻优 5.结果显示 6.绘图 四. ...
- 基于沙猫群优化算法的函数寻优算法
文章目录 一.理论基础 1.沙猫群优化算法 (1)初始化种群 (2)搜索猎物(探索) (3)攻击猎物(开发) (4)探索和开发 2.SCSO算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基 ...
- 基于果蝇优化算法的函数寻优算法
文章目录 一.理论基础 二.算法步骤 1.启发 2.方向和距离 3.气味浓度判断值 4.适应度评估 5.寻找最优个体 6.飞行 7.迭代优化 三.案例背景 问题描述 四.MATLAB程序实现 1.清空 ...
- 基于蜉蝣优化算法的函数寻优算法
文章目录 一.理论基础 1.蜉蝣优化算法 (1)雄性蜉蝣的更新 (2)雌性蜉蝣的更新 (3)蜉蝣的交配过程 2.MA算法伪代码 二.仿真实验与结果分析 1.函数测试与数值分析 2.WSN三维覆盖优化 ...
- 基于金豺优化算法的函数寻优算法
文章目录 一.理论基础 1.金豺优化算法 (1)搜索空间公式 (2)探索阶段或搜索猎物 (3)开发阶段或围捕和突袭猎物 (4)从探索转向开发 2.GJO伪代码 二.仿真实验与结果分析 三.参考文献 一 ...
- 基于蜂鸟优化算法的函数寻优算法
文章目录 一.理论基础 1.自搜索阶段 2.引导搜索阶段 3.HOA伪代码 二.仿真实验与分析 三.参考文献 一.理论基础 蜂鸟优化算法(Hummingbirds optimization algor ...
- 基于蛾群算法的函数寻优算法
文章目录 一.理论基础 1.蛾群算法 (1)探路阶段 (2)勘探阶段 (3)观察阶段 2.MSA算法流程 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.蛾群算法 蛾群算法(Moth swar ...
- 基于藤壶交配优化算法的函数寻优算法
文章目录 一.理论基础 1.藤壶交配优化算法 1.1 哈迪-温伯格(Hardy-Weinberg)法则 1.2 BMO 1.2.1 初始化 1.2.2 选择过程 1.2.3 繁殖 2.BMO算法伪代码 ...
- 基于阿基米德优化算法的函数寻优算法
文章目录 一.理论基础 1.算法步骤 (1)初始化 (2)更新密度和体积 (3)转移算子与密度算子 (4)勘探阶段 <1> 物体之间发生碰撞 <2> 物体之间无碰撞 <3 ...
- 基于闪电连接过程优化算法的函数寻优算法
文章目录 一.理论基础 1.闪电连接过程优化算法 (1)初始化 (2)确定闪电的下一跳 (3)闪电分支消失 (4)上迎先导的移动 (5)连接点的确定 2.LAPO算法伪代码 二.仿真实验与结果分析 三 ...
最新文章
- Nat. Mach. Intell. | 集成深度学习在生物信息学中的发展与展望
- windows域中时间同步的解决方案
- FATFS配置长文件名,为何跟编码转换有关
- python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...
- IBM与HP存储数据复制技术PK
- nssl1186-字串数量【前缀和】
- 3.5. Ticket
- linux程序 option,long-option.c/解析命令行参数
- 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
- 集邦咨询:预估今年GaN功率元件营收达8300万美元
- Excel to SQL(2)
- 单板计算机图片大全,最强单板计算机UP Board之Windows10完全版、Ubuntu、Andriod系统体验 | 爱板网...
- Python 视频教程下载 (全阶段)
- cuda10.2+ubuntu18.04+docker视频编解码
- Atitit 衡量项目的规模 1. 预估衡量项目的规模的方法	1 1.1. 方法一、Delphi 法	1 1.2. 方法二、 类比法	1 1.3. 方法三、功能点估计法	2 1.4. 方法四、PER
- html5如何修改登录页面的背景,HTML5 月夜背景的用户登录界面
- 用VBA代码下载网络上的文件
- vue--百度地图之离线地图
- 树莓派4b和3b+功耗_ARM v8(树莓派4)搭建服务器和性能测试实战
- 死锁问题的出现和解决