一、CEC2015简介
现实世界中,许多优化问题不仅具有多属性,而且与时间相关,即随着时间的变化,优化问题本身也发生改变,这类问题称为动态多目标优化问题(dynamic multi-objective optimization problems,DMOP)。DMOP是一类目标之间相互冲突,目标函数、约束函数和相关参数等可能随着时间的变化而改变的多目标优化问题。cec2015共包含12个测试函数,分别是FDA4、FDA5、FDA5iso、FDA5dec、DIMP2、dMOP2、dMOP2_iso、dMOP2_dec、dMOP3、 HE2、HE7和HE9。其中前四个测试函数目标数为3,其余目标数为2。
cec2015详细信息如下:CEC2015
二、狮群优化算法LSO
三、动态多目标狮群优化算法DMOLSO求解CEC2015
动态多目标狮群优化算法(Dynamic Multi-objective Lion Swarm Optimization,DMOLSO)的种群大小设置为300,外部存档大小为500,以dMOP2_iso为例,当取第4组参数设置时,即环境变化程度、环境变化频率 和最大迭代次数分别为10/50/1000,其代码如下:(代码中更改TestProblem以此选择不同测试函数1-12,更改group选择不同参数设置1-8,相对于共有96种情形可供选择)
close all;
clear ;
clc;
warning off
%% cec2015 参考文献
%[1]M Helbig, AP Engelbrecht. Benchmark Functions for CEC 2015 Special Session and Competition on Dynamic Multi-objective Optimization.
%% 动态多目标狮群优化算法(Dynamic Multi-objective Lion Swarm Optimization,DMOLSO)
TestProblem=7;%选择测试函数1-12(可以自己修改)
group=1;%选择参数1-8 (可以自己修改)
MultiObj = GetFunInfoCec2015(TestProblem);%获取测试问题维度、目标函数、上下限、目标个数等信息
MultiObj.name=GetFunPlotName(TestProblem);%获取测试问题名称
paramiter=GetFunParamiter(group);%获取参数nt taut maxgen
% 参数设置
params.Np = 100; %Np 种群大小 (可以自己修改)
params.Nr = 200; %Nr 外部存档大小 (可以自己修改) 注意:外部存档大小Nr不能小于种群大小Np
params.nt=paramiter(1); % nt 环境变化程度
params.taut=paramiter(2);% taut 环境变化频率
params.maxgen=paramiter(3);%maxgen 最大迭代次数
%% 动态多目标狮群优化算法DMOLSO求解,结果为Result
Result = DMOLSO(params,MultiObj);
%% 获取真实的POF
for gen=1:params.maxgen
if rem(gen+1,params.taut)==0
POF_Banchmark = getBenchmarkPOF(TestProblem,group,gen);
k=(gen+1)/params.taut;
Result(k).TruePOF=POF_Banchmark;
end
end
%% 计算GD IGD HV Spacing
for k=1:size(Result,2)
Result(k).GD=GD(Result(k).PF,Result(k).TruePOF);
Result(k).IGD=IGD(Result(k).PF,Result(k).TruePOF);
Result(k).HV=HV(Result(k).PF,Result(k).TruePOF);
Result(k).Spacing=Spacing(Result(k).PF);%计算性能指标SP
end
%% 保存结果
save Result Result %保存结果
disp('Repository fitness values are stored in Result.PF');
disp('Repository particles positions are store in Result.PS');
部分结果:
四、完整代码
文件夹内包含动态多目标狮群优化算法求解cec2015的完整MATLAB代码,并提供所有问题真实POF,同时提供GD、IGD、HV和SP评价指标,点击main.m即可运行。