标准粒子群算法(PSO)及其Matlab程序和常见改进算法

2023-11-16

一、 粒子群算法概述

粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个”极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

二、 算法原理

粒子群算法采用常数学习因子,及惯性权重,粒子根据如下的公式更新自己的速度和位置。

Vki=ωkVi1i+c1r1(QbiQk1i)+c2r2(QbgQk1i)Qki=Qk1i+Vki

三、 算法步骤

1、 随机初始化种群中各微粒的位置和速度;
2、 评价个粒子的适应度,将各粒子的位置和适应度储存在各微粒的pbest( Qbi )中,将所有pbest中适应度最优的个体的位置和适应度存储在gbest( Qbg )中。
3、 更新粒子的速度和位移。

Vki=ωkVi1i+c1r1(QbiQk1i)+c2r2(QbgQk1i)Qki=Qk1i+Vki

4、 对每个微粒,与其前一个最优位置比较,如果较好,则将其作为当前的最优位置。
5、 比较当前所有的pbest和上一迭代周期的gbest,更新gbest。
6、 若满足停止条件(达到要求精度或迭代次数),搜索停止,输出结果,否则,返回2。

四、 算法改进

1、 带压缩因子的粒子群算法。
主要是限定学习因子,粒子的更新公式变为为:

Vki=ϕ[Vi1i+c1r1(QbiQk1i)+c2r2(QbgQk1i)]Qki=Qk1i+Vki

其中, ϕ=22CC24C,C=c1+c2

2、 权重改进的粒子群算法。
随着迭代次数的增加,惯性权重从最大变化到最小。变化的公式是:

ω=ωmaxt(ωmaxωmin)tmax

3、 自适应权重法。主要是为了平衡全局搜索和局部搜索能力。权重的表达式为:
ω=ωmin(ωmaxωmin)(ffmin)favgfminωmax,ffavg,f>favg

4、 随机权重法。
{ω=μ+σN(0,1)μ=μmin+(μmaxμmin)rang(0,1)

5、 变学习因子的粒子群算法。
(1)、 c1=c2=cmaxt(cmaxcmin)tmax
(2)、 {c1=c1,ini+c1,finc1,initmax c2=c2,ini+c2,finc2,initmax
6、二阶粒子群算法。
Vki=ϕ[Vi1i+c1r1(Qbi2Qki+Qk1i)+c2r2(Qbg2Qki+Qk1i)]Qki=Qk1i+Vki

五、 粒子群算法参数介绍

标准粒子群算法中,有以下几个参数:
1、fitness,待优化的目标函数
2、粒子数目:N
3、学习因子1:c1
4、学习因子2:c2
5、惯性权重:w
6、最大迭代系数:M
7、自变量的个数:D
1、finess 是待优化的目标函数,如何构造函数是用粒子群算法的前提,构造函数的结构直接决定了计算结果的好坏,特别是在多目标优化的问题中。
2、学习因子一般取2,c1决定着其局部搜寻能力,c2决定着其全局搜寻能力。
3、惯性权重大,便于全局搜索,惯性权重小,便于局部搜索。
4、最大迭代系数一般取1000—10000,具体看精度要求。
5、自变量的个数有目标函数决定。

学习因子、惯性权重是改进粒子群算法的关键
更新函数决定了粒子群算法的本质能力。

function [ xm,fv ] = PSO( fitness,N,c1,c2,w,M,D )
% fitness,待优化的目标函数
% 粒子数目:N
% 学习因子1:c1,一般取2
% 学习因子2:c2,一般取2
% 惯性权重:w
% 最大迭代系数:M
% 自变量的个数:D
% 目标函数取最大值是的自变量值:xm
% 目标函数的最小值:fv

format long;
vmax=0.2*2*pi;
vmin=-0.2*2*pi;
xmax=1*pi;
xmin=-1*pi;
for i=1:N
    for j=1:D
         x(i,j)=randn;
         v(i,j)=randn;
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg=x(N,:);
for i=1:N-1
    if fitness(x(i,:)) < fitness(pg)
        pg=x(i,:);
    end
end
for t=1:M
    for i=1:N
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:)) < p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i) < fitness(pg)
            pg=y(i,:);
        end
    end
end
xm=pg';
fv=fitness(pg);
format short;
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准粒子群算法(PSO)及其Matlab程序和常见改进算法 的相关文章

随机推荐

  • python 字典的增删改查

    由于字典并不能像列表一样切片 所以字典并没有添加单一元素的 方法 但可以通过以下方法添加 dictory 猫 cat 狗 dog 狼 holf print dictory dictory 猪 pig print dictory 添加多个元素
  • 装多系统的U盘启动盘的制作

    制作安装多系统USB启动盘 下载做启动盘软件 建议linux和windows都支持的软件做系统盘 推荐YUMI或UltraISO 本教程用的yumi UltraISO 百度搜 图形化界面 收费 但破解版很多 YUMI 简单 免安装 下载链接
  • 软件测试复习03:动态测试——白盒测试

    作者 非妃是公主 专栏 软件测试 个性签 顺境不惰 逆境不馁 以心制境 万事可成 曾国藩 文章目录 逻辑覆盖法 最常用 程序插桩技术 基本路径法 点覆盖 边覆盖 边对覆盖 主路径覆盖 符号测试 错误驱动测试 习题 白盒测试常用技术有 逻辑覆
  • 支付宝生活号开发配置以及相应的流程

    由于最近公司涉及到支付宝服务号升级生活号 故有机会接触支付宝生活号的开发 前期准备 申请支付宝生活号 步骤 说实话 支付宝生活号管理后台涉及功能太多 所以找到相应的配置项还是比较绕的 1 登录支付宝生活号平台 找到 开发者 这个菜单 2 进
  • ​第一个C#互联网客户端

    开发环境 本文涉及到的C 工程是基于 Visual Studio 2019 Ver16 10 建议更新到Visual Studio 2019最新的版本 准备工作 首先需要下载 WebRuntime 二进制包 TheUniverse下载地址
  • jar包替换class文件方法

    直接打成非压缩的jar包或war包 先将对应的jar或war包使用unzip解压出来 再用java的jar命令再打个非压缩的包 如 unzip myapp war d myapp cd myapp jar cvfM0 myapp war
  • 详解HTTP协议版本(HTTP/1.0、1.1、2.0、3.0区别)

    HTTP 1 0 1 1 2 0 3 0区别 HTTP1 0 无连接 队头阻塞 缓存 HTTP 1 1 特点 优缺点 长连接 管道传输 HTTP 1 0 比较 HTTP 1 1 HTTP协议层次结构图 HTTP 2 0 头部压缩 二进制格式
  • 运输层---运输层概述 UDP协议与TCP协议

    运输层是面向通信功能中的最高层 又是面向用户功能中的最底层 一 运输层的作用 AP n 代表各个进程 通讯并不是主机和主机之间的通信 实际上是应用进程之间的通信 IP协议的作用范围 主机和主机之间进行通信 端口 端口实际上是一个标识符 标志
  • 放大器内部结构原理图解

    晶体管放大器结构原理图解 功率放大器的作用是将来自前置放大器的信号放大到足够能推动相应扬声器系统所需的功率 就其功率来说远比前置放大器简单 就其消耗的电功率来说远比前置放大器为大 因为功率放大器的本质就是将交流电能 转化 为音频信号 当然其
  • 【好工具】Sourcegraph助你网页端快速浏览项目代码

    欢迎大家来到 好工具 专栏 这个专栏面向所有希望获得高效生产力工具的朋友 在这个专栏里 我们会和大家聊聊那些狂拽酷霸炫的生产力工具 相信大家一定我一样 茫然于庞大的工具海洋 却仍找不到称心的它来使用 这也是 好工具 专栏存在的意义 发掘 折
  • Unity UGUI的Image(图片)组件的介绍及使用

    UGUI的Image 图片 组件的介绍及使用 1 什么是UGUI的Image 图片 组件 UGUI的Image 图片 组件是Unity引擎中的一种UI组件 用于显示2D图像 它提供了一种简单而灵活的方式来在游戏中加载和显示图片 2 为什么要
  • 如何提高目标检测模型的置信度,提高mAP

    首先引用https blog csdn net Nire Yeyu article details 105403220 1 调小score threshold 这种方法属于见效快 但是治标不治本 在验证阶段直接调小score thresho
  • Java OOM问题如何排查

    目录 什么是OOM 导致OOM问题的原因 排查手段 调优命令有哪些 JAVA虚拟机命令详解 JAVA OOM问题排查记录 一 一个Java内存泄漏的排查案例 什么是OOM OOM为out of memory的简称 来源于java lang
  • [元带你学NVMe协议] ZNS SSD 性能测试:解决传统SSD问题的高性能存储栈设计

    声明 主页 元存储的博客 CSDN博客 依公开知识及经验整理 如有误请留言 个人辛苦整理 付费内容 禁止转载 全文 3000 字 内容摘要 1 性能测试 1 1 环境搭建 1 2 原始设备的性能
  • Open-Set Object Detection and Discovery (OSODD)

    最近因为工程需要 就去调研一下 open set detection 算法 然后发现一篇不错的论文 Towards Open Set Object Detection and Discovery 论文使用了额外的 memory 来当做网络的
  • Android Studio开发Flutter常用插件

    1 Rainbow Brackets 彩虹括号 Dart的括号太多了 让括号有颜色 还是很有作用的 2 JsonToDart 根据JSON字符串自动生成Dart的Model类 3 flutter img sync 图片资源管理插件 把图片资
  • 网络安全笔记--SQL注入

    1 基础 a 简要明确参数类型 数字 字符 搜索 JSON等 b 简要明确请求方法 GET POST COOKIE REQUEST HTTP等 其中SQL语句干扰符号 等 c 了解常用的注释符 可以注释掉前面的引号 可以用 替换 两者的效果
  • ext.ajax.request跨域,跨域Ajax访问header中 x-requested-with丢失

    前端调用后端接口 本域情况下 ajax方式调用 request header中包含x requested with信息 跨域情况下 request header中不再包含x requested with 说明 1 前端ajax封装的jque
  • c++: ini 文件解析(依赖库:inifile)

    Initialization File 初始化文件 是 windows 系统配置文件所采用的存储格式 统管 windows 的各项配置 文件会以不同的扩展名 如 ini cfg conf 等 用来配置应用软件以实现不同的需求 可以用来存放软
  • 标准粒子群算法(PSO)及其Matlab程序和常见改进算法

    一 粒子群算法概述 粒子群优化算法 PSO 是一种进化计算技术 evolutionary computation 1995 年由Eberhart 博士和kennedy 博士提出 源于对鸟群捕食的行为研究 该算法最初是受到飞鸟集群活动的规律性