智能优化算法——粒子群优化算法(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、全局最优的位移大小和方向
由这三个参数共同确定其最后的位移方向和大小
数学模型:
- 在一个D维空间中,有N个粒子,每个粒子可以表示一个D维的向量,如下:
Xi = (xi1, xi2, xi3…xiD),其中i=1,2,3…N - 第i个粒子的“飞行”速度,也是一个D维的向量,如下:
Vi = (vi1, vi2, vi3…viD), 其中i=1,2,3…N - 在第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相乘=wvij(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:粒子的飞行边界,取决于优化函数。
接下来介绍算法具体步骤:
- 初始化粒子群:设定粒子个数N,并将所有的粒子初始到某个值(位置)上
- 计算所有粒子的适应度。
- 计算待更新的粒子的新速度,以及待更新粒子的新位置(大小和方向)
- 计算新位置的适应度,若新位置适应度更高,则将粒子位置更新,否则不更新
- 判断迭代次数等条件是否满足终止循环条件,若满足,则退出且输出最优结果,否则返回第二步继续迭代计算。
PS:适应度的解释:就是满足我们需要优化的函数的结果的程度。例如,我们需要优化一个函数,并找到其的最小值,那么这个适应度就是值该粒子的函数值是不是全局最小的,或者比上一次的粒子的函数值更小,这个粒子的函数值就是否更小就作为本次迭代的粒子的适应度。
PS:在第三步中,计算出下一步粒子的速度和位置后,需要先进行一个边界检测,看速度和位置是否大于边界值,若速度或位置大于边界值,则直接用边界值替换该计算结果即可。
提醒:在初始化比如50个粒子时,在100次迭代中,找到了全局最优解(例如最小值),但不是意味着所有50个粒子全都收敛到了最小值的位置,我们只需要在100次迭代后有至少一个粒子收敛到了全局最优的位置,我们就能够得到这个最优解。别的粒子可能因为学习率等原因没能向最优解靠近,也没问题。但是这种模型的参数肯定是不如那种能够全体收敛至最优解的模型的参数来得好的。
优缺点分析:
优点:原理简单,容易实现,参数较少。
缺点:容易早熟收敛,导致局部最优,且迭代后期的收敛速度很慢
解释:w参数前期要大一些,保证粒子的个体独立性强一些,能够多搜索一些位置,后期要小一些,多向其他粒子学习,尽可能收敛到全局最优。
参数设置的一些其他规律:前期:c1大一些c2小一些,保证粒子独立性。后期:c1小一些c2大一些,尽快收敛至全局最优。
改进方法:
- 针对以上参数的设定原理,实现参数的自适应变化这是对模型提升的一个好办法,例如可以将w设置成一个随着迭代次数增大而递减的函数。
- 引入一些其他因素,比如速度,边界值随着迭代次数而增大或减小等等方法。
- 结合一些其他的只能优化算法,例如遗传算法(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是一种数据库管理系统ÿ…...
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角色的头部会同步转动,看向视角的方向。 实现步骤 获取看向的…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
