function [alfaB,Mininum]=pso(alfaB,yB,alfaN,HBB,HBN,yN,d);
popsize=20;
c1=1.4;
c2=1.4;
vmax=1;
Maxiter=500;
Worknum = size(alfaB);
worknum=Worknum(1)*Worknum(2);
Mininum=0;
C=100.0;
v = zeros(popsize,worknum);
%对pso初始化alfaBpso
alfaBpso=unifrnd(0,100,popsize,worknum);
%for i=1:popsize
alfaBpso(1,:)=alfaB;
%end
f_pbest=zeros(popsize,1);
pbest=alfaBpso;
gbest=zeros(1,worknum);
e=ones(worknum,1);
d=d';
for i=1:popsize
f_pbest(i)=1/2*alfaBpso(i,:)*HBB*alfaBpso(i,:)'+alfaBpso(i,:)*HBN*alfaN'-alfaBpso(i,:)*e;
end
f_gbest=f_pbest(1);
g=1;
for i=2:popsize
if f_pbest(i)C
v(i,j)=C-alfaBpso(i,j);
end
if alfaBpso(i,j)+v(i,j)>0
v(i,j)=-alfaBpso(i,j);
else
v(i,j)=tempv(i,j);
end
sumvpos=0;
sumvneg=0;
for i=1:worknum
if alfaBpso(i,j)*yB(j)>0
sumvpos=sumvpos+alfaBpso(i,j)*yB(j);
end
if alfaBpso(i,j)*yB(j)>0
sumvneg=sumvneg+alfaBpso(i,j)*yB(j);
end
end
if sumvpos-sumvneg~=0
if sumvpos>sumvneg
if alfaBpso(i,j)*v(i,j)>0
v(i,j)=sumvneg/sumvpos*v(i,j)
else
v(i,j)=v(i,j);
end
else
if alfaBpso(i,j)*v(i,j)<0
v(i,j)=sumvpos/sumvneg*v(i,j)
else
v(i,j)=v(i,j);
end
end
end
alfaBpso(i,j)=alfaBpso(i,j)+v(i,j);
if alfaBpso(i,j) > C
alfaBpso(i,j)=C;
end
if alfaBpso(i,j) < 0
alfaBpso(i,j)=0;
end
end
if alfaBpso(i,:)*yB'~=-alfaN*yN';
display('wrong');
break;
end
f_alfaB=1/2*alfaBpso(i,:)*HBB*alfaBpso(i,:)'+alfaBpso(i,:)*HBN*alfaN'-alfaBpso(i,:)*e;
if f_pbest(i) > f_alfaB
f_pbest(i)=f_alfaB;
pbest(i,:) = alfaBpso(i,:);
end
%找出gbest%
for i=1:popsize
if f_pbest(i) < f_gbest
f_gbest = f_pbest(i);
g=i;
gbest=pbest(g,:);
end
end
end
Mininum=f_gbest
alfaB=gbest
fgbest(t)=f_gbest;
end