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

news/2025/3/10 14:32:19/文章来源:https://www.cnblogs.com/MuxLz/p/18759940

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

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

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

线性递减惯性权重

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

为了更好地平衡算法的全局搜索以及局部搜索能力,Shi,Y提出了线性递减惯性权重LDIW(LinearDecreasingInertiaWeight)
公式如下
wd=wstart-(wstart - wend)x (d/K)
d是当前迭代的次数,K是迭代总次数
wstart一般取0.9,wend一般取0.4
与原来的相比,现在惯性权重和迭代次数有关

范例代码

%% 线性递减惯性权重的粒子群算法PSO: 求解函数y = 7*cos(5*x) + 4*sin(x)在[-5,5]内的最大值
clear; clc%% 绘制函数的图形
x = -5:0.01:5;
y = 7*cos(5*x) + 4*sin(x);
figure(1)
plot(x,y,'b-')
title('y = 7*cos(5*x) + 4*sin(x)')
hold on  % 不关闭图形,继续在上面画图%% 粒子群算法中的预设参数(参数的设置不是固定的,可以适当修改)
n = 10; % 粒子数量
narvs = 1; % 变量个数
c1 = 2;  % 每个粒子的个体学习因子
c2 = 2;  % 每个粒子的社会学习因子
w_start = 0.9;  % 初始惯性权重
w_end = 0.4; % 粒子群最大迭代次数时的惯性权重
K = 50;  % 迭代的次数
vmax = 1.2; % 粒子的最大速度
x_lb = -3; % x的下界
x_ub = 3; % x的上界%% 初始化粒子的位置和速度
x = zeros(n,narvs);
x = x_lb + (x_ub-x_lb).*rand(n,narvs)    % 随机初始化粒子所在的位置
v = -vmax + 2*vmax .* rand(n,narvs);  % 随机初始化粒子的速度%% 计算适应度
fit = zeros(n,1);  % 初始化这n个粒子的适应度全为0
for i = 1:n  % 循环整个粒子群,计算每一个粒子的适应度fit(i) = Obj_fun1(x(i,:));   % 调用Obj_fun1函数来计算适应度
end
pbest = x;   % 初始化这n个粒子迄今为止找到的最佳位置(是一个n*narvs的向量)
ind = find(fit == max(fit), 1);  % 找到适应度最大的那个粒子的下标
gbest = x(ind,:);  % 定义所有粒子迄今为止找到的最佳位置(是一个1*narvs的向量)%% 在图上标上这n个粒子的位置用于演示
h = scatter(x,fit,80,'*r');  % scatter是绘制二维散点图的函数%% 迭代K次来更新速度与位置
fitnessbest = ones(K,1);  % 初始化每次迭代得到的最佳的适应度
for d = 1:K  % 开始迭代,一共迭代K次for i = 1:n   % 依次更新第i个粒子的速度与位置  **注意这边的变化**w = w_start - (w_start - w_end) * d / K;  % 更新惯性权重v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第i个粒子的速度% 如果粒子的速度超过了最大速度限制,就对其进行调整for j = 1: narvsif v(i,j) < -vmax(j)v(i,j) = -vmax(j);elseif v(i,j) > vmax(j)v(i,j) = vmax(j);endendx(i,:) = x(i,:) + v(i,:); % 更新第i个粒子的位置% 如果粒子的位置超出了定义域,就对其进行调整for j = 1: narvsif x(i,j) < x_lb(j)x(i,j) = x_lb(j);elseif x(i,j) > x_ub(j)x(i,j) = x_ub(j);endendfit(i) = Obj_fun1(x(i,:));  % 重新计算第i个粒子的适应度if fit(i) > Obj_fun1(pbest(i,:))   % 如果第i个粒子的适应度大于这个粒子迄今为止找到的最佳位置对应的适应度pbest(i,:) = x(i,:);   % 更新第i个粒子迄今为止找到的最佳位置endif  fit(i) > Obj_fun1(gbest)  % 如果第i个粒子的适应度大于所有的粒子迄今为止找到的最佳位置对应的适应度gbest = pbest(i,:);   % 更新所有粒子迄今为止找到的最佳位置endendfitnessbest(d) = Obj_fun1(gbest);  % 更新第d次迭代得到的最佳的适应度pause(0.1)  % 暂停0.1sh.XData = x;  % 更新散点图句柄的x轴的数据h.YData = fit; % 更新散点图句柄的y轴的数据
endfigure(2)
plot(fitnessbest)  % 绘制出每次迭代最佳适应度的变化图
xlabel('迭代次数');
disp('最佳的位置是:'); disp(gbest)
disp('此时最优值是:'); disp(Obj_fun1(gbest))
function y = Obj_fun1(x)y = 7*cos(5*x) + 4*sin(x);
end

运行结果如下
在这里插入图片描述

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

参考论文:Shi, Y. and Eberhart, R.C. (1999) Empirical Study of Particle Swarm Optimization. Proceedings of the 1999 Congress on Evolutionary Computation, Washington DC, 6‐9 July 1999, 1945‐1950.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

前言概述 粒子速度更新公式如下: vid = wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid) 在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒…

Mybatis-Plus异常处理

返回结果为2 ,我从Controller层中写的返回是一个floor实体,到Mapper层中返回的也是floor实体,但是Mapper返回是2条数据。 把controller层的返回值改为List。

关于sqlserver空间占用问题(.bak文件占用)

sqlserver跑项目的时候很可能涉及到较大的数据量(一开始占我c盘70GB!!!然后删了,然后就出事儿了,二次安装恶心至极,需要二次安装的话建议看我的上一篇文章)先打开ssms(SQL Server Management Studio)并连接,然后右击服务器找到属性 点击数据库设置,建议!!!直接改…

最近发现git bash运行很慢?

最近发现git bash打开运行后,键入命令,通常要五六秒,甚至十几秒才会响应。 打开上面这个后,比如输入git status要好久才会响应。 我的是双显卡导致的,解决办法:打开设备管理器,禁用其中一个显示适配器,速度就会快很多。 具体步骤截图: 1.搜索设备管理器 2.找到显示适…

sqlserver的二次安装!!

注意!!!建议在你看到这一条的时候,果断去淘宝找客服,sqlserver重新安装,十几块钱,不要自己搞,太煎熬了,折腾我3天!! 那么开始 首先得确保防火墙关闭!!例如火绒等安全卫士也要先退下去!! sqlserver这个东西,二次安装真的恶心,需要把所有东西删了重下,包括但不…

编程作业第一次

github仓库链接:3123004747/cheaker at main lwy8852/3123004747 Psp表格psp阶段 预估耗时 实际耗时 计划 (Planning) 15 15 估计任务时间 (Estimate) 40 55 开发 (Development) 200 220 需求分析 (Analysis) 30 25 生成设计文档 (Design Spec) 20 20 设计复审 (Design Revie…

【Kakfa】初识Kafka

简介Kafka是一个分布式消息系统,有LinkedIn公司开发,现已成为Apache基金顶级开源项目。 是一种快速、可扩展的、分布式的消息发布-订阅系统基础组成producer consumer broker topic partition消息和批次消息:Kafka把数据单元称之为消息,可以把数据消息看成数据库中的一个“…

算子 get_contour_attrib_xld - 返回 XLD 轮廓的点属性值

算子 get_contour_attrib_xld 名称 get_contour_attrib_xld — 返回 XLD 轮廓的点属性值。 签名 get_contour_attrib_xld(Contour : : Name : Attrib) 描述 get_contour_attrib_xld 算子将 XLD 轮廓 Contour 中属性 Name 的值返回到 Attrib 中。轮廓点属性是为每个轮廓点定义的…

川大网安挑战赛游记

会赢吗部分在手机上完成,格式可能有误,见谅。前:可能是最后的比赛了,还是记一下吧Day -1 下午三点半就走了,吃了汉堡王上火车,路上看网课,听歌。 到家快十点了,最终后半夜前睡了。 Day 0 早起,7:30 的飞机。发现手机没电了,不过还是顽强的让我听了一路的歌。 酒店严格…

win11开启22端口ssh服务器

步骤按win,输入可选功能条读完后,搜索service找到ssh然后进行设置,或者也可以使用命令。启动后端口就打开了。 配置默认shell 按win,搜索regedit,打开注册表编辑器。 导航到以下路径: HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH 在右侧窗口中,找到或创建一个名为 DefaultShel…

Python+Django网上招聘系统的设计与实现

平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括:首页、岗位详情页、简历中心、用户设置模块。 - 后台功能包括:总览、岗位管理、公司管理、分类管理、标签管理、评论管理、用户管理、…