1. 简介

粒子群优化算法(PSO)是一种基于群体智能的进化计算技术,其思想来源于人工生命和进化计算理论,最早在1995年由美国的Kennedy教授和Eberhart教授受鸟群觅食行为的启发提出的。它同遗传算法类似,通过个体间的协作和竞争实现全局搜索。系统初始化为一组随机解,称之为粒子。通过粒子在搜索空间的飞行完成寻优,,它没有遗传算法的交叉以及变异算子,而是粒子在解空间追随最优的粒子进行搜索。粒子群算法采用实数求解,并且需要调整的参数较少,易于实现,是一种通用的全局搜索算法。

2. 算法原理

在粒子群优化算法中,每个优化问题的潜在解都可以想象成n维搜索空间上的一个点,称之为“粒子”。粒子在搜索空间中以一定的速度飞行,这个速度是根据自身的飞行经验和同伴的飞行经验来动态调整的,所有的粒子都有一个被目标函数决定的适应度值,并且知道自己到目前为止发现的最好位置和当前位置,这个可以看做是粒子自己的飞行经验,然后每个粒子还知道目前为止整个群体中所有粒子发现的最好位置,这个可以看做是粒子的同伴的飞行经验。

每个粒子使用下列信息改变自己的当前位置:

  1. 当前位置;
  2. 当前飞行速度;
  3. 当前位置与自己最好位置之间的距离;
  4. 当前位置与群体最好位置之间的距离。

粒子群中粒子的初始位置是在搜索区域内随机产生,每个粒子群的初始速度也是随机给定的,在搜索的过程中,粒子群和每个粒子所经历的最好位置及相应的适应度值分别被记忆下来。粒子群优化算法最基本的概念在于加速每个粒子朝它自己所经历的和群体所经历的最好位置移动。

基本粒子群优化算法中,粒子群有m个粒子组成,每个粒子的位置代表优化问题在n维搜索空间中的潜在解。粒子根据如下3条原则来更新自身状态:1)保持自身惯性;2)按自身的最优位置来改变状态;3)按群体的最优位置来改变状态。

假设在一个n维的搜索空间中,由m个粒子组成的种群,其中第i个粒子位置为,其速度为。它的个体极值为,种群的全局极值为。粒子找到上述两个极值后,就根据下面的公式来更新自己的速度和位置:

其中,称为学习因子或者加速常数,是介于(0,1)之间的随机数,分别是粒子i在第k次迭代中第d维的速度和位置,是粒子i在第d维的个体极值的位置,是群体在第d维的全局极值的位置。调节粒子飞向自身最好位置方向的步长,调节粒子向全局最好位置飞行的步长。为了减少在优化过程中粒子离开搜索空间,或者通常限定于一定范围内。

3. 算法流程

算法流程图如下所示

4. 应用举例-求解非线性函数的最大值(取之于网上,抱歉记不得网址了)

clc;clear all; close all;
tic;                                    % 程序运行计时
E0 = 0.001;                             % 允许误差
MaxNum = 100;                           % 粒子最大迭代次数
narvs = 1;                              % 目标函数的自变量个数
particlesize = 30;                      % 粒子群规模
c1 = 2;                                 % 个体经验学习因子
c2 = 2;                                 % 社会经验学习因子
w =0.6;                                 % 惯性因子
vmax = 0.8;                             % 粒子的最大飞翔速度
x = -5 + 10 * rand(particlesize, narvs);% 粒子所在的位置 (rand产生的大小为0,1),规模是 粒子群数和参数需求数 设置了x的取值范围[-5,5]
v = 2*rand(particlesize,narvs);         % 粒子的飞翔速度  生成每个粒子的飞翔速度,由于是只有一个变量,所以速度是一维的
%定义函数
fitness = @(x)1/(1+(2.1*(1 - x + 2 * x.^2).*exp(-x.^2/2))); for i= 1:particlesizef(i) = fitness(x(i,1));
end
% 完成了对每一个粒子,在各自位置上的适应值
% 粒子开始学习
personalbest_x=x;         % 用于存储对于每一个粒子最佳经历点的x值
personalbest_faval=f;     % 同时存储对于每一个粒子的最佳经历点的数值,用于更改
[globalbest_faval,i] = min(personalbest_faval); % min函数返回的第一个是最小值,还有一个就是最小值的下标,这里就是告诉了是在哪个粒子上
globalbest_x = personalbest_x(i,:);   % 这个是必定是全局最优点的位置
k = 1; % 开始迭代计数
while k <= MaxNum   % 当迭代次数达到设定的最大值的时候,就不要再进行迭代了for i = 1:particlesize   % 对于每一个粒子f(i) = fitness(x(i,1)); % 得到每个粒子的当前位置 在函数上的适应值 if f(i) < personalbest_faval(i)   % 如果这个值是小于个人最优解的位置的时候,就更新,我们经过转换,所以只用考虑求最小值的情况personalbest_faval(i) = f(i); % 将第i个粒子的个人最优解设置为personalbest_x(i,:) = x(i,:); % 同时更改最有地址的位置endend [globalbest_faval,i] = min(personalbest_faval); globalbest_x = personalbest_x(i,:); % 更新全局 全局信息由个体信息描述组成for i = 1:particlesizev(i,:) = w*v(i,:) + c1*rand*(personalbest_x(i,:) - x(i,:)) + c2*rand*(globalbest_x -x(i,:)); % 由个人和全局的最佳信息数据进行更新移动速度% 上面中rand会随机生成一个rand(0,1)然后会随机的降低学习因子的比例for j = 1:narvs   % 这个个循环确定了每个自变量上的速度,有没有超过对应的最大值if v(i,j) > vmaxv(i,j) = vmax;elseif v(i,j) < -vmaxv(i,j) = -vmax;endend x(i,:) = x(i,:) + v(i,:); % 通过速度更新位置endif abs(globalbest_faval) < E0,break,end         k = k + 1;
end
Value1 = 1/globalbest_faval - 1; % 还记得上面做了一个加1,求倒数的操作么?
Value1 = num2str(Value1);
disp(strcat('the maximum value',' = ', Value1)); % 主要是在这进行了展示
Value2 = globalbest_x;    % 得到了全局最优解的位置
Value2 = num2str(Value2);
disp(strcat('the maximum x = ', Value2));% 绘图
x = -5:0.01:5;
y = 2.1*(1 - x + 2 * x.^2).*exp(-x.^2/2);
plot(x,y,'m','linewidth',3); % m表示的是粉红色,-是表示的是连续的曲线线
hold on;
plot(globalbest_x, 1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');
xlabel('x'); % 给x轴贴标签
ylabel('y'); % 给y轴贴标签

程序运行结果如上图所示,求得最大值和最大值位置为:the maximum value =5.1985        the maximum x =-1.1617

[Matlab科学计算] 粒子群优化算法原理和简单应用相关推荐

  1. 【优化算法】粒子群优化算法

    粒子群优化算法 粒子群优化算法简介 粒子群优化算法原理 粒子群优化算法的数学描述 粒子群优化算法框架 PySwarms:Python中粒子群优化的研究工具包 PySwarms快速使用 示例:编写自己的 ...

  2. 【MATLAB教程案例11】基于PSO粒子群优化算法的函数极值计算matlab仿真及其他应用

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  3. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  4. 粒子群优化算法(PSO)简介及MATLAB实现

    目录 粒子群优化算法概述 PSO算法步骤 PSO(粒子群优化算法)与GA(遗传算法)对比 PSO的MATLAB实现 粒子群优化算法概述 • 粒子群优化(PSO, particle swarm opti ...

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

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

  6. 2021-01-26 粒子群优化算法(PSO)以及Matlab实现

    粒子群优化算法(PSO)以及Matlab实现 1.粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制.试想一下枚举法,假设问题的解空间很小,比如一 ...

  7. 粒子群优化算法的寻优算法——非线性函数极值寻优Matlab

    粒子群算法的起源 1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,经过多年改进最终形成了粒子群优化算法(Particle ...

  8. 自适应变异粒子群matlab,一种自适应变异粒子群优化算法的制作方法

    本算法属于数据挖掘领域,涉及到SVM分类器和参数寻优,特别涉及到其变异操作,使得能够最大限度的搜索到全局最优解. 背景技术: 网格划分法是SVM分类器中常用的一种参数寻优方法,原因如下:一是网格划分法 ...

  9. 【物理应用】基于粒子群优化算法实现瞬变电磁法视电阻率反演附matlab代码

    1 内容介绍 煤矿井下矿井瞬变电磁法(MTEM)探测中,电磁场呈全空间分布,全空间瞬变电磁反演是复杂的非线性问题,目前反演计算中全空间响应主要由半空间响应乘以全空间响应系数来得到,导致反演结果中顶板和 ...

  10. MATLAB实现多目标粒子群优化算法(MOPSO)

    MATLAB实现多目标粒子群优化算法(MOPSO) 这里如何用MATLAB实现多目标粒子群优化算法. 本教程参考:MATLAB实现多目标粒子群算法 对其中的优化项.优化目标项进行了简单的修改.优化项由 ...

最新文章

  1. C语言对strtok(),与strdup()介绍
  2. 获取前一天的时间安排表_要想有一个完美的婚礼 这份婚庆策划时间表少不了...
  3. linux tcp 包大小,linux – 通过大量连接和小数据包流量高的千兆网络提高TCP性能...
  4. 浅析C#合并多个WORD文档的具体实现方法
  5. c html导出成word,html转word-html如何转换成WORD
  6. 95-910-146-源码-FlinkSQL-Flink SQL中TableFunction使用分析
  7. 1. 搭建scapy
  8. Iranian ChamPions Cup 水题
  9. matlab模拟静电场边值,静电场边值问题有限差分法的仿真分析
  10. 微信小程序账号注册流程
  11. vue引入阿里巴巴图标(含彩色图标)
  12. Netbeans 7.1 add android plugin
  13. 机器学习(19)之支持向量回归机
  14. 必知必会 | 音视频基础知识
  15. php用Ajax传递数组
  16. Html5浪漫结婚请柬婚礼网站模板❤_爱她就给她最美的H5婚礼请柬_(婚庆电子邀请函)含背景音乐...
  17. 【漫漫转码路】Day 39 C++ day10
  18. matlab设计风电机外部控制器,【matlab编程代做】步进电机控制器设计
  19. 【Linux Socket 编程入门】05 - 拉个骡子溜溜:TCP编程模型代码分析
  20. [附源码]计算机毕业设计高校体育场馆管理系统Springboot程序

热门文章

  1. jquery-weui的学习与使用
  2. 爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)...
  3. 云原生日志管理瑞士军刀 Fluent Operator 中文入门教程
  4. Visual Studio各组件说明
  5. AirDisk HDD
  6. perl linux 运行,在Ubuntu中启动时运行perl脚本
  7. 视频传输协议详解(RTMP、RTSP、HLS)
  8. L298Nnbsp;驱动模块的应用
  9. csdn账号不能合并
  10. 悦诗风吟网络营销的目标_睫毛膏营销策划方案