粒子群算法中对于惯性权重的改进

news/2024/11/16 9:16:54/文章来源:https://www.cnblogs.com/dlmuwxw/p/18367597

惯性权重w体现的是粒子继承先前的速度的能力,Shi,Y最先将惯性权重w引入到粒子群算法中,并分析指出一个较大的惯性权值有利于全局搜索,而一个较小的权值则更利于局部搜索。因此,在迭代适应度的同时对惯性权重进行迭代有利于帮助我们寻找最优解

目录
  • 一、线性递减惯性权重
    • 1.迭代思想
    • 2.迭代公式
    • 3.代码实现
  • 二、自适应惯性权重
    • 1.迭代思想
    • 2.迭代公式
    • 3.代码实现
  • 三、随机惯性权重
    • 1.迭代思想
    • 2.迭代公式
    • 3.代码实现

一、线性递减惯性权重

1.迭代思想

在迭代的前期选取较大的惯性权重,有利于粒子群进行全局搜索。而在迭代的末期,则更加急迫地得到一个可行解,因此倾向于局部搜索。
在图形上体现为:迭代的初期粒子移动范围很大,在迭代的过程中逐渐变小,然后所有的粒子都在找到的最优解附近移动

2.迭代公式

由公式看出,随着迭代次数的增大,惯性权重是逐渐变小的。当d=0,w=w_strart,当达到最大迭代次数,即d=K时,w=w_end。
注:迭代公式不唯一,比如可以在(d/k)这一项加一个平方

3.代码实现

只需要在进行速度的迭代前,输入好迭代惯性权重的公式即可

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个粒子的速度

二、自适应惯性权重

1.迭代思想

假设我们现在在求一个最小值问题,有若干的粒子,那么粒子的适应度越小,就说明这个粒子所处的位置越好,惯性权重应该越小,让其尽可能少移动。相反,粒子的适应度越大,说明这个粒子所处位置不怎么好,那么应该尽可能多地移动,跳出这个位置,让其惯性权重越大

2.迭代公式

看公式的第一行,如果该粒子的适应度小于平均适应度,那么说明其离理论最小值近,那么适应度就应该比较小。当其适应度是所有粒子中最小的时,w=w_min,当其适应度恰好是均值时,w=w_max
看公式的第二行,如果该粒子的适应度大于平均适应度,那么说明其离理论最小值远,那么适应度就应该比较大,设定为w_max

3.代码实现

同样,在更新粒子的速度前将惯性权重进行更改

for d = 1:K  % 开始迭代,一共迭代K次for i = 1:n   % 依次更新第i个粒子的速度与位置f_i = fit(i);  % 取出第i个粒子的适应度f_avg = sum(fit)/n;  % 计算此时适应度的平均值f_min = min(fit); % 计算此时适应度的最小值if f_i <= f_avg  if f_avg ~= f_min  % 如果分母为0,我们就干脆令w=w_minw = w_min + (w_max - w_min)*(f_i - f_min)/(f_avg - f_min);elsew = w_min;endelsew = w_max;endv(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第i个粒子的速度

三、随机惯性权重

1.迭代思想

随机惯性权重使用随机的惯性权重,可以避免在迭代前期局部搜索能力的不足;也可以避免在迭代后期全局搜索能力的不足。
其操作就是在给定惯性权重时添加随机数

2.迭代公式

3.代码实现

sigma是正态分布的随机扰动项的标准差(一般取0.2-0.5之间)

for d = 1:K  % 开始迭代,一共迭代K次for i = 1:n   % 依次更新第i个粒子的速度与位置w = w_min + (w_max - w_min)*rand(1) + sigma*randn(1);v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第i个粒子的速度

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

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

相关文章

Git教程2

六、Git的工作区域和文件状态 1、工作区域: (1) 工作区(Working Directory):电脑上可以看到的目录,即实际操作的目录。车间 (2) 暂存区(Staging Area/Index):保存即将提交到Git仓库的修改内容。运输工具 Cache (3) 本地仓库(Local Repository):存储代码和版本信息的主要位…

JavaScript-快速语法参考-全-

JavaScript 快速语法参考(全)原文:JavaScript Quick Syntax Reference 协议:CC BY-NC-SA 4.0一、使用 JavaScript 要开始试验 JavaScript,您应该安装一个支持这种语言的集成开发环境(IDE)。有很多不错的选择,比如 NetBeans、Eclipse、Visual Studio、括号。在本书中,我们…

一个方便下载pdb调试符号的小工具Microsoft.PdbDownloader

在调试Windows的系统组件时,如果能够正确使用pdb文件,能够对调试有非常大的帮助。一般情况下,我们是使用windbg来自动下载符号文件,但是有时候对一些简单的需求来说,用windbg反而比较麻烦。比如我现在有一个PE文件,就想只下载它的pdb文件到当前目录,需求看似简单,但是却…

SpringBoot系列:使用原生JDBC实现对数据库的增删改查

在springboot中使用原生JDBC实现对数据库的增删改查application.ymlspring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.…

tp1200触摸屏画面光标使用方法

1:点击画面空白处 2:编辑Tab排序,就是首次显示当前画面时,光标处于光标为1的对象上 3:当IC卡具备Enter点击功能时,可以直接使用刷卡去触发这个按钮 *******************************************************************************************************1:激活屏幕…

MAC苹果电脑JDK下载安装教程

JDK For Mac在Mac上安装JDK的步骤主要包括下载JDK安装包、‌安装JDK、‌查询JDK安装路径、‌配置Java JDK环境变量以及使配置生效。‌以下是详细的步骤说明:‌下载JDK安装包访问Oracle官网,‌选择适合MacOS版本的JDK安装包进行下载。‌对于M系列芯片,‌选择Arm 64 DMG insta…

通过代码添加的控件的事件如何编写?

背景 这两天在重新复习事件,比如Winform控件的事件,利用vs很方便地实现。比如:想要在窗体加载时,修改窗口的标题;我们只需要双击Form1的标题栏即可;vs便会给我们生成如下代码,且光标自动定位到方法体中:private void Form1_Load( object sender, EventArgs e ) {}然后我…

Visual Studio 2013 jsoncpp 0.10.7库编译

前言全局说明Visual Studio 2013 jsoncpp 编译jsoncpp 介绍说明: https://www.cnblogs.com/wutou/p/18367551一、说明 环境: Windows 7 旗舰版 Visual Studio 2013二、选择根据vs2013工具环境和 jsoncpp 介绍,这里选用 0.10.7 版本演示三、准备 3.1 解压文件 进入 makefiles\…

Blazor开发框架Known-V2.0.8

V2.0.8 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造中使用达梦数据库。为快速响应客户的需求,本次版本修复了一些BUG、增强了框架内置功能…

11 IIC通讯协议

目录前言一、IIC介绍1.IIC的时序2.使用IIC对从机寄存器的写操作流程3.使用IIC对从机寄存器的读操作流程二、软件实现IIC协议1.GPIO口配置2.IIC开始信号3.IIC结束信号4.发送数据5.接收数据6.接收ACK响应7.发送ACK和NACK响应8.对寄存器进行写处理9.对寄存器进行读处理三、硬件实现…

判断是否为同构字符串

要想解答这个算法,得明白一个概念,什么是同构字符串,来看一下定义:也就是说,s可以转化为t,对应的t也可以转化为s。解决思路: 我们进行一次的遍历,然后定义了两个dict,来记录s->t,t->s的映射,然后在后面校验一下,这两个dict的value 是否是相同的,来上代码。c…

Gradle编译项目Druid找不到tools.jar和jconsole.jar

原因:jdk11之后不支持druid的两个依赖 方法一:<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.5</version>方法二:<!-- <exclusions> <exclusion> …