Matlab粒子群算法(PSO)优化程序——经典实例

Matlab粒子群算法(PSO)优化程序——经典实例粒子群算法(ParticleSwarmOptimization,PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。鸟群中有个体和群体,个体和群体的信息是可以互通的。个体在随机搜寻食物的过程中,只要跟踪离食物最近的群体,就能最有效地找到食物。1.一些基本概念:(1)粒子:优化问题的候选解,指鸟群中的一个个个体;(2)位置:候选解所在…

大家好,又见面了,我是你们的朋友全栈君。

粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。鸟群中有个体和群体,个体和群体的信息是可以互通的。个体在随机搜寻食物的过程中,只要跟踪离食物最近的群体,就能最有效地找到食物。

1.一些基本概念
(1)粒子:优化问题的候选解,指鸟群中的一个个个体;
(2)位置:候选解所在的位置,即鸟群个体的位置;
(3)速度:粒子的移动速度;
(4)适应度:评价粒子优劣的值,一般为优化目标函数的数值;
(5)个体极值:单个粒子迄今为止找到的最佳位置,就鸟群觅食而言,是单个个体能够发现距离食物最近的个体;
(6)群体极值:所有粒子迄今为止找到的最佳位置。

2.大概流程及经典公式
根据这些概念,可以大概知道流程:1)初始粒子;2)计算适应度值;3)定义初始个体极值与群体极值;4)更新粒子位置与速度;5)更新个体极值和群体极值。
在实际问题的解决中,构建目标函数是最重要的,也是最难的。而粒子群算法中最经典的部分在于步骤4)(更新粒子位置与速度),其公式如下:
图1
xid——粒子的位置;
vid——粒子的移动速度;
w——惯性权重;
c1,c2——学习因子;
r1,r2——[0.1]中的随机数;

3.Matlab实现实例
(1)构建目标函数。这里使用只有两个参数的函数,这样便于画出三维图型。

function y=A11_01(x)

y=x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)-4*x(2)+60;

首先从直观上看看这个函数:

x1=-15:1:15;
x2=-15:1:15;
[x1,x2]=meshgrid(x1,x2);
y=x1.^2+x2.^2-x1.*x2-10.*x1-4.*x2+60;
mesh(x1,x2,y);

图2
图 1 目标函数的三维网格图

(2)整体实现代码

clear 
clc

%绘制原图        图1目标函数的三维网格图
x1=-15:1:15;
x2=-15:1:15;
[x1,x2]=meshgrid(x1,x2);
y=x1.^2+x2.^2-x1.*x2-10.*x1-4.*x2+60;
mesh(x1,x2,y);    
hold on;

%%预设参数
n=100; %粒子群的规模
d=2; %变量个数
c1=2;
c2=2;
w=0.9;%权重一般设为0.9
K=50; %迭代次数

%%分布粒子的取值范围及速度的取值范围
x=-10+20*rand(n,d);  %x在[-10,10]中取值
v=-5+10*rand(n,d); %v在[-5,5]中取值

%%计算适应度
fit=zeros(n,1);
for j=1:n
    fit(j)=A11_01(x(j,:));
end
pbest=x;
ind=find(min(fit)==fit);
gbest=x(ind,:);
h=scatter3(x(:,1),x(:,2),fit,'o');  %图2 粒子的初始分布图

%%更新速度与位置
for i=1:K
    for m=1:n
       v(m,:)=w*v(m,:) + c1*rand*(pbest(m,:)-x(m,:)) + c2*rand*(gbest-x(m,:));%rand是[0,1]随机数
       
       v(m,find(v(m,:)<-5))=-5;%这里发现速度小于-5时取-5
       v(m,find(v(m,:)>5))=5;%这里发现速度大于5时取5
       
       x(m,:)=x(m,:)+0.5*v(m,:);
       x(m,find(x(m,:)<-10))=-10;%这里发现位置小于-10时取-10
       x(m,find(x(m,:)>10))=10;%这里发现位置大于10时取10
       
       %重新计算适应度
       fit(m)=A11_01(x(m,:));
       if x(m,:)<A11_01(pbest(m,:))
           pbest(m,:)=x(m,:);
       end
       if A11_01(pbest(m,:))<A11_01(gbest)
           gbest=pbest(m,:);
       end
    end
    fitnessbest(i)=A11_01(gbest);
    pause(0.01);    %为了直观,每更新一次,暂停0.01秒
    h.XData=x(:,1);
    h.YData=x(:,2);
    h.ZData=fit;
end
% hold off;
% plot(fitnessbest);
% xlabel('迭代次数');

(3)粒子的初始分布图

图3
图2 粒子的初始分布图
(4)粒子群移动图
图4
图 3 粒子群移动图
(5)迭代过程
图5
图 4 迭代过程图
从图中可以看出,迭代次数基本上在13,14的时候就达到最优,即目标函数取得最小值为8.

4.总结
粒子群算法(PSO)在很多领域都有应用,本文提供的比较简单,函数来源于https://www.51zxw.net/show.aspx?id=71576&cid=641。
粒子群算法(PSO)在应用的过程中主要调整权重,学习因子,才能对解决的问题有所针对性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139985.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android调用系统原生分享组件[通俗易懂]

    Android调用系统原生分享组件[通俗易懂]想必做Android开发都会遇到的需求——分享。当然实现的需求和方式的也都各自不一,有接入某个app的SDK进行分享,也有集成第三方平台的例如友盟等等…接下来所要说到的是Android系统提供的分享组件。分享组件能够自动的检索到可以分享app然后将分享内容带入 当然这个也会有所限制的,会有个别app只能分享单一项:“文字+图片”、“图片”、“文字” 好处就是轻量级、避免导入其它jar包或依赖、可减少apk体积Filefile=newFile(filePath

    2022年6月19日
  • 数字图像处理笔记——阈值(Thresholding)

    数字图像处理笔记——阈值(Thresholding)阈值我们将图像分块最简单的方法就是设定一个阈值对图像进行二值化处理,那么这个阈值我们应该如何选择呢对于图像的直方图存在明显边界的图像,我们可以很容易找到这个阈值,但是如果图像直方图分界不明显,那么这个阈值的寻找将变得十分困难。因此我们存在全局阈值与局部阈值两种全局阈值全局阈值就是在整幅图像中我们只有一个阈值来对图像进行二值化,但是其存在其局限性,例如图像中存在高斯噪声的情况…

    2022年5月8日
  • Linux 学习之创建、删除文件和文件夹命令[通俗易懂]

    Linux 学习之创建、删除文件和文件夹命令[通俗易懂]今天学习了几个命令,是创建、删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令。创建文件夹【mkdir】一、mkdir命令使用权限所有用户都可以在终端使用mkdir命令在拥有权限的文件夹创建文件夹或目录。二、mkdir命令使用格式格式:mkdir[选项]DirName三、mkdir命令功能通过m…

    2022年5月28日
  • Jquery确认对话框弹出

    Jquery确认对话框弹出Jquery确认对话框弹出

    2022年4月23日
  • [文学阅读] METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments

    [文学阅读] METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments

    2022年1月1日
  • NetworkManager详解

    NetworkManager详解直接继承自 MonoBehaviour, 还有就是被设计成了单例 singletonNetworkManager网络管理器是一个方便的HLAPI类,用于管理网络系统。       对于简单的网络应用NetworkManager网络管理器可以使用HLAPI控制。它提供了简单的方法来 启动和停止 客户端和服务器,以及管理场景,而且具有虚拟函数,用户代码可以使

    2022年10月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号