2022年用MATLAB编制PSO算法程序求解简单的函数极值问题 .pdf
用 MATLAB编制 PSO算法程序求解简单的函数极值问题一、利用 PSO算法求解目标函数最大值待求解问题为:5,5),2exp()21(1.2)(max22xxxxxf已知最大值大概为5 在-1 左右取到。编制 matlab 主程序为:clc; clearall; closeall;tic; %程序运行计时E0=0.001; %允许误差MaxNum=100; %粒子最大迭代次数narvs=1; %目标函数的自变量个数particlesize=30; % 粒子群规模c1=2; %每个粒子的个体学习因子,也称为加速常数c2=2; %每个粒子的社会学习因子,也称为加速常数w=0.6; %惯性因子vmax=0.8; %粒子的最大飞翔速度x=-5+10*rand(particlesize,narvs); % 粒子所在的位置v=2*rand(particlesize,narvs); %粒子的飞翔速度%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,%目标函数是: y=1+(2.1*(1-x+2*x.2).*exp(-x.2/2) %inline命令定义适应度函数如下:fitness=inline(1/(1+(2.1*(1-x+2*x.2).*exp(-x.2/2), x);%inline定义的适应度函数会使程序运行速度大大降低for i=1:particlesizefor j=1:narvsf(i)=fitness(x(i,j);endendpersonalbest_x=x;personalbest_faval=f;globalbest_faval i=min(personalbest_faval);globalbest_x=personalbest_x(i,:);k=1;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - while k=MaxNumfor i=1:particlesizefor j=1:narvsf(i)=fitness(x(i,j);endif f(i)vmax;v(i,j)=vmax;elseif v(i,j)-vmax;v(i,j)=-vmax;endendx(i,:)=x(i,:)+v(i,:);endif abs(globalbest_faval)E0,break, end k=k+1;endValue1=1/globalbest_faval-1; Value1=num2str(Value1);% strcat指令可以实现字符的组合输出disp(strcat(the maximum value, =,Value1);%输出最大值所在的横坐标位置Value2=globalbest_x; Value2=num2str(Value2);disp(strcat(the corresponding coordinate, =,Value2);x=-5:0.01:5;y=2.1*(1-x+2*x.2).*exp(-x.2/2);plot(x,y,m-, linewidth,3);holdon ;plot(globalbest_x,1/globalbest_faval-1,kp, linewidth,4);legend( 目标函数 , 搜索到的最大值 );xlabel(x);ylabel(y);grid on ; toc;运行结果为:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 运算结果为:函数在 -1.1617时取到最大值 5.1985。效果理想。同时,程序输出粒子群收索到的最大值位置如下图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -