表1:57个现实世界中的COPs的详细信息。D是问题的决策变量总数,g是不等式约束的数量,h是等式约束的数量,f(x⃗∗)f(\vec{x}^*)f(x ∗)是已知的最佳可行目标函数值。

优化问题测试集
| 编号 | 问题名称 | 维度(D) | 不等式约束(g) | 等式约束(h) | 最优解f(x*) | 
|---|---|---|---|---|---|
| 工业化工过程 | |||||
| RC01 | 换热器网络设计(案例1) | 9 | 0 | 8 | 1.8931E+02 | 
| RC02 | 换热器网络设计(案例2) | 11 | 0 | 9 | 7.0490E+03 | 
| RC03 | 烷基化单元优化操作 | 7 | 14 | 0 | -4.5291E+03 | 
| RC04 | 反应器网络设计(RND) | 6 | 1 | 4 | -3.8826E-01 | 
| RC05 | Haverly混合池问题 | 9 | 2 | 4 | -4.0001E+02 | 
| RC06 | 混合-池化-分离问题 | 38 | 0 | 32 | 1.8638E+00 | 
| RC07 | 丙烷/异丁烷/正丁烷非精馏分离 | 48 | 0 | 38 | 1.5670E+00 | 
| 过程合成与设计 | |||||
| RC08 | 过程合成问题 | 2 | 2 | 0 | 2.0000E+00 | 
| RC09 | 过程合成与设计问题 | 3 | 1 | 1 | 2.5577E+00 | 
| RC10 | 过程流程模拟问题 | 3 | 3 | 0 | 1.0765E+00 | 
| RC11 | 双反应器问题 | 7 | 4 | 4 | 9.9238E+01 | 
| RC12 | 过程合成问题 | 7 | 9 | 0 | 2.9248E+00 | 
| RC13 | 过程设计问题 | 5 | 3 | 0 | 2.6887E+04 | 
| RC14 | 多产品批次工厂 | 10 | 10 | 0 | 5.3639E+04 | 
| *机械工程问题 | |||||
| RC15 | 减速器重量最小化 | 7 | 11 | 0 | 2.9944E+03 | 
| RC16 | 工业制冷系统优化设计 | 14 | 15 | 0 | 3.2213E-02 | 
| RC17 | 拉伸/压缩弹簧设计(案例1) | 3 | 3 | 0 | 1.2665E-02 | 
| RC18 | 压力容器设计 | 4 | 4 | 0 | 5.8853E+03 | 
| RC19 | 焊接梁设计 | 4 | 5 | 0 | 1.6702E+00 | 
| RC20 | 三杆桁架设计 | 2 | 3 | 0 | 2.6389E+02 | 
| RC21 | 多盘离合器制动设计 | 5 | 7 | 0 | 2.3524E-01 | 
| RC22 | 行星齿轮系优化设计 | 9 | 10 | 1 | 5.2577E-01 | 
| RC23 | 阶梯锥滑轮问题 | 5 | 8 | 3 | 1.6070E+01 | 
| RC24 | 机器人夹持器问题 | 7 | 7 | 0 | 2.5288E+00 | 
| RC25 | 静压推力轴承设计 | 4 | 7 | 0 | 1.6161E+03 | 
| RC26 | 四级齿轮箱问题 | 22 | 86 | 0 | 3.5359E+01 | 
| RC27 | 10杆桁架设计 | 10 | 3 | 0 | 5.2445E+02 | 
| RC28 | 滚动轴承设计 | 10 | 9 | 0 | 1.4614E+04 | 
| RC29 | 气体传输压缩机设计(GTCD) | 4 | 1 | 0 | 2.9649E+06 | 
| RC30 | 拉伸/压缩弹簧设计(案例2) | 3 | 8 | 0 | 2.6139E+00 | 
| RC31 | 齿轮系设计问题 | 4 | 1 | 1 | 0.0000E+00 | 
| RC32 | Himmelblau函数优化 | 5 | 6 | 0 | -3.0666E+04 | 
| RC33 | 拓扑优化问题 | 30 | 30 | 0 | 2.6393E+00 | 
| 电力系统问题 | |||||
| RC34 | 配电网单相分布式发电优化配置(含无功支撑) | 118 | 0 | 108 | 0.0000E+00 | 
| RC35 | 有功损耗最小的分布式发电优化配置 | 153 | 0 | 148 | 7.9964E-02 | 
| RC36 | 无功损耗最小的DG与电容器优化配置 | 158 | 0 | 148 | 4.7734E-02 | 
| RC37 | 最优潮流(有功损耗最小) | 126 | 0 | 116 | 1.8594E-02 | 
| RC38 | 最优潮流(燃料成本最小) | 126 | 0 | 116 | 2.7139E+00 | 
| RC39 | 最优潮流(有功损耗与燃料成本最小) | 126 | 0 | 116 | 2.7516E+00 | 
| RC40 | 微电网潮流(孤岛模式) | 76 | 0 | 76 | 0.0000E+00 | 
| RC41 | 微电网潮流(并网模式) | 74 | 0 | 74 | 0.0000E+00 | 
| RC42 | 孤岛微电网有功损耗最小的下垂控制优化 | 86 | 0 | 76 | 7.7027E-02 | 
| RC43 | 孤岛微电网无功损耗最小的下垂控制优化 | 86 | 0 | 76 | 7.9836E-02 | 
| RC44 | 风电场布局优化 | 30 | 91 | 0 | -6.2732E+03 | 
| 电力电子问题 | |||||
| RC45 | 3电平逆变器SOPWM优化 | 25 | 24 | 1 | 3.0739E-02 | 
| RC46 | 5电平逆变器SOPWM优化 | 25 | 24 | 1 | 2.0240E-02 | 
| RC47 | 7电平逆变器SOPWM优化 | 25 | 24 | 1 | 1.2783E-02 | 
| RC48 | 9电平逆变器SOPWM优化 | 30 | 29 | 1 | 1.6788E-02 | 
| RC49 | 11电平逆变器SOPWM优化 | 30 | 29 | 1 | 9.3119E-03 | 
| RC50 | 13电平逆变器SOPWM优化 | 30 | 29 | 1 | 1.5051E-02 | 
| 畜牧饲料配比优化 | |||||
| RC51 | 肉牛饲料优化(案例1) | 59 | 14 | 1 | 4.5509E+03 | 
| RC52 | 肉牛饲料优化(案例2) | 59 | 14 | 1 | 3.3490E+03 | 
| RC53 | 肉牛饲料优化(案例3) | 59 | 14 | 1 | 4.9976E+03 | 
| RC54 | 肉牛饲料优化(案例4) | 59 | 14 | 1 | 4.2405E+03 | 
| RC55 | 奶牛饲料优化(案例1) | 64 | 0 | 6 | 6.6964E+03 | 
| RC56 | 奶牛饲料优化(案例2) | 64 | 0 | 6 | 1.4747E+04 | 
| RC57 | 奶牛饲料优化(案例3) | 64 | 0 | 6 | 3.2133E+03 | 
完整代码
            
            
              matlab
              
              
            
          
          clear all
close all
clc
format longG
T = 1000;
ProN = 3;
N = 50;
for i = 1:ProN
    disp(['======= Problems: ',num2str(i)]);
    [lb,ub,dim,fobj] = Problem_Define(i);
    [SDECOA_fMin,SDECOA_bestX,SDECOA_curve] = SDECOA(N,T,lb,ub,dim,fobj);
    figure(i);
    plot(SDECOA_curve,'b--','LineWidth',1.5,'MarkerIndices',1:ceil(T/10):T);
end
            
            
              matlab
              
              
            
          
          function [par] = Cal_par(prob_k)
	% CEC2020 Constrained Optimization Test Suite 
	% Abhishek Kumar (email: abhishek.kumar.eee13@iitbhu.ac.in, Indian Institute of Technology (BHU), Varanasi) 
	
	% prob_k -> Index of problem.
	% par.n  -> Dimension of the problem.
	% par.g  -> Number of inequility constraints.
	% par.h  -> Number of equality constraints.
	% par.xmin -> lower bound of decision variables.
	% par.xmax -> upper bound of decision variables.
	
	
	D        = [9	11	7	6	9	38	48	2	3	3	7	7	5	10	7	14	3	4	4	2	5	9	5	7	4	22	10	10	4	3	4	5	...
	            30	118	153	158	126	126	126	76	74	86	86	30	25	25	25	30	30	30	59	59	59	59	64	64	64];
	par.n    = D(prob_k);     
	gn       = [0,0,14,1,2,0,0,2,1,3,4,9,3,10,11,15,3,4,5,3,7,10,8,7,7,86,3,9,1,8,1,6,30,0,0,0,0,0,0,0,0,0,0,105,24,24,24,29,29,29,14,14,14,14,0,0,0];
	hn       = [8,9,0,4,4,32,38,0,1,0,4,0,0,0,0,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,1,0,0,108,148,148,116,116,116,76,74,76,76,0,1,1,1,1,1,1,1,1,1,1,6,6,6];
	par.gn    = gn;
	par.hn    = hn;
	par.g     = gn(prob_k);
	par.h     = hn(prob_k);
	%% range
	% bound constraint definitions for all 18 test functions
	xmin1    = [0,0,0,0,1000,0,100,100,100];
	xmax1    = [10,200,100,200,2000000,600,600,600,900];
	xmin2    = [10^4,10^4,10^4,0,0,0,100,100,100,100,100];
	xmax2    = [0.819*10^6, 1.131*10^6, 2.05*10^6,0.05074,0.05074,0.05074,200,300,300,300,400];
	xmin3    = [1000,0,2000,0,0,0,0];
	xmax3    = [2000,100,4000,100,100,20,200];
	xmin4    = [0,0,0,0,1e-5,1e-5];
	xmax4    = [1,1,1,1,16,16];
	xmin5    = -0*ones(1,par.n);
	xmax5    = [100,200,100,100,100,100,200,100,200];
	xmin6    = 0*ones(1,par.n);
	xmax6    = [90,150,90,150,90,90,150,90,90,90,150,150,90,90,150,90,150,90,150,90,1,1.2,1,1,1,0.5,1,1,0.5,0.5,0.5,1.2,0.5,1.2,1.2,0.5,1.2,1.2];
	xmin7    = -0*ones(1,par.n); xmin7([24,26,28,31]) = 0.849999;
	xmax7    = 1*ones(1,par.n); xmax7(4) = 140; xmax7([25,27,32,35,37,29]) = 30;xmax7([2,3,5,13,14,15]) = 90; xmax7([1,6,7,8,9,10,11,12,16,17,18,19,20]) = 35;
	xmin8    = [0,-0.51];
	xmax8    = [1.6,1.49];
	xmin9    = [0.5,0.5,-0.51];
	xmax9    = [1.4,1.4,1.49];
	xmin10   = [0.2, -2.22554, -0.51];
	xmax10   = [1, -1, 1.49];
	xmin11   = [0,0,0,0,-0.51,-0.51,0];
	xmax11   = [20,20,10,10,1.49,1.49,40];
	xmin12   = [0,0,0,-0.51,-0.51,-0.51,-0.51];
	xmax12   = [100,100,100,1.49,1.49,1.49,1.49]; 
	xmin13   = [27,27,27,77.51,32.51];
	xmax13   = [45,45,45,102.49,45.49];
	xmin14   = [ 0.51,0.51,0.51,250,250,250,6,4,40,10];
	xmax14   = [3.49,3.49,3.49,2500,2500,2500,20,16,700,450];
	xmin15   = [2.6, 0.7, 17, 7.3, 7.3, 2.9, 5];
	xmax15   = [3.6, 0.8, 28, 8.3, 8.3, 3.9, 5.5];
	xmin16   = 0.001*ones(1,par.n);
	xmax16   = +5*ones(1,par.n);
	xmin17   = [0.05,0.25,2.00];
	xmax17   = [2,1.3,15.0];
	xmin18   = [0.51,0.51,10,10];
	xmax18   = [99.49,99.49,200,200];
	xmin19   = [0.125,0.1,0.1,0.1];
	xmax19   = [2,10,10,2];
	xmin20   = 0*ones(1,par.n);
	xmax20   = 1*ones(1,par.n); 
	xmin21   = [60,90,1,0,2];
	xmax21   = [80,110,3,1000,9];
	xmin22   = [16.51,13.51,13.51,16.51,13.51,47.51,0.51,0.51,0.51];
	xmax22   = [96.49,54.49,51.49,46.49,51.49,124.49,3.49,6.49,6.49];
	xmin23   = [0,0,0,0,0];
	xmax23   = [60,60,90,90,90];
	xmin24   = [10,10,100,0,10,100,1];
	xmax24   = [150,150,200,50,150,300,3.14];
	xmin25   = [ 1, 1,  1e-6,1];
	xmax25   = [16, 16, 16*1e-6,16];
	xmin26   = [ 6.51.*ones(1,8), 0.51.*ones(1,14)];
	xmax26   = [ 76.49.*ones(1,8), 4.49.*ones(1,4), 9.49.*ones(1,10)];
	xmin27   = 0.645e-4*ones(1,par.n);
	xmax27   = 50e-4*ones(1,par.n); 
	xmin28   = [125,10.5,4,0.515,0.515,0.4,0.6,0.3,0.02,0.6];
	xmax28   = [150,31.5,50,0.6,0.6,0.5,0.7,0.4,0.1,0.85];
	xmin29   = [20,1,20,0.1];
	xmax29   = [50,10,50,60];
	xmin30   = [0.51,0.6,0.51];
	xmax30   = [70.49,3,42.49];
	xmin31   = 12.*ones(1,4);
	xmax31   = 60.*ones(1,4);
	xmin32   = [78,33,27,27,27];
	xmax32   = [102,45,45,45,45];
	xmin33   = 0.001.*ones(1,par.n);
	xmax33   = ones(1,par.n);
	xmin34   = -1*ones(1,par.n);
	xmax34   = +1*ones(1,par.n);
	xmin35   = -1*ones(1,par.n);
	xmax35   = +1*ones(1,par.n);
	xmin36   = -1*ones(1,par.n);
	xmax36   = +1*ones(1,par.n);
	xmin37   = -1*ones(1,par.n);xmin37(117:126) = 0;
	xmax37   = +1*ones(1,par.n);
	xmin38   = -1*ones(1,par.n);xmin38(117:126) = 0;
	xmax38   = +1*ones(1,par.n);
	xmin39   = -1*ones(1,par.n);xmin39(117:126) = 0;
	xmax39   = +1*ones(1,par.n);
	xmin40   = -1*ones(1,par.n);xmin40(75:76) = 0;
	xmax40   = +1*ones(1,par.n);xmax40(75:76) = 2;
	xmin41   = -1*ones(1,par.n);
	xmax41   = +1*ones(1,par.n);
	xmin42   = -1*ones(1,par.n);xmin42(75:76) = 0;xmin42(77:86) = 0;
	xmax42   = +1*ones(1,par.n);xmax42(75:76) = 2;xmax42(77:86) = 500;
	xmin43   = -1*ones(1,par.n);xmin43(75:76) = 0;xmin43(77:86) = 0;
	xmax43   = +1*ones(1,par.n);xmax43(75:76) = 2;xmax43(77:86) = 500;
	xmin44   = 40*ones(1,par.n);
	xmax44   = 1960*ones(1,par.n);
	xmin45   = -0*ones(1,par.n);
	xmax45   = +90*ones(1,par.n);
	xmin46   = -0*ones(1,par.n);
	xmax46   = +90*ones(1,par.n);
	xmin47   = -0*ones(1,par.n);
	xmax47   = +90*ones(1,par.n);
	xmin48   = -0*ones(1,par.n);
	xmax48   = +90*ones(1,par.n);
	xmin49   = -0*ones(1,par.n);
	xmax49   = +90*ones(1,par.n);
	xmin50   = -0*ones(1,par.n);
	xmax50   = +90*ones(1,par.n);
	xmin51   = 0.*ones(1,par.n);
	xmax51   = 10.*ones(1,par.n);
	xmin52   = 0.*ones(1,par.n);
	xmax52   = 10.*ones(1,par.n);
	xmin53   = 0.*ones(1,par.n);
	xmax53   = 10.*ones(1,par.n);
	xmin54   = 0.*ones(1,par.n);
	xmax54   = 10.*ones(1,par.n);
	xmin55   = 0.*ones(1,par.n);
	xmax55   = 10.*ones(1,par.n);
	xmin56   = 0.*ones(1,par.n);
	xmax56   = 10.*ones(1,par.n);
	xmin57   = 0.*ones(1,par.n);
	xmax57   = 10.*ones(1,par.n);
	
	eval(['par.xmin=xmin' int2str(prob_k) ';']);
	eval(['par.xmax=xmax' int2str(prob_k) ';' ]);
end