📄 p.m
字号:
clc;
clear;
n_p=5;
X0=kron(ones(n_p,1),[0 0]);
Vmax=kron(ones(n_p,1),[.01 .01]);
Xmax=kron(ones(n_p,1),[4 2]);
X=rand(n_p,2).*(Xmax-X0)+X0;
V=randn(n_p,2).*Vmax;
t=0:.1:4;
KL=kron(ones(n_p,1),(t+1).^2);
KL=KL';
Y=zeros(41,n_p);
for k=1:n_p
Y(:,k)=(t.^2)+X(k,1)*(t)+X(k,2);
end;
f=inline('(1/41)*sum((Y-KL).^2)');
obj=f(Y,KL);
Pbest=obj;
PbestX=X;
[gbest gbest_I]=min(Pbest);
gbest_X=X(gbest_I,:);
for i=1:10000
fact=.3;
rp=rand(n_p,2);
rg=rand(n_p,2);
w=.95;
V=w*V+fact*rp.*(PbestX-X)+.7*rg.*(kron(ones(n_p,1),gbest_X)-X);
X=X+V;
for j=1:n_p
if X(j,1)>Xmax(j,1)
X(j,1)=Xmax(j,1);
elseif X(j,1)<X0(j,1)
X(j,1)=X0(j,1);
end
if X(j,2)>Xmax(j,2)
X(j,2)=Xmax(j,2);
elseif X(j,2)<X0(j,2)
X(j,2)=X0(j,2);
end
end
for k=1:n_p
Y(:,k)=(t.^2)+X(k,1)*(t)+X(k,2);
end;
obj=f(Y,KL);
for j=1:n_p
if obj(j)<=Pbest
Pbest(j)=obj(j);
PbestX(j,:)=X(j,:);
end
if obj(j)<gbest
gbest=obj(j);
gbest_I=j;
gbest_X=X(j,:);
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -