当前位置: 首页 > news >正文

智能优化算法——粒子群优化算法(PSO)(小白也能看懂)

前言:

暑假期间,因科研需要,经常在论文中看到各种优化算法,所以自己学习了一些智能优化的算法,做了一些相关的纸质性笔记,寒假一看感觉又有点遗忘了,并且笔记不方便随时查看,所以希望将学过的知识从新捡一捡,作为几篇博客发表一下,会用最通俗的小白语言讲述只要逐字认真看一般都能看得懂(也是从我一个小白的角度自己对算法的理解),如有讲错的地方,希望大神能够批评指正。

理论知识:

形象讲解:如下面一张图片所示。在一个范围内,假如此时A点为目前的最优点,那么B点和C点都可能会向A点靠,但不是直接到A点而是下一步(下一个迭代循环)会向A点靠。
在这里插入图片描述
C—直接—>A:(1,1) = (2,3)+(-1,-2)
A点 原始位置 位移的方向和大小
C—靠近—>A:(1,1) = (2,3)+rand*(-1,-2)
A点 原始位置 位移的方向和大小(rand为0-1之间的随机数)
在实际中,C点的位移方向大小由三个参数所确定
1、惯性(上一次迭代时候的位移大小和方向)
2、自身希望的位移大小和方向
3、全局最优的位移大小和方向
由这三个参数共同确定其最后的位移方向和大小

数学模型:

  1. 在一个D维空间中,有N个粒子,每个粒子可以表示一个D维的向量,如下:
    Xi = (xi1, xi2, xi3…xiD),其中i=1,2,3…N
  2. 第i个粒子的“飞行”速度,也是一个D维的向量,如下:
    Vi = (vi1, vi2, vi3…viD), 其中i=1,2,3…N
  3. 在第t代中的某个粒子,向比t+1代更新时的更新公式如下:
    先计算位移大小:Vij(t+1) = wvij(t) + c1r1(t)[Pij(t) - xij(t)] + c2r2(t)[Pgi(t) - xij(t)]
    再更新位置:xij(t+1) = xij(t) + Vij(t+1)
    下面我逐一解释一下上述方程的各个变量的意思:
    w:惯性权重
    vij(t):上一次迭代的速度。其与w相乘=w
    vij(t)就得到了整个惯性变量。
    c1:参数1,可以理解为学习率,就是控制每次迭代粒子步幅的权重。
    r1(t):0-1之间的随机数,与c1一起起作用。
    Pij(t):个体认为的最优点。
    至此c1r1(t)[Pij(t) - xij(t)]:向每个个体粒子飞行的具体方向和大小。
    c2:社会学习率,就是控制整个种群(所有变量粒子)的学习率。
    r2:同理r1与c2一起起作用。
    Pgi(t):全局认为的最优点。
    至此c2r2(t)[Pgi(t) - xij(t)]:向全局最优点应该飞行的具体方向和大小

    注意:不是更新位置就一定是更新位置,若更新后的点xij(t+1)的适应度不如原位置xij(t),则不更新位置,保留在原位置。(适应度后面解释)

算法流程:

首先:设置各个参数:w:0.5-0.8;c1、c2:0.1-2;以及vmax和xmax:粒子的飞行边界,取决于优化函数。
接下来介绍算法具体步骤:

  1. 初始化粒子群:设定粒子个数N,并将所有的粒子初始到某个值(位置)上
  2. 计算所有粒子的适应度。
  3. 计算待更新的粒子的新速度,以及待更新粒子的新位置(大小和方向)
  4. 计算新位置的适应度,若新位置适应度更高,则将粒子位置更新,否则不更新
  5. 判断迭代次数等条件是否满足终止循环条件,若满足,则退出且输出最优结果,否则返回第二步继续迭代计算。
    PS:适应度的解释:就是满足我们需要优化的函数的结果的程度。例如,我们需要优化一个函数,并找到其的最小值,那么这个适应度就是值该粒子的函数值是不是全局最小的,或者比上一次的粒子的函数值更小,这个粒子的函数值就是否更小就作为本次迭代的粒子的适应度。
    PS:在第三步中,计算出下一步粒子的速度和位置后,需要先进行一个边界检测,看速度和位置是否大于边界值,若速度或位置大于边界值,则直接用边界值替换该计算结果即可。
    提醒:在初始化比如50个粒子时,在100次迭代中,找到了全局最优解(例如最小值),但不是意味着所有50个粒子全都收敛到了最小值的位置,我们只需要在100次迭代后有至少一个粒子收敛到了全局最优的位置,我们就能够得到这个最优解。别的粒子可能因为学习率等原因没能向最优解靠近,也没问题。但是这种模型的参数肯定是不如那种能够全体收敛至最优解的模型的参数来得好的。

优缺点分析:

优点:原理简单,容易实现,参数较少。
缺点:容易早熟收敛,导致局部最优,且迭代后期的收敛速度很慢
解释:w参数前期要大一些,保证粒子的个体独立性强一些,能够多搜索一些位置,后期要小一些,多向其他粒子学习,尽可能收敛到全局最优。
参数设置的一些其他规律:前期:c1大一些c2小一些,保证粒子独立性。后期:c1小一些c2大一些,尽快收敛至全局最优。

改进方法:

  1. 针对以上参数的设定原理,实现参数的自适应变化这是对模型提升的一个好办法,例如可以将w设置成一个随着迭代次数增大而递减的函数。
  2. 引入一些其他因素,比如速度,边界值随着迭代次数而增大或减小等等方法。
  3. 结合一些其他的只能优化算法,例如遗传算法(GA),免疫算法,模拟退火算法等等,来帮助粒子跳出局部最优,改善收敛速度。

参考:

参考b站相关视频——通俗易懂讲算法-最优化之粒子群优化(PSO)
链接:通俗易懂讲算法-最优化之粒子群优化(PSO)
谢谢b站这位up主的讲解,非常通透。

后续

后续会有时间分析一些别的优化算法的自己的相关学习理解——遗传算法(GA)、梯度下降算法、主成分分析(PCA)等。

相关文章:

智能优化算法——粒子群优化算法(PSO)(小白也能看懂)

前言: 暑假期间,因科研需要,经常在论文中看到各种优化算法,所以自己学习了一些智能优化的算法,做了一些相关的纸质性笔记,寒假一看感觉又有点遗忘了,并且笔记不方便随时查看,所以希…...

Lesson 6.4 逻辑回归手动调参实验

文章目录一、数据准备与评估器构造1. 数据准备2. 构建机器学习流二、评估器训练与过拟合实验三、评估器的手动调参在补充了一系列关于正则化的基础理论以及 sklearn 中逻辑回归评估器的参数解释之后,接下来,我们尝试借助 sklearn 中的逻辑回归评估器&…...

Oracle数据库入门大全

oracle数据库 Oracle 数据库、实例、用户、表空间、表之间的关系 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSv0SArH-1675906973035)(vx_images/573695710268888.png 676x)] 数据库 数据库是数据集合。Oracle是一种数据库管理系统&#xff…...

C语言操作符详解(下)

提示:本篇内容是C语言操作符详解下篇 文章目录前言八、条件表达式九、逗号表达式十、 下标引用、函数调用和结构成员1. [ ] 下标引用操作符2. ( ) 函数调用操作符3.结构成员访问操作符十一、表达式求值1. 隐式类型转换举例说明1举例说明2举例说明32.算数转换3.操作…...

【五六七人口普查】我国省市两级家庭户住房状况

人口数据是我们在各项研究中最常使用的数据!之前我们分享过第七次人口普查(简称七普)的数据!很多小伙伴拿到数据后都反馈数据非常好用,同时很多小伙伴咨询有没有前面几次人口普查的数据,这样方便做人口变化…...

大数据框架之Hadoop:入门(二)从Hadoop框架讨论大数据生态

第2章 从Hadoop框架讨论大数据生态 2.1 Hadoop是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通常是指一个更广泛的概念-Hadoop生态圈。 2.2 Hadoop发展历史 1&…...

负载均衡反向代理下的webshell上传+apache漏洞

目录一、负载均衡反向代理下的webshell上传1、nginx 负载均衡2、搭建环境3、负载均衡下的 WebShell连接的难点总结难点一、需要在每一台节点的相同位置都上传相同内容的 WebShell难点二、无法预测下次的请求交给哪台机器去执行。难点三、下载文件时,可能会出现飘逸&…...

打造安全可信的通信服务,阿里云云通信发布《短信服务安全白皮书》

随着数字化经济的发展,信息保护和数据安全成为企业、个人关注的焦点。近日,阿里云云通信发布《短信服务安全白皮书》,该白皮书包含安全责任共担、安全合规、安全架构三大板块,呈现了阿里云云通信在信息安全保护方面的技术能力、安…...

Python项目实战——外汇牌价(附源码)

前言 几乎每个人都在使用银行卡,今天我们就来爬取某行外汇牌价,获取我们想要的数据。 环境使用 python 3.9pycharm 模块使用 requests 模块介绍 requestsrequests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到&…...

String、StringBuffer、StringBuilder有什么区别?

第5讲 | String、StringBuffer、StringBuilder有什么区别? 今天我会聊聊日常使用的字符串,别看它似乎很简单,但其实字符串几乎在所有编程语言里都是个特殊的存在,因为不管是数量还是体积,字符串都是大多数应用中的重要…...

python基于django+vue的高铁地铁火车订票管理系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 使用工具简介 4 2.2 环境配置 4 2.4 MySQL数据库 5 2.5 框架介绍 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可…...

全栈自动化测试技术笔记(一):前期调研怎么做

昨天下午在家整理书架,把很多看完的书清理打包好,预约了公益捐赠机构上门回收。 整理的过程中无意翻出了几年前的工作记事本,里面记录了很多我刚开始做自动化和性能测试时的笔记。 虽然站在现在的角度来看,那个时候无论是技术细…...

专家培养计划

1、先知道一百个关键词 进入一个行业,如果能快速掌握其行业关键词,你会发现,你和专家的距离在迅速缩短。 若不然,可能同事间的日常交流,你都会听得云里雾里,不知所云。 比如做零售,就要了解零售…...

583. 两个字符串的删除操作 72. 编辑距离

583. 两个字符串的删除操作 dp[i][j]:以i-1结尾的word1和j-1结尾的word2 变成相同字符串最少的步骤为dp[i][j] 初始化dp[i][0],dp[0][j]为空字符串和第一个字符匹配的最少步骤,即i/j,删除对应的字符个数。dp[i][0]i,dp[0][j]j; 遍历两个字符串。 若word1…...

[多线程进阶] 常见锁策略

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. 常见的锁策略 1.1 乐观锁 vs 悲观锁 1.2 读写…...

Scala - Idea 项目报错 Cannot resolve symbol XXX

一.引言 Idea 编译 Scala 项目大面积报错 Cannot resolve symbol xxx。 二.Cannot resolve symbol xxx 1.问题描述 Idea 内的 Scala 工程打开后显示下述异常: 即 Scala 常规语法全部失效,代码出现大面积红色报错。 2.尝试解决方法 A.设置 Main Sourc…...

信息化发展与应用的新特点

一、信息化发展与应用二、国家信息化发展战略三、电子政务※四、电子商务五、两化融合(工业和信息化)六、智慧城市 一、信息化发展与应用 我国在“十三五”规划纲要中,将培育人工智能、移动智能终端、第五代移动通信(5G)先进传感器等作为新…...

软件测试】测试时间不够了,我很慌?项目马上发布了......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 常见的几种情况&…...

MapReduce编程规范

MapReduce编程规范 MapReduce的开发一共有八个步骤,其中Map阶段分为2个步骤,Shuffle阶段4个步骤,Reduce阶段分为2个步骤。 Map阶段2个步骤 设置InputFormat类,将数据切分为Key-Value(K1和V1)对,输入到第二步。 自定义Map逻辑,将第一步的结果转换成另外的…...

Unity 如何实现游戏Avatar角色头部跟随视角转动

文章目录功能简介实现步骤获取看向的位置获取头部的位置修改头部的朝向限制旋转角度超出限制范围时自动回正如何让指定动画不受影响功能简介 如图所示,当相机的视角转动时,Avatar角色的头部会同步转动,看向视角的方向。 实现步骤 获取看向的…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...