最优化算法之粒子群算法(PSO)
一、粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
二、粒子群算法分析
1、基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
2、更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
公式(2)和 公式(3)被视为标准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;
}
参考:https://blog.csdn.net/myarrow/article/details/51507671
https://blog.csdn.net/google19890102/article/details/30044945
https://wenku.baidu.com/view/65c600b9294ac850ad02de80d4d8d15abe230048.html
https://blog.csdn.net/darin1997/article/details/80675933
最优化算法之粒子群算法(PSO)相关推荐
- 智能优化算法之粒子群算法(PSO)
1. 粒子群算法思想起源 粒子群优化算法 ( P a r t i c l e S w a r m o p t i m i z a t i o n , P S O ) (Particle Swarm o ...
- 优化算法(粒子群算法)
基本概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化 ...
- 优化算法:粒子群算法,遗传算法,差分进化算法
目录 1.粒子群算法(PSO) 2.遗传算法 3.差分进化算法 1.粒子群算法(PSO) 整个粒子群优化算法的算法框架如下: step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始 ...
- 优化算法笔记|粒子群算法理解及Python实现
粒子群算法的理解及Python实现 1.粒子群算法概述 2 基本PSO算法流程图 3 粒子群算法的Python实现 1.粒子群算法概述 粒子群算法 来源于对鸟群捕食模型的修正. 假设在一个n维空间中, ...
- 群体智能算法之粒子群算法
智能算法:粒子群算法 1. 简介 2. 粒子群算法(PSO)算法数学模型 2.1 数学模型 2.2 算法流程 3. 具体应用 4. PSO算法的参数选取原则 5. 改进版本的PSO算法 5.1 捕食逃 ...
- 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)
演化计算(蚁群算法.粒子群算法.遗传算法.演化规则......) 1.概念 2.传统算法和演化计算 3.一般步骤 1.概念 演化计算主要用于解决预测优化问题.由于演化计算利用一组解求解,所以这一组 ...
- 【群体智能优化算法】粒子群算法(PSO)入门实践
1.群体智能 群体智能源于对以蚂蚁.蜜蜂等为代表的社会性昆虫的群体行为的研究.最早被用在细胞机器人系统的描述中.它的控制是分布式的,不存在中心控制.群体具有自组织性. 群体智能优化算法主要模拟了昆虫. ...
- 数学建模国赛 常考赛题类型(模拟退火算法、粒子群算法、遗传算法)
不知小伙伴们有没有发现,在1992~2020年历年国赛赛题中,优化类赛题所占的比例非常大,如在近五年的题目中: 2016A:系泊系统的设计: 2017B:"拍照赚钱"的任务定价 2 ...
- 多目标粒子群算法_PSO粒子群算法可视化
PSO粒子群算法可视化: 知乎视频www.zhihu.com 代码如下(参见 github): import numpy as np from sko.PSO import PSOdef demo_ ...
- 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解...
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...
最新文章
- 举个卡戴珊的例子,讲讲Hinton的Capsule是怎么回事 | 教程+代码
- 计算机开始按钮作用,Win8.1的12个变化:开始按钮回归功能不再
- 14.go build
- 自动化机器人 rpa_机器人过程自动化和机器人的出现
- 简述线性反馈移位寄存器
- 3.Python标准库—math库的使用
- JavaWeb项目上云教程(Java项目在腾讯云上部署操作教程)
- bootstrap-tagsinput操作标签对象,实现从表格中选人和移除
- [Lonlife1031]Bob and Alice are eating food(递推,矩阵快速幂)
- 软件测试oracle怎么学,怎么自学软件测试?
- 基于WordPress搭建个人网站
- Linux服务之DHCP服务篇(scp)
- 控制面板中的程序无法正常卸载
- 运维之眼——流量采集网络
- 地球系统模式(CESM)应用
- 又一个万亿级市场迎来新玩家?抖音内测网络拍卖功能
- 基于STM32的恒流源设计
- STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
- Crypto.com、Dock项目评级更新 | TokenInsight
- (转)MultipleOutputFormat和MultipleOutputs
热门文章
- 从0开始的技术美术之路(十)伽马校正
- idea,as git插件基本操作(插件回滚,撤销,恢复上一个版本)
- 天正的计算机快捷命令大全,新手必看-史上最全CAD快捷键大全
- python说课稿_初中信息技术-初识Python说课ppt课件
- 解决Mac版 snipaste 不在菜单栏显示,无法修改快捷键
- 使用超临界二氧化碳的晶圆清洗技术
- 智慧产业园区标准体系研究报告 附下载
- lopatkin俄大神精简Windows 10 Pro 19041.450 20H1 Release x86-x64 ZH_CN DREY[2020-08-19]
- 是时候复习下 Webpack 了
- js实现canvas在线画板