matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)
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)相关推荐
- 二维核密度估计matlab,kdetoolbox(matlab) 核密度估计(kde)的工具箱 - 下载 - 搜珍网
kde工具箱(matlab)/@kde/adjustBW.dll kde工具箱(matlab)/@kde/adjustBW.m kde工具箱(matlab)/@kde/adjustBW.mexglx ...
- 反向传播算法的理论基础,神经网络反向传播算法
1.如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法.其 ...
- 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...
前言 支持向量机 (Support Vector Machines,SVM) 有两个重要参数:一个是正则化系数(c),一个是核参数(g,高斯核函数).针对这两个参数的优化,在libsvm工具箱的基础上 ...
- 【优化调度】基于粒子群算法求解水火电调度优化问题含Matlab源码
1 简介 粒子群算法因其原理简单,易于编程,适于并行计算等优点而得到了广泛的应用.本文探讨和分析了Matlab粒子群算法工具箱,并提出了基于该工具箱来实现水电站优化调度计算的方法.计算实例表明,Mat ...
- 【控制】粒子群优化(PSO,Particle Swarm Optimization)算法及 Matlab 仿真实现
文章目录 定义 对比模拟捕食 通俗解释 粒子抽象 关于速度和位置 速度和位置的更新 标准PSO算法流程 标准PSO算法的流程 PSO流程图解 学习因子 c1.c2c_1.c_2c1.c2 分析 仿 ...
- 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码
1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...
- 【PID优化】基于matlab粒子群算法优化BP神经网络PID控制【含Matlab源码 2022期】
⛄一.粒子群算法优化BP神经网络PID控制简介 BP神经网络PID控制算法 传统PID控制器作为一种线性控制器,具备结构,容易实现的优点,其基本原理是将系统的实际输出值和期望输出值之间的偏差按照比例. ...
- PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序
PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 [含风电.光伏.微型燃机.储能蓄电池.燃料电池] 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源 ...
- 【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码
1 简介 粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究.设想这样一个场 ...
最新文章
- 谈谈document.ready和window.onload的区别
- DB扩展名的数据库文件怎么打开:两种db数据库的打开方式
- Little Sub and Traveling
- 内存取证——volatility命令
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1083:计算星期几
- java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践
- DevPartner Studio Professional Edition 11 内存泄露检测使用
- 20172301 2018-2019-1《程序设计与数据结构》课程总结
- python执行命令不阻塞_通过python 执行 nohup 不生效的解决
- C++之struct
- 巴塞罗那2019-20赛季球队大名单
- MySql 如何查询某一天内的数据
- 统计知识基础(三)常用构造估计量的两种方法——矩估计、最大似然估计
- SpringBoot 轻松搞定数据验证 (三)
- webpack出现CssSyntaxError
- 目前最全的机器学习知识结构图(11月1日更新)
- 校园电动车管理与充电指引—微信小程序
- uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及
- xx-job任务管理平台
- maven项目调转servlet 500异常