主题:关于pos的小程序
%File POS.m
%m is the number of particle
%n is the dimension of rarious
%x is a m*n matrix
%pbx is a m*n matrix
%v is a m*n matrix
%gbx is a 1*n matrix
%pbf is a m*1 matrix
%gbf is a number
%clear all
clc
n=2;
m=50;
c1=2;
c2=2;
w=1;
vmax=0.5;
f=zeros(m,1);
%随机m个粒子
x=-1+2*rand(m,n); %[-1,1]上的最小值
v=0.5*rand(m,n);
%计算适应值
for i=1:m;
f(i)=obf_pso(x(i,:));
end
%找出个体极值和全局极值
pbx=x;
pbf=f;
size(f);
[gbf,g]=min(pbf);
gbx=pbx(g,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:));
for j=1:n
if v(i,j)>vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
%开始循环迭代
k=0;
for k=1:1000
k=k+1;
while abs(gbf)>0.00001
for i=1:m
f(i)=obf_pso(x(i,:));
end
for i=1:m
if f(i)<pbf(i)
pbf(i)=f(i);
fbx(i,:)=x(i,:);
end
end
[gbf,g]=min(pbf);
gbx=pbx(g,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:));
for j=1:n
if v(i,j)>vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
end
end
gbx %最优解
gbf %最优值
k %迭代次数
function f=obf_pso(y)%,n
%不同函数的目标值
f=y(1)^2+y(2)^2;
%f=(y(1)-2)^2+(y(2)-1.5)^2;
end
一个pos的小程序,看了相关的程序,但自己的这个程序都调了2天了,还是发现不了问题出在哪,可以运行,但计算出来的结果又不对,实在没折了,恳请高手帮我看一下,谢谢!
%m is the number of particle
%n is the dimension of rarious
%x is a m*n matrix
%pbx is a m*n matrix
%v is a m*n matrix
%gbx is a 1*n matrix
%pbf is a m*1 matrix
%gbf is a number
%clear all
clc
n=2;
m=50;
c1=2;
c2=2;
w=1;
vmax=0.5;
f=zeros(m,1);
%随机m个粒子
x=-1+2*rand(m,n); %[-1,1]上的最小值
v=0.5*rand(m,n);
%计算适应值
for i=1:m;
f(i)=obf_pso(x(i,:));
end
%找出个体极值和全局极值
pbx=x;
pbf=f;
size(f);
[gbf,g]=min(pbf);
gbx=pbx(g,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:));
for j=1:n
if v(i,j)>vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
%开始循环迭代
k=0;
for k=1:1000
k=k+1;
while abs(gbf)>0.00001
for i=1:m
f(i)=obf_pso(x(i,:));
end
for i=1:m
if f(i)<pbf(i)
pbf(i)=f(i);
fbx(i,:)=x(i,:);
end
end
[gbf,g]=min(pbf);
gbx=pbx(g,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:));
for j=1:n
if v(i,j)>vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
end
end
gbx %最优解
gbf %最优值
k %迭代次数
function f=obf_pso(y)%,n
%不同函数的目标值
f=y(1)^2+y(2)^2;
%f=(y(1)-2)^2+(y(2)-1.5)^2;
end
一个pos的小程序,看了相关的程序,但自己的这个程序都调了2天了,还是发现不了问题出在哪,可以运行,但计算出来的结果又不对,实在没折了,恳请高手帮我看一下,谢谢!