📄 swarm.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 + -