1、% 改进的多目标粒子群算法,包括多个测试函数% 对程序中的部分参数进行修改将更好地求解某些函数% ZDT1NP=cell(1,50);ZDT1FV=cell(1,50);ZDT1T=zeros(1,50);for i=1:50tic;%np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(ZDT1,0.1,50,100,2.0,1.0,0.4,200,30,zeros(1,30),ones(1,30);%-ZDT1elapsedTime=toc;ZDT1NP(i)=np;ZDT1FV(i)=fv;ZDT1T(i)=elapsedTime;display(s
2、trcat(ZDT1,num2str(i);endzdt1fv=cell2mat(ZDT1FV);zdt1fv=GetLeastFunctionValue(zdt1fv);ZDT2NP=cell(1,50);ZDT2FV=cell(1,50);ZDT2T=zeros(1,50);for i=1:50tic;%np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(ZDT2,0.1,50,100,2.0,1.0,0.4,200,30,zeros(1,30),ones(1,30),1,zeros(1,29);%-ZDT2elapsedTime=toc;ZDT2N
3、P(i)=np;ZDT2FV(i)=fv;ZDT2T(i)=elapsedTime;display(strcat(ZDT2,num2str(i);endzdt2fv=cell2mat(ZDT2FV);zdt2fv=GetLeastFunctionValue(zdt2fv);%5ZDT3NP=cell(1,50);ZDT3FV=cell(1,50);ZDT3T=zeros(1,50);for i=1:50tic;% np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(ZDT3,0.1,50,100,2.0,1.0,0.4,400,30,zeros(1,30
4、),ones(1,30);%-ZDT3elapsedTime=toc;ZDT3NP(i)=np;ZDT3FV(i)=fv;ZDT3T(i)=elapsedTime;display(strcat(ZDT3,num2str(i);endzdt3fv=cell2mat(ZDT3FV);zdt3fv=GetLeastFunctionValue(zdt3fv);ZDT4NP=cell(1,50);ZDT4FV=cell(1,50);ZDT4T=zeros(1,50);for i=1:50tic;% np,nprule,dnp,fv,goals=ParticleSwarmOpt(ZDT4,0.1,50,1
5、00,2.0,1.0,0.4,200,10,0,-5,-5,-5,-5,-5,-5,-5,-5,-5,1,5,5,5,5,5,5,5,5,5,1,0,0,0,0,0,0,0,0,0);%-ZDT4elapsedTime=toc;ZDT4NP(i)=np;ZDT4FV(i)=fv;ZDT4T(i)=elapsedTime;display(strcat(ZDT4,num2str(i);endzdt4fv=cell2mat(ZDT4FV);zdt4fv=GetLeastFunctionValue(zdt4fv);%ZDT6NP=cell(1,50);ZDT6FV=cell(1,50);ZDT6T=z
6、eros(1,50);for i=1:50tic;%np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(ZDT6,0.1,50,100,2.0,1.0,0.4,200,10,zeros(1,10),ones(1,10);%-ZDT6elapsedTime=toc;ZDT6NP(i)=np;ZDT6FV(i)=fv;ZDT6T(i)=elapsedTime;display(strcat(ZDT6,num2str(i);endzdt6fv=cell2mat(ZDT6FV);zdt6fv=GetLeastFunctionValue(zdt6fv);CTP1NP
7、=cell(1,50);CTP1FV=cell(1,50);CTP1T=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP1,0.1,50,100,2.0,1.0,0.4,1500,5,0,-5,-5,-5,-5,1,5,5,5,5,struct(isfmopso,false,istargetdis,false,stopatborder,true);%-CTP1elapsedTime=toc;CTP1NP(i)=np;CTP1FV(i)=fv;CTP1T(i)=elapsedTime;displ
8、ay(strcat(CTP1,num2str(i);endctp1fv=cell2mat(CTP1FV);ctp1fv=GetLeastFunctionValue(ctp1fv);CTP1fmNP=cell(1,50);CTP1fmFV=cell(1,50);CTP1fmT=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP1,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,struct(isfmopso,true,i
9、stargetdis,false,stopatborder,true);%-CTP1elapsedTime=toc;CTP1fmNP(i)=np;CTP1fmFV(i)=fv;CTP1fmT(i)=elapsedTime;display(strcat(CTP1fm,num2str(i);endctp1fmfv=cell2mat(CTP1fmFV);ctp1fmfv=GetLeastFunctionValue(ctp1fmfv);CTP2NP=cell(1,50);CTP2FV=cell(1,50);CTP2T=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv
10、,goals,pbest=ParticleSwarmOpt(CTP2,0.1,50,100,2.0,1.0,0.4,1500,5,0,-5,-5,-5,-5,1,5,5,5,5,struct(isfmopso,false,istargetdis,false,stopatborder,true);%-CTP2elapsedTime=toc;CTP2NP(i)=np;CTP2FV(i)=fv;CTP2T(i)=elapsedTime;display(strcat(CTP2,num2str(i);endctp2fv=cell2mat(CTP2FV);ctp2fv=GetLeastFunctionVa
11、lue(ctp2fv);CTP2fmNP=cell(1,50);CTP2fmFV=cell(1,50);CTP2fmT=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP2,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,struct(isfmopso,true,istargetdis,false,stopatborder,true);%-CTP2elapsedTime=toc;CTP2fmNP(i)=np;CTP2f
12、mFV(i)=fv;CTP2fmT(i)=elapsedTime;display(strcat(CTP2fm,num2str(i);endctp2fmfv=cell2mat(CTP2fmFV);ctp2fmfv=GetLeastFunctionValue(ctp2fmfv);CTP3NP=cell(1,50);CTP3FV=cell(1,50);CTP3T=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP3,0.1,50,100,2.0,1.0,0.4,1400,5,0,-5,-5,-5,-5
13、,1,5,5,5,5,struct(isfmopso,false,istargetdis,false,stopatborder,true);%-CTP3elapsedTime=toc;CTP3NP(i)=np;CTP3FV(i)=fv;CTP3T(i)=elapsedTime;display(strcat(CTP3,num2str(i);endctp3fv=cell2mat(CTP3FV);ctp3fv=GetLeastFunctionValue(ctp3fv);CTP3fmNP=cell(1,50);CTP3fmFV=cell(1,50);CTP3fmT=zeros(1,50);for i=
14、1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP3,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,struct(isfmopso,true,istargetdis,false,stopatborder,true);%-CTP3elapsedTime=toc;CTP3fmNP(i)=np;CTP3fmFV(i)=fv;CTP3fmT(i)=elapsedTime;display(strcat(CTP3fm,num2str(i);endctp3fmfv=
15、cell2mat(CTP3fmFV);ctp3fmfv=GetLeastFunctionValue(ctp3fmfv);CTP4NP=cell(1,50);CTP4FV=cell(1,50);CTP4T=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP4,0.1,50,100,2.0,1.0,0.4,1400,5,0,-5,-5,-5,-5,1,5,5,5,5,struct(isfmopso,false,istargetdis,false,stopatborder,true);%-CTP4el
16、apsedTime=toc;CTP4NP(i)=np;CTP4FV(i)=fv;CTP4T(i)=elapsedTime;display(strcat(CTP4,num2str(i);endctp4fv=cell2mat(CTP4FV);ctp4fv=GetLeastFunctionValue(ctp4fv);CTP4fmNP=cell(1,50);CTP4fmFV=cell(1,50);CTP4fmT=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP4,0.1,50,100,2.0,1.0,
17、0.4,400,5,0,-5,-5,-5,-5,1,5,5,5,5,0 0 1 0 0,struct(isfmopso,true,istargetdis,false,stopatborder,true);%-CTP4elapsedTime=toc;CTP4fmNP(i)=np;CTP4fmFV(i)=fv;CTP4fmT(i)=elapsedTime;display(strcat(CTP4fm,num2str(i);endctp4fmfv=cell2mat(CTP4fmFV);ctp4fmfv=GetLeastFunctionValue(ctp4fmfv);CTP5NP=cell(1,50);
18、CTP5FV=cell(1,50);CTP5T=zeros(1,50);for i=1:50tic;%np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP5,0.1,50,100,2.0,1.0,0.4,200,5,0,-5,-5,-5,-5,1,5,5,5,5,0 0 0 0 0);%-CTP5elapsedTime=toc;CTP5NP(i)=np;CTP5FV(i)=fv;CTP5T(i)=elapsedTime;display(strcat(CTP5,num2str(i);endctp5fv=cell2mat(CTP5FV);ctp5fv=
19、GetLeastFunctionValue(ctp5fv);CTP6NP=cell(1,50);CTP6FV=cell(1,50);CTP6T=zeros(1,50);for i=1:50tic;%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);%-CTP6elapsedTime=toc;CTP6NP(i)=np;CTP6FV(i)=fv;CTP6T(i)=elapsedTime;display(strcat(CT
20、P6,num2str(i);endctp6fv=cell2mat(CTP6FV);ctp6fv=GetLeastFunctionValue(ctp6fv);CTP7NP=cell(1,50);CTP7FV=cell(1,50);CTP7T=zeros(1,50);for i=1:50tic;%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);%-CTP7elapsedTime=toc;CTP7NP(i)=np;CT
21、P7FV(i)=fv;CTP7T(i)=elapsedTime;display(strcat(CTP7,num2str(i);endctp7fv=cell2mat(CTP7FV);ctp7fv=GetLeastFunctionValue(ctp7fv);CONSTRNP=cell(1,50);CONSTRFV=cell(1,50);CONSTRT=zeros(1,50);for i=1:50tic;%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,
22、CONSTRelapsedTime=toc;CONSTRNP(i)=np;CONSTRFV(i)=fv;CONSTRT(i)=elapsedTime;display(strcat(CTP8,num2str(i);endconstrfv=cell2mat(CONSTRFV);constrfv=GetLeastFunctionValue(constrfv);SRNNP=cell(1,50);SRNFV=cell(1,50);SRNT=zeros(1,50);for i=1:50tic;%np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(CTP9,0.1,5
23、0,100,2.0,1.0,0.4,200,2,-20,-20,20,20);%-CTP9,SRNelapsedTime=toc;SRNNP(i)=np;SRNFV(i)=fv;SRNT(i)=elapsedTime;display(strcat(CTP9,num2str(i);endsrnfv=cell2mat(SRNFV);srnfv=GetLeastFunctionValue(srnfv);TNKNP=cell(1,50);TNKFV=cell(1,50);TNKT=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=Partic
24、leSwarmOpt(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,TNKelapsedTime=toc;TNKNP(i)=np;TNKFV(i)=fv;TNKT(i)=elapsedTime;display(strcat(CTP10,num2str(i);endtnkfv=cell2mat(TNKFV);tnkfv=GetLeastFunctionValue(tnkfv);TNKfmNP=cell(1,50);T
25、NKfmFV=cell(1,50);TNKfmT=zeros(1,50);for i=1:50tic;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,TNKelapsedTime=toc;TNKfmNP(i)=np;TNKfmFV(i)=fv;TNKfmT(i)=elapsedTime;display(strcat(CTP10fm
26、,num2str(i);endtnkfmfv=cell2mat(TNKfmFV);tnkfmfv=GetLeastFunctionValue(tnkfmfv);BNHNP=cell(1,50);BNHFV=cell(1,50);BNHT=zeros(1,50);for i=1:50tic;%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);%-BNHelapsedTime=toc;BNHNP(i)=np;BNHFV(i)=fv;BNHT(i)=elapse
27、dTime;display(strcat(BNH,num2str(i);endbnhfv=cell2mat(BNHFV);bnhfv=GetLeastFunctionValue(bnhfv);OSYNP=cell(1,50);OSYFV=cell(1,50);OSYT=zeros(1,50);for i=1:50tic;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,istargetdi
28、s,false,stopatborder,true);%-OSYelapsedTime=toc;OSYNP(i)=np;OSYFV(i)=fv;OSYT(i)=elapsedTime;display(strcat(OSY,num2str(i);endosyfv=cell2mat(OSYFV);osyfv=GetLeastFunctionValue(osyfv);OSYfmNP=cell(1,50);OSYfmFV=cell(1,50);OSYfmT=zeros(1,50);for i=1:50tic;np,nprule,dnp,fv,goals,pbest=ParticleSwarmOpt(O
29、SY,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);%-OSYelapsedTime=toc;OSYfmNP(i)=np;OSYfmFV(i)=fv;OSYfmT(i)=elapsedTime;display(strcat(OSYfm,num2str(i);endosyfmfv=cell2mat(OSYfmFV);osyfmfv=GetLeastFunctionValue(osyfmfv);function np,
30、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%迭代次数:cvformat long;NP=;%非劣解集Dnp=;%非劣解集距离if nargin
31、 13params = struct(isfmopso,false,istargetdis,false,stopatborder,true);endif (nargin 12 | isempty(x0)x0=lb+(ub-lb).*rand(1,D);endT=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:Nfor j=1:Dx(i,j)=lb(j)+(ub(j)-lb
32、(j)*rand; %随机初始化位置v(i,j)=(ub(j)-lb(j)*rand*0.5; %随机初始化速度endend%-计算目标向量-%-速度控制vmax=(ub-lb)*0.5;vmin= -vmax;%-求出初始 NP-/第 2 步/NP(1,:)=x(1,:);%第一个默认加入 NPNPRule=0,0,0;%非劣解集参数Dnp(1,1)=0;for i=2:Nfaix = GetFai(x(i,:),funcname,params);if faix=unfitxNP,NPRule,Dnp = compare(x(i,:),NP,NPRule,Dnp,Nnp,funcname,p
33、arams);endend%-初始自身最好位置 -/第 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); endc = 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%gbest,NPRule = GetGlobalBest(NP,NPRule,Dnp);%endfor i=1:N