CTP5T(i)=elapsedTime;display(strcat('CTP5',num2str(i))); end
ctp5fv=cell2mat(CTP5FV');
ctp5fv=GetLeastFunctionValue(ctp5fv);
CTP6NP=cell(1,50); CTP6FV=cell(1,50); CTP6T=zeros(1,50); for i=1:50 tic;
%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP6',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0]);%--CTP6 elapsedTime=toc; CTP6NP(i)={np}; CTP6FV(i)={fv};
CTP6T(i)=elapsedTime;display(strcat('CTP6',num2str(i))); end
ctp6fv=cell2mat(CTP6FV');
ctp6fv=GetLeastFunctionValue(ctp6fv);
CTP7NP=cell(1,50); CTP7FV=cell(1,50); CTP7T=zeros(1,50); for i=1:50 tic;
%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP7',0.1,50,100,2.0,1.0,0.4,1000,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[1 0 0 0 0]);%--CTP7 elapsedTime=toc; CTP7NP(i)={np}; CTP7FV(i)={fv};
CTP7T(i)=elapsedTime;display(strcat('CTP7',num2str(i))); end
ctp7fv=cell2mat(CTP7FV');
ctp7fv=GetLeastFunctionValue(ctp7fv);
CONSTRNP=cell(1,50); CONSTRFV=cell(1,50); CONSTRT=zeros(1,50); for i=1:50 tic;
%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP8',0.1,50,100,2.0,1.0,0.4,200,2,[0.1,0],[1,5]);%--CTP8,CONSTR elapsedTime=toc; CONSTRNP(i)={np};
CONSTRFV(i)={fv};
CONSTRT(i)=elapsedTime;display(strcat('CTP8',num2str(i))); end
constrfv=cell2mat(CONSTRFV');
constrfv=GetLeastFunctionValue(constrfv);
SRNNP=cell(1,50); SRNFV=cell(1,50); SRNT=zeros(1,50); for i=1:50 tic;
%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP9',0.1,50,100,2.0,1.0,0.4,200,2,[-20,-20],[20,20]);%--CTP9,SRN elapsedTime=toc; SRNNP(i)={np}; SRNFV(i)={fv};
SRNT(i)=elapsedTime;display(strcat('CTP9',num2str(i))); end
srnfv=cell2mat(SRNFV');
srnfv=GetLeastFunctionValue(srnfv);
TNKNP=cell(1,50); TNKFV=cell(1,50); TNKT=zeros(1,50); for i=1:50 tic;
[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP10',0.1,50,100,2.0,1.0,0.4,1300,2,[0,0],[pi,pi],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',false));%--CTP10,TNK elapsedTime=toc; TNKNP(i)={np}; TNKFV(i)={fv};
TNKT(i)=elapsedTime;display(strcat('CTP10',num2str(i))); end
tnkfv=cell2mat(TNKFV');
tnkfv=GetLeastFunctionValue(tnkfv);
TNKfmNP=cell(1,50); TNKfmFV=cell(1,50); TNKfmT=zeros(1,50); for i=1:50 tic;
[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP10',0.1,50,100,2.0,1.0,0.4,300,2,[0,0],[pi,pi
],[],struct('isfmopso',true,'istargetdis',false,'stopatborder',false));%--CTP10,TNK elapsedTime=toc; TNKfmNP(i)={np}; TNKfmFV(i)={fv};
TNKfmT(i)=elapsedTime;display(strcat('CTP10fm',num2str(i))); end
tnkfmfv=cell2mat(TNKfmFV');
tnkfmfv=GetLeastFunctionValue(tnkfmfv);
BNHNP=cell(1,50); BNHFV=cell(1,50); BNHT=zeros(1,50); for i=1:50 tic;
%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('BNH',0.1,50,100,2.0,1.0,0.4,200,2,zeros(1,2),[5,3]);%--BNH elapsedTime=toc; BNHNP(i)={np}; BNHFV(i)={fv};
BNHT(i)=elapsedTime;display(strcat('BNH',num2str(i))); end
bnhfv=cell2mat(BNHFV');
bnhfv=GetLeastFunctionValue(bnhfv);
OSYNP=cell(1,50); OSYFV=cell(1,50); OSYT=zeros(1,50); for i=1:50 tic;
[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('OSY',0.1,50,100,2.0,1.0,0.4,1500,6,[0,0,1,0,1,0],[10,10,5,6,5,10],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--OSY elapsedTime=toc; OSYNP(i)={np}; OSYFV(i)={fv};
OSYT(i)=elapsedTime;display(strcat('OSY',num2str(i))); end
osyfv=cell2mat(OSYFV');
osyfv=GetLeastFunctionValue(osyfv);
OSYfmNP=cell(1,50); OSYfmFV=cell(1,50); OSYfmT=zeros(1,50); for i=1:50
tic;
[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('OSY',0.1,50,100,2.0,1.0,0.4,500,6,[0,0,1,0,1,0],[10,10,5,6,5,10],[],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--OSY elapsedTime=toc; OSYfmNP(i)={np}; OSYfmFV(i)={fv};
OSYfmT(i)=elapsedTime;display(strcat('OSYfm',num2str(i))); end
osyfmfv=cell2mat(OSYfmFV');
osyfmfv=GetLeastFunctionValue(osyfmfv);
function [np,nprule,dnp,fv,goals,pbest] ParticleSwarmOpt(funcname,unfitx,N,Nnp,cmax,cmin,w,M,D,lb,ub,x0,params) %待优化的目标函数:fitness
%约束容忍度unfitx=0.01,逐步降到0 %内部种群(粒子数目):N %外部种群(非劣解集):Nnp %学习因子1:cmax %学习因子2:cmin %惯性权重:w
%最大迭代次数:M %问题的维数:D
%目标函数取最小值时的自变量值:xm %目标函数的最小值:fv %迭代次数:cv
format long;
NP=[];%非劣解集
Dnp=[];%非劣解集距离
if nargin < 13
params = struct('isfmopso',false,'istargetdis',false,'stopatborder',true); end
if (nargin < 12 || isempty(x0)) x0=lb+(ub-lb).*rand([1,D]); end
T=size(fitness(x0,funcname),2);
goals=zeros(M,N,T);%记下N个粒子M次迭代T维目标变化 %----初始化种群的个体--------///////第1步/////////////////////////////////// x(1,:)=x0;
v(1,:)=(ub-lb).*rand([1,D])*0.5; for i=2:N
= for j=1:D
x(i,j)=lb(j)+(ub(j)-lb(j))*rand; %随机初始化位置 v(i,j)=(ub(j)-lb(j))*rand*0.5; %随机初始化速度 end end
%----计算目标向量---------- %---速度控制 vmax=(ub-lb)*0.5; vmin= -vmax;
%-----求出初始NP-----------////////第2步/////////////////////////////////// NP(1,:)=x(1,:);%第一个默认加入NP NPRule=[0,0,0];%非劣解集参数 Dnp(1,1)=0;
for i=2:N
faix = GetFai(x(i,:),funcname,params); if faix<=unfitx
[NP,NPRule,Dnp] = compare(x(i,:),NP,NPRule,Dnp,Nnp,funcname,params); end end
%-----初始自身最好位置------///////第3步//////////////////////////////////// pbest = x;%自身最优解
%-----在确定每个粒子所对就的目标方格-------//第4步///////////////////////////
%------进入主要循环,按照公式依次迭代------------ for t=1:M
if mod(t,100)==0
unfitx = 0.01-0.01*(t+200)/M; if unfitx <0 unfitx =0 ; end
% [x,v,pbest,NP,NPRule,Dnp]=ReInit(x,v,pbest,NP,NPRule,Dnp,Nnp,D,lb,ub,unfitx); end
c = cmax - (cmax - cmin)*t/M; w1=w-(w-0.3)*t/M; %c = cmax;
%c = cmax - (cmax - cmin)*mod(t,51)/50; %w1=w-(w-0.3)*mod(t,51)/50;
%-----获得全局最优-------/////第5步///////////////////////////////////////// %if mod(t,3)==1