粒子群算法改进——压缩因子法

前言概述

粒子速度更新公式如下:

vid = wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid)

在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒子运行轨迹的影响,其反映了粒子群之间的信息交流。
较大的c1值,会使粒子过多地在自身的局部范围内搜索
较大的c2值,则又会促使粒子过早收敛到局部最优值。

为了有效地控制粒子的飞行速度,使算法达到全局搜索与局部搜索两者间的有效平衡,Clerc构造了引入收缩因子的PSO模型,采用了压缩因子,这种调整方法通过合适选取参数,可确保PSO算法的收敛性,并可取消对速度的边界限制

参数设置

  • 个体学习因子c1 = 2.05 (应用较多)
  • 社会学习因子 c2 = 2.05(应用较多)
  • 惯性权重 w = 0.9
  • C = c1+c2 = 4.1
  • 收缩因子在这里插入图片描述

综上,速度更新公式如下
**vid = ==K== ·(wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid) )**

示例代码

求解函数y = 7cos(5x) + 4*sin(x)在[-5,5]内的最大值

…… ……
%% 初始化参数
c1 = 2.05;  % 每个粒子的个体学习因子
c2 = 2.05;  % 每个粒子的社会学习因子
C = c1 + c2;
w = 0.9;  % 惯性权重
fai = 2/abs((2-C-sqrt(C^2-4*C)));% 收缩因子

%% 初始化粒子的位置和速度
…… ……

%% 计算适应度
…… ……

%% 迭代K次来更新速度与位置
fitnessbest = ones(K,1);  % 初始化每次迭代得到的最佳的适应度
for d = 1:K  % 开始迭代,一共迭代K次
    for i = 1:n   % 依次更新第i个粒子的速度与位置
       v(i,:) = fai * (w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:)));  % 更新第i个粒子的速度
        x(i,:) = x(i,:) + v(i,:); % 更新第i个粒子的位置
        % 如果粒子的位置超出了定义域,就对其进行调整
     		…… ……
      …… ……
end

…… ……
function y = Obj_fun1(x)
    y = 7*cos(5*x) + 4*sin(x);
end

运行结果如下

在这里插入图片描述在这里插入图片描述对比未经优化的粒子群算法
在这里插入图片描述在这里插入图片描述可知,求得的最优解更接近实际最优解

参考文献:Eberhart R C . Comparing inertia weights and
constriction factors in optimization[C]//
Proceedings of the 2000 IEEE Congress on
Evolutionary Computation, La Jolla, CA. IEEE, 2000.

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值