MATLAB粒子群优化算法(PSO)

一、介绍

粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优。群体迭代,粒子在解空间追随最优的粒子进行搜索。

粒子群算法的思想源于对鸟群捕食行为的研究,模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作使群体达到最优目的,是一种基于Swarm Intelligence的优化方法。

马良教授在他的著作《蚁群优化算法》一书的前言中写到:“自然界的蚁群、鸟群、鱼群、羊群、牛群、蜂群等,其实时时刻刻都在给予我们以某种启示,只不过我们常常忽略了大自然对我们的最大恩赐!”

设想这样一个场景:一群鸟在随机搜索食物,已知

(1)在这块区域里只有一块食物;(2)所有的鸟都不知道食物在哪里;(3)但它们能感受到当前的位置离食物还有多远.

那么:找到食物的最优策略是什么呢?

搜寻目前离食物最近的鸟的周围区域,根据自己飞行的经验判断食物的所在。

PSO的基础: 信息的社会共享

二、算法思路

每个寻优的问题解都被想像成一只鸟,称为“粒子”。所有粒子都在一个D维空间进行搜索。

所有的粒子都由一个fitness function 确定适应值以判断目前的位置好坏。

每一个粒子必须赋予记忆功能,能记住所搜寻到的最佳位置。

每一个粒子还有一个速度以决定飞行的距离和方向。这个速度根据它本身的飞行经验以及同伴的飞行经验进行动态调整。

三、算法流程与伪代码

c1: weight of local information

c2: weight of global information

p: particle's position

v: path direction

rand: random variable, 0

number of particles: 10~50

c1+c2=4

v=v+c1*rand*(pbest-p)+c2*rand*(gbest-p);中右边第一项v: inertia, c1*rand*(pbest-p): personal influence, c2*rand*(gbest-p): social influence.

四、MATLAB程序

粒子群优化算法求解函数y=x+x*sin(x)在[-10, 10]的最大值.

pso.m

function [best_x, best_y]=pso()

%find the max value of a function

%Author: kailugaji https://www.cnblogs.com/kailugaji/

posMax=10;posMin=-10; %range of feasible solution

x=posMin:0.1:posMax;

y=my_fun(x); %object function

plot(x,y);hold on; %plot function

popsize=30; %number of particles

max_iter=100; %maximum number of iterations

position=rand(popsize,1);

position=position*20-ones(popsize,1)*10; %particle's position

vMax=1;vMin=-1; %range of velocity

velosity=2*rand(popsize,1)-1; %path direction

pbest=position; %current optimum

gbest=position(1); %global optimum

wBegin=1;wEnd=0.05;

c1=2; %weight of local information

c2=2; %weight of global information

for i=1:max_iter

position_new=position+velosity; %change direction of each particle

velosity_new=(wEnd+(wBegin-wEnd)*(100-i)/100).*velosity+c1*rand().*(position-pbest.*ones(popsize,1))+c2*rand().*(position-gbest.*ones(popsize,1)); %inertia+personal influence+social influence

for j=1:popsize

if(position_new(j)>posMax)

position_new(j)=posMax;

end

if(position_new(j)

position_new(j)=posMin;

end

if(velosity_new(j)>vMax)

velosity_new(j)=vMax;

end

if(velosity_new(j)

velosity_new(j)=vMin;

end

if(my_fun(position_new(j))>my_fun(pbest(j)))

pbest(j)=position_new(j);

end

if(my_fun(position_new(j))>my_fun(gbest))

gbest=position_new(j);

end

end

position=position_new;

velosity=velosity_new;

end

plot(gbest,my_fun(gbest),'or');

best_x=gbest;

best_y=my_fun(gbest);

my_fun.m

function y=my_fun(x)

y=x+x.*sin(x);

五、实验结果

>> [best_x, best_y]=pso()

best_x =

8.0051

best_y =

15.9190

当x=8.0051时,粒子群优化算法终止迭代,此时获得的最大值为y=15.9190。

六、参考文献

matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)相关推荐

  1. 二维核密度估计matlab,kdetoolbox(matlab) 核密度估计(kde)的工具箱 - 下载 - 搜珍网

    kde工具箱(matlab)/@kde/adjustBW.dll kde工具箱(matlab)/@kde/adjustBW.m kde工具箱(matlab)/@kde/adjustBW.mexglx ...

  2. 反向传播算法的理论基础,神经网络反向传播算法

    1.如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法.其 ...

  3. 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...

    前言 支持向量机 (Support Vector Machines,SVM) 有两个重要参数:一个是正则化系数(c),一个是核参数(g,高斯核函数).针对这两个参数的优化,在libsvm工具箱的基础上 ...

  4. 【优化调度】基于粒子群算法求解水火电调度优化问题含Matlab源码

    1 简介 粒子群算法因其原理简单,易于编程,适于并行计算等优点而得到了广泛的应用.本文探讨和分析了Matlab粒子群算法工具箱,并提出了基于该工具箱来实现水电站优化调度计算的方法.计算实例表明,Mat ...

  5. 【控制】粒子群优化(PSO,Particle Swarm Optimization)算法及 Matlab 仿真实现

    文章目录 定义 对比模拟捕食 通俗解释 粒子抽象 关于速度和位置 速度和位置的更新 标准PSO算法流程 标准PSO算法的流程 PSO流程图解 学习因子 c1.c2c_1.c_2c1​.c2​ 分析 仿 ...

  6. 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码

    1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...

  7. 【PID优化】基于matlab粒子群算法优化BP神经网络PID控制【含Matlab源码 2022期】

    ⛄一.粒子群算法优化BP神经网络PID控制简介 BP神经网络PID控制算法 传统PID控制器作为一种线性控制器,具备结构,容易实现的优点,其基本原理是将系统的实际输出值和期望输出值之间的偏差按照比例. ...

  8. PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序

    PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 [含风电.光伏.微型燃机.储能蓄电池.燃料电池] 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源 ...

  9. 【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码

    1 简介 粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究.设想这样一个场 ...

最新文章

  1. 谈谈document.ready和window.onload的区别
  2. DB扩展名的数据库文件怎么打开:两种db数据库的打开方式
  3. Little Sub and Traveling
  4. 内存取证——volatility命令
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1083:计算星期几
  6. java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践
  7. DevPartner Studio Professional Edition 11 内存泄露检测使用
  8. 20172301 2018-2019-1《程序设计与数据结构》课程总结
  9. python执行命令不阻塞_通过python 执行 nohup 不生效的解决
  10. C++之struct
  11. 巴塞罗那2019-20赛季球队大名单
  12. MySql 如何查询某一天内的数据
  13. 统计知识基础(三)常用构造估计量的两种方法——矩估计、最大似然估计
  14. SpringBoot 轻松搞定数据验证 (三)
  15. webpack出现CssSyntaxError
  16. 目前最全的机器学习知识结构图(11月1日更新)
  17. 校园电动车管理与充电指引—微信小程序
  18. uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及
  19. xx-job任务管理平台
  20. maven项目调转servlet 500异常

热门文章

  1. 【MyBatis】防止sql注入
  2. Spring Boot 全局懒加载
  3. playwright--录制功能
  4. 学习SCI论文绘制技巧(F)
  5. 第三章栈和队列-作业题
  6. 01. 数据库中事务的隔离等级及如何设置
  7. 微信公众平台所带来的互动式营销
  8. 库客音乐冲刺美股:业绩下滑明显,曾两度赴港,余赫持股约30%
  9. SB文档总结 即将展开的大我与小我的斗争
  10. 在html上绑定touch,实现html元素跟随touchmove事件的event.touches[0].clientX移动