当前位置: 首页 > 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角色的头部会同步转动,看向视角的方向。 实现步骤 获取看向的…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await&#xf…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...