MATLAB粒子群优化算法(PSO)

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

一、介绍

  • 粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优。群体迭代,粒子在解空间追随最优的粒子进行搜索。
  • 粒子群算法的思想源于对鸟群捕食行为的研究,模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作使群体达到最优目的,是一种基于Swarm Intelligence的优化方法。
  • 马良教授在他的著作《蚁群优化算法》一书的前言中写到:“自然界的蚁群、鸟群、鱼群、羊群、牛群、蜂群等,其实时时刻刻都在给予我们以某种启示,只不过我们常常忽略了大自然对我们的最大恩赐!”
  • 设想这样一个场景:一群鸟在随机搜索食物,已知
  • (1)在这块区域里只有一块食物;  (2)所有的鸟都不知道食物在哪里;  (3)但它们能感受到当前的位置离食物还有多远.
  • 那么:找到食物的最优策略是什么呢?
  • 搜寻目前离食物最近的鸟的周围区域,根据自己飞行的经验判断食物的所在。

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

二、算法思路

  1. 每个寻优的问题解都被想像成一只鸟,称为“粒子”。所有粒子都在一个D维空间进行搜索。
  2. 所有的粒子都由一个fitness function 确定适应值以判断目前的位置好坏。
  3. 每一个粒子必须赋予记忆功能,能记住所搜寻到的最佳位置。
  4. 每一个粒子还有一个速度以决定飞行的距离和方向。这个速度根据它本身的飞行经验以及同伴的飞行经验进行动态调整。

三、算法流程与伪代码

  • 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)的更多相关文章

  1. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...

  2. 粒子群优化算法PSO及matlab实现

    算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...

  3. 数值计算:粒子群优化算法(PSO)

    PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...

  4. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...

  5. 粒子群优化算法(PSO)的基本概念

    介绍了PSO基本概念,以及和遗传算法的区别: 粒子群算法(PSO)Matlab实现(两种解法)

  6. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(四)

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

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

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

  8. [matlab] 6.粒子群优化算法

    粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早由Kennedy和Eberhart在19 ...

  9. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

随机推荐

  1. I2C协议学习笔记

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wzt_007/article/detai ...

  2. oracle--共享磁盘挂载

    01,查看挂载的磁盘 [root@SHLPDBWX01 ~]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units ...

  3. C#开发BIMFACE系列15 服务端API之获取模型的View token

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...

  4. .NET Core 内置的 System.Text.Json 使用注意

    System.Text.Json 是 .NET Core 3.0 新引入的高性能 json 解析.序列化.反序列化类库,武功高强,但毕竟初入江湖,炉火还没纯青,使用时需要注意,以下是我们在实现使用中遇 ...

  5. 大话设计模式Python实现-解释器模式

    解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/ ...

  6. linux 常用配置

    linux mysql yum 配置 https://blog.csdn.net/wngpenghao/article/details/78862923 linux jdk1. yum install ...

  7. 关于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)注解成功 ...

  8. Do Deep Nets Really Need to be Deep?

    url: https://arxiv.org/pdf/1312.6184.pdf year: NIPS2014 浅网络学习深网络的函数表示, 训练方法就是使用深网络的 logits(softmax i ...

  9. go语言中map每次遍历的顺序不同-问题分析

    WHAT? 发现下面这段代码,多次运行出的结果是不一样的 mapper := make(map[int]string) mapper[1] = "1" mapper[2] = &q ...

  10. linux生成多对秘钥并指定秘钥登录

    1.生成秘钥对并指定秘钥对名称: ssh-keygen -t rsa -f other -C "for other" 2.将other.pub公钥添加至要免密登录的服务器 3.使用 ...