参考资料
《精通MATLAB最优化计算(第二版)》
编程工具
Matlab 2019a
目录
石中居士:最优化计算与Matlab实现——目录zhuanlan.zhihu.com权重改进的粒子群算法
在微粒群算法的可调整参数中,惯性权重
线性递减权重法
- 原理
由于较大的惯性因子有利于跳出局部极小点,便于全局搜索,而较小的惯性因子则有利于对当前的搜索区域进行精确局部搜索,以利于算法收敛,因此针对PSO算法容易早熟以及算法后期易在全局最优解附近产生振荡现象,可以采用线性变化的权重,让惯性权重从最大值
其中,
- 算法步骤
线性递减粒子群算法的基本步骤如下:
【1】随机初始化种群中各微粒的位置和速度;
【2】评价每个微粒的适应度,将当前各微粒的位置和适应值存储在各微粒的pbest中,将所有pbest中适应值最优个体的位置和适应值存储于gbest中;
【3】用下式更新粒子的速度和位移:
【4】更新权重
【5】对每个微粒,将其适应值与其经历过的最好位置作比较,如果较好,则将其作为当前的最好位置;比较当前所有pbest和gbest的值,更新gbest;
【6】若满足停止条件(通常为预设的运算精度或迭代次数),搜索停止,输出结果,否则返回【3】继续搜索。
- Matlab代码与试算
用线性递减权重的粒子群算法求函数
解:此函数的最小点为
建立目标函数文件fitness.m
fitness.m
function
test.m
[
LDW_PSO.m
function
命令行窗口
x_optimization
对于本例题中的函数而言,用线性递减权重的粒子群算法求得了非常精确的最优点。但是在实际问题中,对于不同问题,其每次迭代所需的比例关系并不相同,所以
此外,如果在进化初期搜索不到最优点,随着
自适应权重法
- 原理
为了平衡PSO算法的全局搜索能力和局部改良能力,还可采用非线性的动态惯性权重系数公式,其表达式如下:
其中
当各微粒的目标值趋于一致或者趋于局部最优时,将使惯性权重增加,而各微粒的目标值比较分散时,将使惯性权重减小,同时对于目标函数值优于平均目标值的微粒,其对应的惯性权重因子较小,从而保护了该微粒,反之对于目标函数值差于平均目标值的微粒,其对应的惯性权重因子较大,使得该微粒向较好的搜索区域靠拢。
- 算法步骤
自适应权重粒子群算法的基本步骤如下:
【1】随机初始化种群中各微粒的位置和速度;
【2】评价每个微粒的适应度,将当前各微粒的位置和适应值存储在各微粒的pbest中,将所有pbest中适应值最优个体的位置和适应值存储于gbest中;
【3】用下式更新粒子的速度和位移:
【4】更新权重
【5】对每个微粒,将其适应值与其经历过的最好位置作比较,如果较好,则将其作为当前的最好位置;比较当前所有pbest和gbest的值,更新gbest;
【6】若满足停止条件(通常为预设的运算精度或迭代次数),搜索停止,输出结果,否则返回【3】继续搜索。
- Matlab代码与试算
用自适应权重的粒子群算法求函数
的最小值。取粒子数为40,学习因子都取2,最大惯性权重取0.9,最小惯性权重取0.6,迭代步数取10000。解:建立fitness.m文件
fitness.m
function
test.m
[
AW_PSO.m
function
命令行窗口
x_optimization =1.0e-06 *0.172784775909731-0.008767853535804f_optimization =0
本例题中的函数的最小点为
随机权重法
- 原理
将PSO算法中设定
首先,如果在进化初期接近最好点,随机
其中
- 算法步骤
随机权重粒子群算法的基本步骤如下:
【1】随机初始化种群中各微粒的位置和速度;
【2】评价每个微粒的适应度,将当前各微粒的位置和适应值存储在各微粒的pbest中,将所有pbest中适应值最优个体的位置和适应值存储于gbest中;
【3】用下式更新粒子的速度和位移:
【4】更新权重
【5】对每个微粒,将其适应值与其经历过的最好位置作比较,如果较好,则将其作为当前的最好位置;比较当前所有pbest和gbest的值,更新gbest;
【6】若满足停止条件(通常为预设的运算精度或迭代次数),搜索停止,输出结果,否则返回【3】继续搜索。
- Matlab代码与试算
求下面函数的最小值
取粒子数为40,学习因子都取2,随机权重平均值的最大值取0.8,随机权重平均值的最小值取0.5,随机权重平均值的方差取0.2,迭代步数取10000。
解:首先建立目标函数文件fitness.m文件
fitness.m
function
test.m
[
RW_PSO.m
function
命令行窗口
x_optimization =-0.0898420111454120.712656402204421f_optimization =-1.031628453489878
本题中的函数的理论最小点有两个,分别为