粒子群算法改进——线性递减惯性权重

惯性权重回顾

惯性权重w体现的是粒子继承先前的速度的能力
Shi,Y最先将惯性权重w引入到粒子群算法中,并且分析指出

  • 一个较大的惯性权值有利于全局搜索
    在这里插入图片描述在这里插入图片描述

  • 一个较小的权值则更利于局部搜索
    在这里插入图片描述在这里插入图片描述

线性递减惯性权重

  • 在搜索初期,增强全局搜索能力可以更大可能遍历解空间,避免陷入局部最优解 >广撒网
  • 在搜索后期,增强局部搜索能力可以更大可能的锁定最优解 >精准打击

为了更好地平衡算法的全局搜索以及局部搜索能力,Shi,Y提出了线性递减惯性权重LDIW(LinearDecreasingInertiaWeight)
公式如下
wd=wstart-(wstart - wend)x (d/K)
d是当前迭代的次数,K是迭代总次

  • 13
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是对标准粒子群、线性递减惯性权重粒子群、自适应惯性权重粒子群、随机惯性权重粒子群、压缩因子粒子群以及非对称学习因子粒子群算法在测试函数上的性能分析和相关 MATLAB 代码实现。 我们选用经典的 Sphere 函数和 Rosenbrock 函数作为测试函数,分别进行性能比较。 ## Sphere 函数 Sphere 函数的公式为: $$ f(x) = \sum_{i=1}^n x_i^2 $$ 其中 $n$ 表示维度,$x_i$ 表示第 $i$ 个自变量的取值。 我们首先定义标准粒子群算法 `PSO_standard`: ```matlab function [g_best, f_gbest] = PSO_standard(n, max_iter, lb, ub, c1, c2, w) % n: 粒子数 % max_iter: 最大迭代次数 % lb: 粒子位置下界 % ub: 粒子位置上界 % c1, c2: 学习因子 % w: 惯性权重 % 初始化粒子位置和速度 x = repmat(lb, n, 1) + rand(n, length(lb)) .* repmat((ub-lb), n, 1); v = zeros(n, length(lb)); % 计算每个粒子的适应度 f = arrayfun(@(i) sphere_func(x(i,:)), 1:n); % 初始化全局最优解和适应度 [f_pbest, idx] = min(f); p_best = x(idx, :); f_gbest = f_pbest; g_best = p_best; % 迭代优化 for iter = 1:max_iter % 更新每个粒子的速度和位置 for i = 1:n v(i,:) = w*v(i,:) + c1*rand(1,length(lb)).*(p_best(i,:) - x(i,:)) + c2*rand(1,length(lb)).*(g_best - x(i,:)); x(i,:) = x(i,:) + v(i,:); % 边界处理 x(i,:) = max(x(i,:), lb); x(i,:) = min(x(i,:), ub); end % 计算每个粒子的适应度 f = arrayfun(@(i) sphere_func(x(i,:)), 1:n); % 更新每个粒子的个体最优解 idx = f < f_pbest; p_best(idx,:) = x(idx,:); f_pbest(idx) = f(idx); % 更新全局最优解 [f_gbest, idx] = min(f_pbest); g_best = p_best(idx,:); end end % Sphere 函数 function y = sphere_func(x) y = sum(x.^2); end ``` 接下来是线性递减惯性权重粒子群算法 `PSO_linear_decrease`: ```matlab function [g_best, f_gbest] = PSO_linear_decrease(n, max_iter, lb, ub, c1, c2, w1, w2) % n: 粒子数 % max_iter: 最大迭代次数 % lb: 粒子位置下界 % ub: 粒子位置上界 % c1, c2: 学习因子 % w1, w2: 惯性权重下界和上界 % 初始化粒子位置和速度 x = repmat(lb, n, 1) + rand(n, length(lb)) .* repmat((ub-lb), n, 1); v = zeros(n, length(lb)); % 计算每个粒子的适应度 f = arrayfun(@(i) sphere_func(x(i,:)), 1:n); % 初始化全局最优解和适应度 [f_pbest, idx] = min(f); p_best = x(idx, :); f_gbest = f_pbest; g_best = p_best; % 迭代优化 for iter = 1:max_iter % 计算当前迭代的惯性权重 w = w1 - (w1-w2) * iter / max_iter; % 更新每个粒子的速度和位置 for i = 1:n v(i,:) = w*v(i,:) + c1*rand(1,length(lb)).*(p_best(i,:) - x(i,:)) + c2*rand(1,length(lb)).*(g_best - x(i,:)); x(i,:) = x(i,:) + v(i,:); % 边界处理 x(i,:) = max(x(i,:), lb); x(i,:) = min(x(i,:), ub); end % 计算每个粒子的适应度 f = arrayfun(@(i) sphere_func(x(i,:)), 1:n); % 更新每个粒子的个体最优解 idx = f < f_pbest; p_best(idx,:) = x(idx,:); f_pbest(idx) = f(idx); % 更新全局最优解 [f_gbest, idx] = min(f_pbest); g_best = p_best(idx,:); end end ``` 接下来是自适应惯性权重粒子群算法 `PSO_adaptive`: ```matlab function [g_best, f_gbest] = PSO_adaptive(n, max_iter, lb, ub, c1, c2, w1, w2, w_max, w_min) % n: 粒子数 % max_iter: 最大迭代次数 % lb: 粒子位置下界 % ub: 粒子位置上界 % c1, c2: 学习因子 % w1, w2: 初始惯性权重下界和上界 % w_max, w_min: 最大和最小惯性权重 % 初始化粒子位置和速度 x = repmat(lb, n, 1) + rand(n, length(lb)) .* repmat((ub-lb), n, 1); v = zeros(n, length(lb)); % 计算每个粒子的适应度 f = arrayfun(@(i) sphere_func(x(i,:)), 1:n); % 初始化全局最优解和适应度 [f_pbest, idx] = min(f); p_best = x(idx, :); f_gbest = f_pbest; g_best = p_best; % 迭代优化 for iter = 1:max_iter % 计算当前迭代的惯性权重 w = w1 - (w1-w2) * iter / max_iter; % 更新每个粒子的速度和位置 for i = 1:n % 计算当前粒子的自适应惯性权重 w_i = w_max - (w_max-w_min) * norm(v(i,:)) / norm(lb - ub); v

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值