github:https://github.com/Myoontyee/PSO

背景

粒子群优化(Particle Swarm Optimization, PSO),又称微粒群算法,是由J. Kennedy和R. C. Eberhart等于1995年开发的一种演化计算技术,来源于对一个简化社会模型的模拟。其中“群(swarm)”来源于微粒群匹配M. M. Millonas在开发应用于人工生命(artificial life)的模型时所提出的群体智能的5个基本原则。“粒子(particle)”是一个折衷的选择,因为既需要将群体中的成员描述为没有质量、没有体积的,同时也需要描述它的速度和加速状态。

PSO算法最初是为了图形化的模拟鸟群优美而不可预测的运动。而通过对动物社会行为的观察,发现在群体中对信息的社会共享提供一个演化的优势,并以此作为开发算法的基础。通过加入近邻的速度匹配、并考虑了多维搜索和根据距离的加速,形成了PSO的最初版本。之后引入了惯性权重来更好的控制开发(exploitation)和探索(exploration),形成了标准版本。为了提高粒群算法的性能和实用性,中山大学、(英国)格拉斯哥大学等又开发了自适应(Adaptive PSO)版本和离散(discrete)版本。

流程

标准PSO的算法流程如下:
  i)初始化一群微粒(群体规模为m),包括随机的位置和速度;
  ii)评价每个微粒的适应度;
  iii)对每个微粒,将它的适应值和它经历过的最好位置pbest的作比较,如果较好,则将其作为当前的最好位置pbest;
  iv)对每个微粒,将它的适应值和全局所经历最好位置gbest的作比较,如果较好,则重新设置gbest的索引号;
  v)变化微粒的速度和位置;
  vi)如未达到结束条件(通常为足够好的适应值或达到一个预设最大代数Gmax),回到ii)。

特点

  i)相较于传统算法计算速度非常快,全局搜索能力也很强;
  ii)PSO对于种群大小不十分敏感;
  iii)适用于连续函数极值问题,对于非线性、多峰问题均有较强的全局搜索能力。
  即

  • 输入
    连续函数极值、非线性、多峰值问题
  • f(x)
    PSO、MOPSO、etc…
  • 输出
    全局较优解、全局最优解

变量

针对建议修改与建议默认参数均给予解释与建议值。

  1)待解目标函数

  程序:

f= @(x)x.*sin(x)+x.*sin(2.*x);          % 待解目标函数

  解释:

  • 输入
    需要求解的目标函数(该程序仅针对单目标优化)
  • 输出
    定义优化的目标函数
  • Tip
    该处使用函数 x×sin(x)+x×sin(2x)x\times sin(x)+x\times sin(2x)x×sin(x)+x×sin(2x)作为目标函数检验算法,在具体的问题中修改该函数为目标函数即可,注意该处为矩阵计算,使用.* .^等进行计算

  2)待解函数上下限

  程序:

xLower = 0;                             % 待解函数下限
xTop = 30;                              % 待解函数上限

  解释:

  • 输入
    目标函数上下限,2个函数定义域内的值
  • 输出
    定义优化时自变量的上下限

  3)插值

  程序:

Interpolation = 0.01;                   % 插值

  解释:

  • 输入
    小于函数上下限的数值
  • 输出
    定义目标函数求解时的插值密度
  • Tip
    理论上任意小于函数上下限的数值均可,一般取值≤0.01,越小的数值将使得目标函数连续性更好,求解时间更长

  4)最大迭代次数

  程序:

maxIterations = 100;                    % 最大迭代次数

  解释:

  • 输入
    最大迭代次数数值
  • 输出
    定义最大迭代次数
  • Tip
    取值范围一般为100~5000,依照实际情况,权衡计算时间与求解结果而定

  5)学习因子

  程序:

selfFactor = 3;                         % 自我学习因子
crowdFactor = 3;                        % 群体学习因子

  解释:

  • 输入
    个体(自我)与群体的学习因子
  • 输出
    个体、群体学习因子定义
  • Tip
    取值范围一般为0~4,依照实际情况,权衡自变量取值范围而定

  6)速度上下限

  程序:

vLower = -1;                            % 速度下限
vTop = 1;                               % 速度上限

  解释:

  • 输入
    速度上下限数值
  • 输出
    定义学习速度的上下限数值
  • Tip
    i)过大速度将导致最优解被越过
    ii)过小速度将导致求解速度过慢

  7)初始种群个数
  程序:

InitialNum = 50;                        % 初始种群个数

  解释:

  • 输入
    输入初始种群个数数值
  • 输出
    定义初始化种群个数
  • Tip
    取值范围一般为500~1000,PSO算法对种群大小不敏感,该处设定为50

  8)惯性权重
  程序:

weightFactor = 0.8;                     % 惯性权重

  解释:

  • 输入
    惯性权重数值
  • 输出
    定义惯性权重
  • Tip
    取值范围一般为0.5~1,该参数反映个体历史成绩对现有成绩的影响

  9)空间维数
  程序:

d = 1;                                  % 空间维数

  解释:

  • 输入
    1
  • 输出
    设定空间维数为1
  • Tip
    该参数指代自变量个数,1意味着这是个单目标优化问题

代码

全部实现代码如下:

clc;clear;close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Author: Myoontyee.Chen
%% Data:20181221
%% License:BSD 3.0
%% PSO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Initialization初始化种群%% 可修改参数f= @(x)x.*sin(x)+x.*sin(2.*x);          % 待解目标函数
xLower = 0;                             % 待解函数下限
xTop = 30;                              % 待解函数上限
Interpolation = 0.01;                   % 插值
maxIterations = 100;                    % 最大迭代次数
selfFactor = 3;                         % 自我学习因子
crowdFactor = 3;                        % 群体学习因子
vLower = -1;                            % 速度下限
vTop = 1;                               % 速度上限
InitialNum = 50;                        % 初始种群个数
weightFactor = 0.8;                     % 惯性权重%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 建议默认参数
d = 1;                                  % 空间维数
xLimit = [xLower, xTop];                % 位置参数限制
vLimit = [vLower, vTop];                % 设置速度限制
figure(1);
% 线型颜色
Figure1 = ezplot(f,[xLower, Interpolation, xTop]);
set(Figure1,'Color','k');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 位置初始化及其图像for i = 1:dx = xLimit(i, 1) + (xLimit(i, 2) - xLimit(i, 1)) * rand(InitialNum, d);
end                                     %初始种群的位置vInitial = rand(InitialNum, d);         % 初始种群的速度
xm = x;                                 % 每个个体的历史最佳位置
ym = zeros(1, d);                       % 种群的历史最佳位置
fxm = zeros(InitialNum, 1);             % 每个个体的历史最佳适应度
fym = -inf;                             % 种群历史最佳适应度
hold on
plot(xm, f(xm), 'ro');title('参数初始化结果');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 群体更新
figure(2);
iter = 1;
record = zeros(maxIterations, 1);       % 记录器
while iter <= maxIterationsfx = f(x) ;                        % 个体当前适应度   for i = 1:InitialNum      if fxm(i) < fx(i)fxm(i) = fx(i);             % 更新个体历史最佳适应度xm(i,:) = x(i,:);           % 更新个体历史最佳位置end end
if fym < max(fxm)[fym, nmax] = max(fxm);         % 更新群体历史最佳适应度ym = xm(nmax, :);               % 更新群体历史最佳位置
end                                     % 速度更新vInitial = vInitial * weightFactor + selfFactor * rand * (xm - x) + crowdFactor * rand * (repmat(ym, InitialNum, 1) - x);% 边界速度处理vInitial(vInitial > vLimit(2)) = vLimit(2);vInitial(vInitial < vLimit(1)) = vLimit(1);x = x + vInitial;                   % 位置更新% 边界位置处理x(x > xLimit(2)) = xLimit(2);x(x < xLimit(1)) = xLimit(1);record(iter) = fym;                 %最大值记录%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 迭代过程及其图像% 若想直接观看结果,可注释掉该部分x0 = xLower : Interpolation : xTop;plot(x0, f(x0), 'k-', x, f(x), 'ro');title('状态位置变化');pause(0.1)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%iter = iter+1;
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 收敛过程记录图像
figure(3);
plot(record,'k-');
title('收敛过程记录');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 最终状态位置图像
x0 = xLower : Interpolation : xTop;
figure(4);
plot(x0, f(x0), 'k-', x, f(x), 'ro');title('最终状态位置');
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);

结果

运行程序
输入

PSO.m

输出

最大值:45.8982
变量取值:26.0839




参考

[1]杨维, 李歧强. 粒子群优化算法综述[J]. 中国工程科学, 2004, 6(5):87-94.
[2]粒子群优化
[3]粒子群算法的matlab实现(一)

粒子群优化算法(PSO)及其Matlab实现相关推荐

  1. 改进粒子群优化算法(IWAPSO)的MATLAB源程序

    改进粒子群优化算法(IWAPSO)的MATLAB源程序 作者:aaron8967    主页:http://aaron8967.blog.51cto.com 说明:粒子群优化算法(Particle S ...

  2. 改进粒子群优化算法(PURPSO)的MATLAB源程序

    改进粒子群优化算法(PURPSO)的MATLAB源程序 作者:aaron8967    主页:http://aaron8967.blog.51cto.com 说明:粒子群优化算法(Particle S ...

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

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

  4. 【优化算法】细菌粒子群优化算法【含Matlab源码 1195期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]细菌粒子群优化算法[含Matlab源码 1195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏Mat ...

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

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

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

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

  7. 粒子群优化算法 PSO

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

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

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

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

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

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

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

最新文章

  1. arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境
  2. GAN不只会造假:捕获数据中额外显著特征,提高表征学习可解释性,效果超越InfoGAN | IJCAI 2020...
  3. 为什么说ReasonReact是编写React的最佳方式?
  4. ELK学习4_Elasticsearch+Logstash+Kibana安装_简易版
  5. .NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤
  6. 远程Linux主机安装zsh插件zsh-syntax-highlighting
  7. 每日一则----算法----二分查找法
  8. 树言树语:AIR的 应用方向在哪里?
  9. 【git系列】切换分支相关命令
  10. linux 虚拟机设置静态ip
  11. JavaScript:网络请求工具库AjaxTool.js
  12. mega linux教程,MegaRAID工具使用详解
  13. 入门pandas—数据填充
  14. 关于炼丹,你是否知道这些细节?
  15. 操作——【1.8 关于音高、时值、位置 】(二)
  16. qlv文件怎么打开 怎么把qlv文件转换成MP4的文件呢
  17. 区块链10年兴衰录:中国是最好的发展土壤
  18. 区块链概念股2019:躁动与尴尬 |链捕手
  19. Win10屏幕不自动关闭怎么设置
  20. Vue基础语法必知必会

热门文章

  1. Matpower安装流程
  2. EOS与金格iWebOffice集成应用实例
  3. 工具篇--时间转化,设置,格式
  4. turbo码书籍推荐
  5. Part I. S1. 模糊集及其运算
  6. python基础学习之python操作PDF文件、发送邮件添加附件10
  7. 软件工程实验报告一模板
  8. App Store 审核指南 审核失败对照
  9. 小米cc9出厂线刷包_小米cc9 pro刷机教程,线刷升级更新官方系统包
  10. 想问一下系统数据库工程师自学能过吗?