快速简单理解粒子群优化算法(Particle Swarm Optimization, PSO)

本文主要是介绍快速简单理解粒子群优化算法(Particle Swarm Optimization, PSO),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.粒子的两个性质:位置、速度

位置是什么: 解空间中的点

速度是什么:解空间点的运动性质,和物理中的速度类似,是一个矢量,包括大小和方向,也就是找到下一个迭代点时的方向和距离

当粒子具有这两个性质的时候,转为数学语言为:当前解的大小已知,判断是否为极值,不是的话,按照一定的方向走一定的距离,寻找下一个迭代点,一直到迭代结束。

2.粒子群中的两个极值:个体极值、群体极值

个体极值是什么:单个粒子在运动过程中的极值的最优位置(个人力量的最大)。

群体极值是什么:种群中所有粒子搜索到的最优位置(群体力量最大)

两者关系:群体极值是最优的个体极值

3.迭代公式中的重要变量名称

\vec{x_{i}}: 第i个粒子的位置

\vec{v_{i}}:第i个粒子的速度

\vec{p_{i}}:个体极值

\vec{p_{g}}:种群极值

4.迭代公式

找到最优值=随机一些粒子从初始位置开始,根据速度不断搜寻。

\vec{v_{i}^{k+1}}=W\vec{v_{i}^{k}}+c_{1}r_{1}(\vec{p_{i}^{k}}-\vec{x_{i}^{k}})+c_{2}r_{2}(\vec{p_{g}^{k}}-\vec{x_{i}^{k}})         -------速度更新

\vec{x_{i}^{k+1}} = \vec{x_{i}^{k}} +\vec{v_{i}^{k+1}}      -------位置更新

速度更新公式的理解:

下一次速度 = 当前速度*惯性矩阵+当前个体极值位置偏差+当前种群极值位置偏差

用当前两种极值偏差约束速度,使速度更向极值方向靠拢,加强收敛性

位置更新公式理解:

下一次位置 = 当前位置+更新后的速度

找到下一个可能极值点

5.总结

粒子群优化算法更新结合只用当前时刻去约束步长和方向,不涉及以前时刻极值。

和最速梯度下降法类似,只不过将梯度改成自己定义的下降方向

这篇关于快速简单理解粒子群优化算法(Particle Swarm Optimization, PSO)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301995

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3