⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swarm.txt

📁 使用Scilab编写的粒子群算法
💻 TXT
字号:
clc;                 //清空屏幕
N=400;               //迭代次数
Ns=40;               //粒子群大小
a=rand(2,Ns)*10-5;   //初始化粒子群
b=a;                 //初始化局部最优位置
g=rand(2,Ns);        //初始化全局最优位置
xmax=5;              //粒子坐标的最大值
xmin=-5;             //粒子坐标的最小值
v=rand(2,Ns);        //初始化搜索步长
pb=ones(1,Ns)*100000;//初始化局部最优值
c1=2;                //学习系数
c2=2;                //学习系数
w=0.3;               //惯性系数
function y=f(a,b);   //适应度函数,即目标函数
y=100*(a-b.^2).^2+(b-1).^2;
endfunction;
gb=f(g(1),g(2));     //初始化全局最优值
for i=1:N
   y=f(a(1,:),a(2,:));
   index=find(y<pb); //计算局部最优位置坐标
   pb(index)=y(index);//更新局部最优值
   b(:,index)=a(:,index);//更新局部最优位置
   [gb,index]=min(pb); //更新全局最优
   mprintf('%f   %f   %f\n',g(1),g(2),gb);
   for j=1:Ns
      g(:,j)=a(:,index);
   end;
   v=w*v+c1*rand(2,Ns).*(b-a)+c2*rand(2,Ns).*(g-a);//更新搜索步长      
   a=a+v;              //更新粒子群
   index=find(a<xmin|a>xmax);//越界处理,保证粒子群在指定范围内
   a(index)=rand()*10-5;
end;
//mprintf('position=\n(%f,%f)\n\n',g(:,1)');
//mprintf('bestvalue=%f\n\n',gb);
mprintf('time=%f\n',timer());              //计算时间
//使用内置优化函数
clc;               //清空屏幕
function y=f(a);   //适应度函数,即目标函数
y=100*(a(1)-a(2)^2)^2+(a(2)-1)^2;
endfunction;
function y=g(a)    //目标函数的导数
  y=[2*(a(1)-a(2)^2);-4*a(2)*(a(1)-a(2)^2)+2*(a(2)-1)];
endfunction
function [f1,g1,ind]=costf(x,ind)
  f1=f(x);
  g1=g(x);
endfunction
x0=[1.5,1.5];      //初始估计值
[fopt,xopt]=optim(costf,x0);
fopt               //输出最优值
xopt               //输出最优坐标
time=timer()       //计算时间

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -