1、基本思想

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

2、更新规则

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

基本粒子群优化算法中的的更新是基于等式(1)和等式(2),等式(1)根据每个粒子

公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。

3、PSO算法的流程和伪代码

4、PSO算法举例

5、PSO算法的demo

#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <random>
#include <ctime>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;const int dim = 1;//维数
const int p_num = 10;//粒子数量
const int iters = 100;//迭代次数
const int inf = 999999;//极大值
const double pi = 3.1415;
//定义粒子的位置和速度的范围
const double v_max = 4;
const double v_min = -2;
const double pos_max = 2;
const double pos_min = -1;
//定义位置向量和速度向量
vector<double> pos;
vector<double> spd;
//定义粒子的历史最优位置和全局最优位置
vector<double> p_best;
double g_best;
//使用eigen库定义函数值矩阵和位置矩阵
Matrix<double, iters, p_num> f_test;
Matrix<double, iters, p_num> pos_mat;//定义适应度函数
double fun_test(double x)
{double res = x * x + 1;return res;
}//初始化粒子群的位置和速度
void init()
{//矩阵中所有元素初始化为极大值f_test.fill(inf);pos_mat.fill(inf);//生成范围随机数static std::mt19937 rng;static std::uniform_real_distribution<double> distribution1(-1, 2);static std::uniform_real_distribution<double> distribution2(-2, 4);for (int i = 0; i < p_num; ++i){pos.push_back(distribution1(rng));spd.push_back(distribution2(rng));}vector<double> vec;for (int i = 0; i < p_num; ++i){auto temp = fun_test(pos[i]);//计算函数值//初始化函数值矩阵和位置矩阵f_test(0, i) = temp;pos_mat(0, i) = pos[i];p_best.push_back(pos[i]);//初始化粒子的历史最优位置}std::ptrdiff_t minRow, minCol;f_test.row(0).minCoeff(&minRow, &minCol);//返回函数值矩阵第一行中极小值对应的位置g_best = pos_mat(minRow, minCol);//初始化全局最优位置
}void PSO()
{static std::mt19937 rng;static std::uniform_real_distribution<double> distribution(0, 1);for (int step = 1; step < iters; ++step){for (int i = 0; i < p_num; ++i){//更新速度向量和位置向量spd[i] = 0.5 * spd[i] + 2 * distribution(rng) * (p_best[i] - pos[i]) +2 * distribution(rng) * (g_best - pos[i]);pos[i] = pos[i] + spd[i];//如果越界则取边界值if (spd[i] < -2 || spd[i] > 4)spd[i] = 4;if (pos[i] < -1 || pos[i] > 2)pos[i] = -1;//更新位置矩阵pos_mat(step, i) = pos[i];}//更新函数值矩阵for (int i = 0; i < p_num; ++i){auto temp = fun_test(pos[i]);f_test(step, i) = temp;}for (int i = 0; i < p_num; ++i){MatrixXd temp_test;temp_test = f_test.col(i);//取函数值矩阵的每一列std::ptrdiff_t minRow, minCol;temp_test.minCoeff(&minRow, &minCol);//获取每一列的极小值对应的位置p_best[i] = pos_mat(minRow, i);//获取每一列的极小值,即每个粒子的历史最优位置}g_best = *min_element(p_best.begin(), p_best.end());//获取全局最优位置}cout << fun_test(g_best);
}int main()
{init();PSO();system("pause");return 0;
}

标准粒子群优化算法 PSO相关推荐

  1. 概率检索模型+模糊k近邻+粒子群优化算法(PSO)

    1. 概率检索模型 文档属于"相关"类的概率与属于"不相关"类的概率的比值(也叫"优势比"). 显然,这个比值越大,代表该文档与查询的相关度 ...

  2. 【计算智能】——群体智能算法(蚁群优化算法ACO、粒子群优化算法PSO)

    群体智能算法 与大多数基于梯度的优化算法不同,群体智能算法依靠的是概率搜索算法. 与梯度算法及传统演化算法相比优点: 没有集中控制约束,不会因为个体的故障影响整个问题的求解. 以非直接信息交流的方式确 ...

  3. 粒子群优化算法 PSO

    文章目录 1.基本内容 1.1 概念 1.2 基本原理 1.3 基本步骤 2.代码分析 2.1 Rastrigrin()函数 2.2 Schaffer()函数 2.3 Griewank()函数 2.4 ...

  4. 【原理与代码讲解】粒子群优化算法 PSO(基础版)

    0 前言 Gitee 代码地址: https://gitee.com/futurelqh/GA 粒子群优化算法(Particle Swarm Optimization,PSO),其思想源于对鸟群觅食过 ...

  5. 优化算法(四)——粒子群优化算法(PSO)

    粒子群算法(Particle Swarm Optimization,PSO)是一种模仿鸟群.鱼群觅食行为发展起来的一种进化算法.其概念简单易于编程实现且运行效率高.参数相对较少,应用非常广泛.粒子群算 ...

  6. 图解粒子群优化算法(PSO)

    PSO:particle swarm optimization 注:以下的鸟就是粒子. 总体思想 有若干只鸟xix_ixi​,位置可能各不相同,但是每只鸟需要记录下自己的个体历史最优解pbestipb ...

  7. python特征选择pso_粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)

    作者:Geppetto 前面我们介绍了特征选择(Feature Selection,FS)与离散化数据的重要性,总览的介绍了PSO在FS中的重要性和一些常用的方法,介绍了FS与离散化的背景,介绍本文所 ...

  8. 粒子群算法离散化各代表什么_粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)...

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识!也可以搜索号:磐创AI,关注我们的文章. 作者:Geppetto 前 ...

  9. PSO 粒子群优化算法 大整理

    一.粒子群算法的概念   粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为 ...

  10. matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 一.介绍 粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优.群体迭代,粒子在解空间追 ...

最新文章

  1. Oracle 9i DBA Fundamentals I 学习笔记(三)
  2. Spring JDBC-使用注解配置声明式事务
  3. 永远不要在 MySQL 中使用 UTF-8
  4. Nginx提供静态内容
  5. three.js glb 多个_直降7.1万元 奔驰GLB开始“大甩卖”
  6. Windows Server 2016多用户同时登录远程桌面
  7. JS:ES6-2 const 关键字
  8. This ZooKeeper instance is not currently serving requests
  9. 计算机科学与技术基础与核心,浅谈计算机科学与技术专业核心课程教学
  10. 计算机系统维护课程设计报告,计算机系统维护工程(第2版)
  11. 包干到户是最好的软件项目管理方法
  12. Mac录屏想只要电脑内置的声音
  13. GPS定位轨迹抽稀之道格拉斯-普克(Douglas-Peuker)算法详解
  14. java游泳馆浴池管理系统-小程序
  15. 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结
  16. 用于链接预测的邻域重叠感知图神经网络
  17. 2022,这些大屏可视化素材,够你用一整年了(附可视化素材包)
  18. ARM+Linux日常开发笔记
  19. EvenBus No subscribers registered for event class 发送消息失败
  20. 利用工具定位内存泄漏问题 valgrind memwatch dmalloc

热门文章

  1. 2023王道计算机考研数据结构第一章-绪论
  2. 笔记本电脑显示打印机服务器关闭,电脑打印机服务能设定自动关闭吗
  3. matlab复杂网络上的博弈演化,复杂网络上的演化博弈.pdf
  4. Tecplot 360 EX 2019 安装教程
  5. Java判断是否为素数
  6. 使用java udp开发图片拆包组包例子
  7. PreferenceActivity的使用
  8. 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
  9. 怎么查看个人CSDN账号积分-最靠谱!
  10. 吉米多维奇习题集题集loading---