github: 智能算法的课件和参考资料以及实验代码

粒子群算法的原理:

粒子群算法是一种群体智能算法,通过追随当前搜索到的最优值来寻找全局最优。该算法实现容易、精度高、收敛快,在解决实际问题中具有很大的优越性。主要步骤可描述如下:

1、初始化粒子群位置和速度。

2、计算每个粒子的适应度,确定全局最优粒子gbest和个体最优粒子pbest。

3、判断算法收敛准则是否满足,若满足,则输出搜索结果;否则执行以下步骤。

4、根据gbest和pbest更新速度分量。

5、根据更新的速度分量更新粒子位置。

6、更新全局最优粒子和个体最优粒子。

7、返回步骤③。

下面我们举了两个函数最小值优化问题,实际上是参数拟合,但是转化成了最小化问题(具体下载第三次实验课件)

f.m

function y = f( x )% 矩阵按照元素的平方是X.^2 A*B 是矩阵的乘法,而A.*B是两个矩阵对应元素相乘,其他情况下效果一样
% X=[1,3,4,5,6,7,8,9,10];
% Y=[10,5,4,2,1,1,2,3,4];
% Y1=x(1)*X.^2+x(2)*X+x(3);t=1:15;
Y=[352 211 197 160 142 106 104 60  56  38  36  32  21  19  15];
Y1=x(1)*exp(x(2).*t);y=norm(Y-Y1); % 向量的欧几里得距离end

gbestpso.m

clear
clc
%*********初始化
M=20;  %种群规模
x1=rand(M,1); % 初始化粒子位置
x2=rand(M,1);
%x3=rand(M,1);
%X=[x1,x2,x3]
X=[x1,x2];
c1=2; % c1和c2是学习因子
c2=2;
wmax=0.9; % 最大最小惯性权重
wmin=0.4; % 线性减小惯性权重
Tmax=50; % 迭代次数
%v=zeros(M,3);
v=zeros(M,2); % 初始化速度
% v1m=0.1;  % 速度1约束
% v2m=1;% 速度2约束
%******* 全局最优粒子位置初始化
fmin=1000;
for i=1:Mfx = f(X(i,:));if fx<fminfmin=fx;gb=X(i,:);end
end
%********粒子个体历史最优位置初始化
pb=X;
%********算法迭代
for t=1:Tmaxt % w是每代对应的惯性权重,正在逐渐减小w=wmax-(wmax-wmin)*t/Tmax;  % 线性下降惯性权重for i=1:M%******更新每个粒子的当前速度v(i,:)=w*v(i,:)+c1*rand(1)*(pb(i,:)-X(i,:))+c2*rand(1)*(gb-X(i,:));%******速度约束
%        if v(i,1)>v1m; v(i,1)=v1m;end
%        if v(i,2)>v2m; v(i,2)=v2m; end
%        if v(i,1)<-v1m;v(i,1)=-v1m;end
%        if v(i,2)<-v2m;v(i,2)=-v1m;end%*******更新每个粒子的当前位置X(i,:)=X(i,:)+v(i,:);end% 更新所有粒子的速度和位置之后更新pbest和gbestfor i=1:Mif f(X(i,:))<f(pb(i,:))pb(i,:)=X(i,:);endif f(X(i,:))<f(gb)gb=X(i,:);endend% 保存最佳适应度re(t)=f(gb);
end
figure(1)
plot(re)
xlabel('迭代次数')
ylabel('适应度函数')
gb
re(end)
figure(2)
% X=[1,3,4,5,6,7,8,9,10];
% Y=[10,5,4,2,1,1,2,3,4];
% Y1=gb(1)*X.^2+gb(2)*X+gb(3);
X=1:15;
Y=[352  211 197 160 142 106 104 60  56  38  36  32  21  19  15];
Y1=gb(1)*exp(gb(2).*X);t=16;
y16=gb(1)*exp(gb(2).*t)
plot(X,Y,'o',X,Y1,':');
hold on
plot(t,y16,'ro')% gb = [400.2029 -0.2241] 最好适应度61.2758

lbestpso.m

clear
clc
%*********初始化
M=20;  % 种群规模
x1=rand(M,1); % 初始化例子位置
x2=rand(M,1);
%x3=rand(M,1);
%X=[x1,x2,x3]
X=[x1,x2];
c1=2;  % 学习因子
c2=2;
wmax=0.9; % 最大最小惯性权重
wmin=0.4;
Tmax=50; % 迭代次数
v=zeros(M,2); % 初始化速度
%*******全局最优粒子位置初始化
fmin=1000;
gb=X;
k=2; % 邻域规模
for i=1:Mfor in=i-k:i+kif in<1;in=in+M;%越界处理elseif in>Min=in-M;%越界处理elsein=in;endif f(X(in,:))<f(gb(i,:))gb(i,:)=X(in,:);%个体的邻域最优endend
end
%********粒子个体历史最优位置初始化
pb=X;
%********算法迭代
for t=1:Tmaxtw=wmax-(wmax-wmin)*t/Tmax;  %线性下降惯性权重for i=1:M%******更新粒子速度 终于是局部最优v(i,:)=w*v(i,:)+c1*rand(1)*(pb(i,:)-X(i,:))+c2*rand(1)*(gb(i,:)-X(i,:));%*******更新粒子位置X(i,:)=X(i,:)+v(i,:);end%更新pbest和gbestfor i=1:Mif f(X(i,:))<f(pb(i,:))pb(i,:)=X(i,:);endfor in=i-k:i+kif in<1;in=in+M;elseif in>Min=in-M;elsein=in;endif f(X(in,:))<f(gb(i,:))gb(i,:)=X(in,:);%更新邻域最优endendend%保存最佳适应度ffmin=1000;for i=1:Mif f(gb(i,:))<ffmin;ffmin=f(gb(i,:))re(t)=ffmin;ggb=gb(i,:);endend
end
figure(1)
plot(re)
xlabel('迭代次数')
ylabel('适应度函数')
ggb
figure(2)
%X=[1,3,4,5,6,7,8,9,10];
%Y=[10,5,4,2,1,1,2,3,4];
%Y1=gb(1)*X.^2+gb(2)*X+gb(3);
X=1:15;
Y=[352 211  197 160 142 106 104 60  56  38  36  32  21  19  15];
Y1=ggb(1)*exp(ggb(2).*X);
t=16;
y16=ggb(1)*exp(ggb(2).*t)
plot(X,Y,'o',X,Y1,':');
hold on
plot(t,y16,'ro')
hold off% 最好适应度61.2860 指数函数参数a,b分别是400.0875 -0.2234
% 二次函数参数拟合问题 a = -0.0963 b = 0.7585 c = 3.2129 最小适应度函数为8.5722

下面是在matlab上运行的截图:

lbest二元函数参数拟合图:

lbest指数函数参数拟合:

gbest指数函数参数问题:

粒子群算法(PSO,gbest与lbest)相关推荐

  1. C语言实现粒子群算法(PSO)一

    C语言实现粒子群算法(PSO)一 最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等. ...

  2. 粒子群算法(PSO)初识

    粒子群算法PSO是模拟群体智能所建立起来的一种优化算法,用于解决各种优化问题. 抽象问题实例化: 假设一群 鸟在觅食,只有一个地方有 食物,所有鸟儿都看不见食物(不知道食物的具体位置,知道了就不无需觅 ...

  3. 粒子群算法(PSO)Matlab实现(两种解法)

    粒子群算法(PSO) 用途:可以用于寻求最优解问题 生物机理:鸟群寻找湖泊 在函数中,有很多是无法求出最优解的 在这时,我们会采用软计算方法,而PSO算法,在软计算算法中有重要的地位: 好吧,这个仁者 ...

  4. 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解

    1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...

  5. 【老生谈算法】标准粒子群算法(PSO)及其Matlab程序和常见改进算法——粒子群算法

    1.算法详解: 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]标准粒子群算法(PSO)及其Matlab程序和常见改进算法.docx 2 ...

  6. 粒子群算法(PSO)以及Matlab实现

    粒子群算法(PSO)以及Matlab实现 算法背景 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy ...

  7. 粒子群算法(PSO)的C++实现

    粒子群算法(PSO)的C++实现 粒子群算法(PSO----Particle Swarm Optimization)是常用的智能算法之一,它模拟了 鸟群觅食 行为,是一种具有随机性的 仿生算法 .PS ...

  8. 粒子群算法 PSO(Particle Swarm Optimization)——原理及实现

    文章目录 1. 粒子群算法的概念 2. 粒子群算法分析 3. PSO算法的流程和伪代码 4. PSO算法举例 5. PSO算法的matlab实现 1. 粒子群算法的概念 粒子群优化算法(PSO:Par ...

  9. 粒子群算法PSO求解最大值和最小值案例(超详细注释)

    目录 前言 1.粒子群算法简介和难点理解 1.1概念理解 ①非劣解集和支配 ②个体极值和群体极值 ③个体适应度值和群体适应度值 1.2 算法流程和理解 1.3 速度和位置更新公式 1.4 rand.r ...

最新文章

  1. python编码(六)
  2. [原]java开发中遇到的问题及解决方法(持续更新)
  3. openwrt监控linux,OpenWRT上判断客户端在线个数
  4. php连接redis报错,PHP使用phpredis链接redis错误
  5. netty系列之:Event、Handler和Pipeline
  6. java ==和=_Java ==和equals()的区别
  7. oracle 取mac地址,java执行命令,得到Mac地址
  8. 第1章 游戏之乐——光影切割问题
  9. 21.MySQL 性能优化
  10. (原創) C++的4個Class Access Label (C/C++)
  11. 网络序、主机序、点分十进制的IP地址转换
  12. 资阳停车场系统推荐_专业停车场系统维护业务广泛
  13. 个人成长:2021年8月记
  14. 修改IAR for msp430工程名方法
  15. 敏捷组织︱如何打造VUCA时代的敏捷型组织?
  16. 菜菜的刷题日记 | 66.加一 Plus One
  17. 字符串转换,大写变小写,小写变大写
  18. 教授专栏31 | 许佳龙: 疫下3观察--看香港科技应用短板
  19. 新媒体运营编辑有出路吗
  20. H-1B visa - H-1B 签证

热门文章

  1. SushiSwap历任“主厨”史
  2. 严魏敏-习题-查找-07
  3. 无刷直流电机的无位置传感器控制学习笔记
  4. 2021华为杯建模E题信号干扰下的超宽带(UWB)精确定位问题思路分析
  5. 多DSP调试JTAG的菊花链连接
  6. 欧科云链OKLink ETH浏览器重磅升级,一键触发链上数据可视化
  7. 注解用法详解——@RequestMapping
  8. openwrt配置内核驱动_openwrt 增加RTC(MCP7940 I2C总线)驱动详解
  9. postgresql初始化数据库
  10. linux搭建一个的过程,Linux内核创建一个新进程的过程