%计算初始目标向量
for i=1:xSize%60 每一个粒子群的解集
for j=1:Dim %控制类别
px(i) = px(i)+xs(1,j)*x(i,j)^2+xs(2,j)*x(i,j)+xs(3,j)+abs(xs(4,j)*sin(xs(5,j)*(x(i,j)-xs(6,j)))); %粒子价值
cx(i) = cx(i)+x(i,j); %粒子重量
end
end
% 粒子最优位置
pxbest=px;cxbest=cx;
%% 初始筛选非劣解
flj=[];
fljx=[];
fljNum=0;
%两个实数相等精度
for i=1:xSize
flag=0; %支配标志
for j=1:xSize
if j~=i
if (px(i)<px(j))&&(cx(i)>=weight)
flag=1;
break;
end
end
end
%判断有无被支配
if flag==1
fljNum=fljNum+1;
% 记录非劣解
flj(fljNum,1)=px(i);flj(fljNum,2)=cx(i);
% 非劣解位置
fljx(fljNum,:)=x(i,:);
end
end
%% 循环迭代
for iter=1:MaxIt
%% 群体更新
for i=1:xSize
%速度更新
v(i,:)=w*v(i,:)+c1*rand(1,1)*(xbest(i,:)-x(i,:))+c2*rand(1,1)*(gbest-x(i,:));
%位置更新
x(i,:)=x(i,:)+v(i,:);%?????????????????????????????????????????????
x(i,:) = rem(x(i,:),objnum)/double(objnum);
index1=find(x(i,:)<=0);
if ~isempty(index1)
x(i,index1)=rand(size(index1));
end
x(i,:)=ceil(3*x(i,:));
end
%% 计算个体适应度
pxPrior(:)=0;
cxPrior(:)=0;
for i=1:xSize%60 每一个粒子群的解集
for j=1:Dim %控制类别
pxPrior(i) = pxPrior(i)+xs(1,j)*x(i,j)^2+xs(2,j)*x(i,j)+xs(3,j)+abs(xs(4,j)*sin(xs(5,j)*(x(i,j)-xs(6,j)))); %粒子价值
cxPrior(i) = cxPrior(i)+x(i,j); %粒子重量
end
end
%% 更新粒子历史最佳
for i=1:xSize
%现在的支配原有的,替代原有的
if (px(i)>pxPrior(i))&&(cxPrior(i)>=weight)
xbest(i,:)=x(i,:);%没有记录目标值
pxbest(i)=pxPrior(i);cxbest(i)=cxPrior(i);
end
%彼此不受支配,随机决定
if ~(px(i)>pxPrior(i))&&(cxPrior(i)>=weight)
if rand(1,1)<0.5
xbest(i,:)=x(i,:);
pxbest(i)=pxPrior(i);cxbest(i)=cxPrior(i);
end
end
end