一、理论基础
1、工具箱介绍
粒子群算法具有操作简单、算法搜索高效等优点,该算法对优化函数没有连续可微的要求,通用性较强,对多变量、非线性、不连续及不可微的问题求解有较大的优势。PSO工具箱由美国北卡罗来纳州立大学航空航天与机械系教授Brian Birge开发,该工具箱将PSO算法的核心部分封装起来,提供给用户的为算法的可调参数,用户只需要定义需要优化的函数,并设置好函数自变量的取值范围、每步迭代允许的最大变化量等,即可进行优化。
2、工具箱函数解释
PSO工具箱中包括的主要函数如表1所列。
该工具箱的主要函数是pso_Trelea_vectorized,通过配置该函数的输入参数,即可进行函数的优化。函数pso_Trelea_vectorized一共包含8个参数,具体解释如下:
[optOut, tr, te]=pso_Trelea_vectorized(functname, D, mv, VarRange, minmax, PSOparams, plotfcn, PSOseedValue)
(1)functname:优化函数名称。
(2)D:待优化函数的维数。
(3)mv:最大速度取值范围。
(4)VarRange:粒子位置取值范围。
(5)minmax:寻优参数,决定寻找的是最大化模型、最小化模型还是和某个值最接近。当minmax=1时,表示算法寻找最大化目标值;当minmax=0时,表示算法寻找最小化目标值;当minmax=2时,表示算法寻找的目标值与PSOparams数组中的第12个参数最相近。
(6)plotfcn:绘制图像函数,默认为“goplotpso”。
(7)PSOseedValue:初始化粒子位置,当PSOparams数组中的第13个参数为0时,该参数有效。
(8)PSOparams:算法中具体用到的参数,为一个13维的数组,如下所示:
PSOparams=[100 2000 24 2 2 0.9 0.4 1500 1e-25 250 NaN 0 0]
其中各参数的作用如下:
第1个参数表示MATLAB命令窗显示的计算过程的间隔数,100表示算法每迭代100次显示一次运算结果,如取值为0,不显示计算中间过程。
第2个参数表示算法的最大迭代次数,在满足最大迭代次数后算法停止,此处表示最大迭代次数为2000,。
第3个参数表示种群中个体数目,种群个体越多,越容易收敛到全局最优解,但算法收敛速度越慢,此处表示种群个体为24.
第4个参数、第5个参数为算法的加速度参数,分别影响局部最优值和全局最优值,一般采用默认值2.
第6个参数、第7个参数表示算法开始和结束时的权值,其他时刻的权值通过线性计算求得,此处表示算法开始时的权值为0.9,算法结束时的权值为0.4。
第8个参数表示当迭代次数超过该值时,权值取PSOparams中的第6个参数和PSOparams中的第7个参数的最小值。
第9个参数表示算法终止阈值,当连续两次迭代中对应种群最优值变化小于此阈值时,算法终止,此处值为1e-25。
第10个参数表示用于终止算法的阈值。当连续250次迭代中函数的梯度值仍然没有变化,则退出迭代。
第11个参数表示优化问题是否有约束条件,取NaN时表示为非约束条件下的优化问题。
第12个参数表示使用粒子群算法类型。
第13个参数表示种群初始化是否采用制定的随机种子,0表示随机产生种子,1表示用户自行产生种子。
二、案例背景
1、问题描述
本案例寻优的函数为 z = 0.5 ( x − 3 ) 2 + 0.2 ( y − 5 ) 2 − 0.1 (1) z=0.5(x-3)^2+0.2(y-5)^2-0.1\tag{1} z=0.5(x−3)2+0.2(y−5)2−0.1(1)该函数的最小值点为-0.1,对应的点坐标为(3,5)。
2、工具箱设置
PSO工具箱路径设置分为两步:
(1)在MATLAB的菜单栏单击“设置路径”,如图1所示。
(2)在弹出的对话框中单击“添加文件夹”按钮,然后找到工具箱所在位置,如图2所示。
三、MATLAB程序实现
1、适应度函数
适应度函数用于计算粒子的适应度值,程序代码如下:
function fitness = test_func(individual)
%% 计算粒子的适应度值
% individual input 粒子个体
% fitness output 适应度值
x = individual(:, 1);
y = individual(:, 2);
for i = 1:size(individual, 1)
fitness(:, i) = 0.5 * (x(i)-3)^2+0.2 * (y(i)-5)^2-0.1;
end
2、主函数
主函数编程实现基于粒子群工具箱的函数寻优,程序代码如下:
%% 基于粒子群工具箱的函数优化算法
%% 清空环境
clear
clc
%% 参数初始化
x_range = [-50, 50]; % 参数x变化范围
y_range = [-50, 50]; % 参数y变化范围
range = [x_range; y_range]; % 参数变化范围(组成矩阵)
Max_V = 0.2 * (range(:, 2)-range(:, 1)); % 最大速度取变化范围的10%~20%
n = 2; % 待优化函数的维数,此例子中仅x、y两个自变量,故为2
% 算法参数
PSOparams = [25 2000 24 2 2 0.9 0.4 1500 1e-25 250 NaN 0 0];
%% 粒子群寻优
pso_Trelea_vectorized('test_func', n, Max_V, range, 0, PSOparams) % 调用PSO核心模块
3、仿真结果
本案例中PSO算法的基本参数设置为:种群中个体数目为24,算法进化次数为2000,加速度参数为2,初始权值为0.9,结束权值为0.4,权值线性变化,算法每次迭代的终止阈值为1e-25,采用标准粒子群算法,随机产生初始化种群。
算法经过仿真,得到的最优值为(3,5),对应的最优适应度值为-0.1,算法仿真过程如图3所示。
从仿真过程可以看出,PSO工具箱能够快速找到函数的最小值点,并且搜索速度快,算法很快收敛。
四、延伸阅读
采用PSO工具箱寻找Rosenbrock函数极值,函数形式为
y
=
100
(
x
1
−
x
2
2
)
2
+
(
x
2
−
1
)
2
(2)
y=100(x_1-x_2^2)^2+(x_2-1)^2\tag{2}
y=100(x1−x22)2+(x2−1)2(2)函数图形如图4所示。
该函数的最优值位置为(1,1),对应的最优值为0,算法参数设置与上述案例一致。
算法经过仿真,得到的最优解为(1,1),对应的最优值为0,算法仿真过程如图5所示。
五、参考文献
[1] 张丽平. 粒子群优化算法的理论及实践[D]. 杭州: 浙江大学, 2015.
[2] 吕振肃, 侯志荣. 自适应变异的粒子群优化算法[J]. 电子学报, 2004, 32(3): 416-420.
[3] 郁磊, 史峰, 王辉, 等. MATLAB智能算法30个案例分析(第2版)[M]. 北京: 北京航空航天大学出版社, 2015.