MATLAB粒子群优化算法(PSO)
MATLAB粒子群优化算法(PSO)
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
一、介绍
- 粒子群优化算法(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<rand<1
- 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)<posMin)
position_new(j)=posMin;
end
if(velosity_new(j)>vMax)
velosity_new(j)=vMax;
end
if(velosity_new(j)<vMin)
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粒子群优化算法(PSO)的更多相关文章
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...
- 粒子群优化算法PSO及matlab实现
算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...
- 数值计算:粒子群优化算法(PSO)
PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...
- 粒子群优化算法(PSO)的基本概念
介绍了PSO基本概念,以及和遗传算法的区别: 粒子群算法(PSO)Matlab实现(两种解法)
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(四)
作者:Geppetto 前面我们介绍了特征选择(Feature Selection,FS)与离散化数据的重要性,介绍了PSO在FS中的重要性和一些常用的方法.FS与离散化的背景,介绍了EPSO与PPS ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)
作者:Geppetto 前面我们介绍了特征选择(Feature Selection,FS)与离散化数据的重要性,总览的介绍了PSO在FS中的重要性和一些常用的方法,介绍了FS与离散化的背景,介绍本文所 ...
- [matlab] 6.粒子群优化算法
粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早由Kennedy和Eberhart在19 ...
- 计算智能(CI)之粒子群优化算法(PSO)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...
随机推荐
- I2C协议学习笔记
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wzt_007/article/detai ...
- oracle--共享磁盘挂载
01,查看挂载的磁盘 [root@SHLPDBWX01 ~]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units ...
- C#开发BIMFACE系列15 服务端API之获取模型的View token
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...
- .NET Core 内置的 System.Text.Json 使用注意
System.Text.Json 是 .NET Core 3.0 新引入的高性能 json 解析.序列化.反序列化类库,武功高强,但毕竟初入江湖,炉火还没纯青,使用时需要注意,以下是我们在实现使用中遇 ...
- 大话设计模式Python实现-解释器模式
解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/ ...
- linux 常用配置
linux mysql yum 配置 https://blog.csdn.net/wngpenghao/article/details/78862923 linux jdk1. yum install ...
- 关于powermock报错org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.问题解决
事件背景 使用PowerMock模拟一个局部变量,添加@RunWith(PowerMockRunner.class).@PrepareForTest(StudentService.class)注解成功 ...
- Do Deep Nets Really Need to be Deep?
url: https://arxiv.org/pdf/1312.6184.pdf year: NIPS2014 浅网络学习深网络的函数表示, 训练方法就是使用深网络的 logits(softmax i ...
- go语言中map每次遍历的顺序不同-问题分析
WHAT? 发现下面这段代码,多次运行出的结果是不一样的 mapper := make(map[int]string) mapper[1] = "1" mapper[2] = &q ...
- linux生成多对秘钥并指定秘钥登录
1.生成秘钥对并指定秘钥对名称: ssh-keygen -t rsa -f other -C "for other" 2.将other.pub公钥添加至要免密登录的服务器 3.使用 ...