动态多目标进化算法:基于迁移学习的动态多目标遗传算法Tr-NSGA-II求解CEC2015,提供完整MATLAB代码
一、Tr-NSGA-II介绍
基于迁移学习的动态多目标遗传算法(Transfer Learning based Dynamic Multiobjective non-dominated sorting genetic algorithm II ,Tr-NSGA-II)是一种将迁移学习与非支配排序遗传算法(NSGA-II)相结合的优化算法,用于解决动态多目标优化问题。
工作原理
- 迁移学习的应用 :Tr-NSGA-II 利用迁移学习技术,将历史优化过程中积累的知识和经验应用到新的动态环境中。当环境发生变化时,算法通过迁移学习方法,将之前环境下的 Pareto 最优前沿(POF)映射到新环境的潜在空间,生成一个初始种群池。这个初始种群池能够快速引导算法向新的 POF 靠近,减少了从随机初始种群开始搜索所需的时间和计算资源。
- NSGA-II 的优化机制 :NSGA-II 是一种基于精英策略的多目标遗传算法。它通过非支配排序、拥挤距离计算和精英保留策略来保持种群的多样性和收敛性,从而有效地探索和维护帕累托前沿。
算法步骤
- 初始化种群 :随机生成一个初始种群,并对其进行评估,计算每个个体的目标函数值。
- 非支配排序 :根据个体之间的支配关系,将种群划分为不同的非支配层级。非支配层级越低,个体的优先级越高。
- 计算拥挤距离 :在每个非支配层级中,计算个体的拥挤距离,以衡量个体在目标空间中的分布密度。拥挤距离较大的个体具有更高的多样性。
- 选择操作 :基于非支配排序和拥挤距离,选择个体进入繁殖池。较高非支配层级和较大拥挤距离的个体更有可能被选中。
- 交叉和变异操作 :对繁殖池中的个体进行交叉和变异操作,产生新的子代个体。这些操作模拟生物遗传过程中的杂交和突变,为种群引入新的遗传多样性。
- 环境变化检测与处理 :在动态多目标优化问题中,需要实时检测环境变化。当检测到环境发生变化时,利用迁移学习方法生成初始种群池,并将其与当前种群结合,形成新的种群。
- 种群更新 :将父代种群和子代种群合并,进行非支配排序和拥挤距离计算,然后根据种群大小选择个体形成新一代种群。
- 终止条件判断 :判断是否满足终止条件,如达到最大迭代次数或满足收敛条件。如果满足终止条件,则输出最终的 Pareto 最优解集;否则,返回步骤 2 继续迭代。
- 输出结果 :输出最终的 Pareto 最优解集,为决策者提供一组权衡不同目标的非劣解。
关键点解析
-
迁移学习原理 :通过领域自适应方法(如 TCA),将历史环境下的 Pareto 最优前沿(POF)映射到新环境下的潜在空间,使得不同环境下的解的概率分布差异尽可能小,从而在新环境下快速生成具有较高质量的初始种群,加速粒子群的收敛过程。
-
种群初始化 :利用 Tr-IPG 模块,基于迁移学习生成初始种群。其主要过程是先随机生成当前优化函数和下一时刻优化函数的两组解,再通过 TCA 方法计算得到变换矩阵,将当前时刻的 POF 映射到潜在空间,最后在潜在空间中搜索与映射后的 POF 最近的个体,作为下一时刻优化函数的初始种群。
-
快速适应环境变化 :通过迁移学习,在环境变化时能够快速生成高质量的初始种群,减少算法重新收敛所需的时间和计算资源。
-
保持种群多样性 :结合 NSGA-II 的非支配排序和拥挤距离计算机制,能够在动态环境下维持种群的多样性,避免早熟收敛问题。
-
高效的优化能力 :继承了 NSGA-II 的高效优化能力,能够在多目标优化问题中找到一组高质量的 Pareto 最优解。
Tr-NSGA-II 算法是基于遗传算法的动态多目标优化算法,而 TrMOPSO 算法是基于粒子群优化算法的动态多目标优化算法。这两种算法在优化原理和搜索机制上存在差异,但都通过迁移学习技术有效地提高了算法在动态环境下的性能。一般来说,TrMOPSO 算法在处理动态多目标优化问题时,具有更快的收敛速度和更高的多样性保持能力,而 Tr-NSGA-II 算法则在处理复杂约束条件和多模态优化问题方面表现较好。
参考文献:
[1] Jiang M , Huang Z , Qiu L ,et al.Transfer Learning-Based Dynamic Multiobjective Optimization Algorithms[J].IEEE Transactions on Evolutionary Computation, 2017.DOI:10.1109/TEVC.2017.2771451.
二、动态多目标测试集CEC2015
CEC2015 中共有12个动态多目标测试函数用于评估和比较动态多目标优化算法的性能。这些函数具有不同的特性和动态变化机制,能够模拟现实世界中的动态多目标优化问题。
测试函数分类
- Type I :FDA4、DIMP2、dMOP3。这类函数的动态性主要表现在 Pareto 最优解集(POS)的变化,而 Pareto 最优前沿(POF)的形状保持不变。
- Type II :FDA5、FDA5iso、FDA5dec、dMOP2、dMOP2iso、dMOP2dec。这类函数的 POF 和 POS 都会随时间变化,且 POF 的形状也会发生改变,如从凸变为凹或反之。
- Type III :HE2、HE7、HE9。这类函数的 POF 具有不连续性或复杂的变化特性,如 HE2 的 POF 不连续,HE7 和 HE9 的 POF 会周期性地在凸和凹之间变化。
具体测试函数及其特性
- FDA4 :3 个目标函数,非凸 POF,呈球面形状,POF 表达式为 f₂₁ + f₂₂ + f₂₃ = 1。其动态性体现在 POS 随时间变化,POS 为 xi = G(t),其中 G(t) = |sin(0.5πt)|。
- FDA5 :3 个目标函数,非凸 POF,POF 的形状随时间变化,其半径呈周期性增减,POF 表达式为 f₂₁ + f₂₂ + f₂₃ = (1 + G(t))²。POS 同样为 xi = G(t)。
- FDA5iso :3 个目标函数,孤立的非凸 POF,其动态性与 FDA5 类似,但 POF 上的解分布随时间变化。
- FDA5dec :3 个目标函数,具有欺骗性的非凸 POF,动态特性与 FDA5 相同。
- DIMP2 :2 个目标函数,凸 POF,表达式为 1 - √f₁。每个决策变量都有自己的变化率,POS 为 xi = G(t)。
- dMOP2 :2 个目标函数,POF 会随时间在凸和凹之间变化,表达式为 1 - f₁^{H(t)}。其动态性通过参数 H(t) 和 G(t) 实现,H(t) = 0.75 sin(0.5πt) + 1.25,G(t) = sin(0.5πt)。
- dMOP2iso :2 个目标函数,孤立的 POF,其动态变化特性与 dMOP2 相同。
- dMOP2dec :2 个目标函数,具有欺骗性的 POF,动态特性与 dMOP2 一致。
- dMOP3 :2 个目标函数,凸 POF,表达式为 1 - √f₁。其动态性体现在 POF 上解的分布随时间变化。
- HE2 :2 个目标函数,不连续的 POF,由多个不连续的子区域组成。其动态性通过参数 H(t) 实现,POF 表达式为 1 - (√f₁)^{H(t)} - f₁^{H(t)} sin(0.5πf₁),POS 为 xi = 0。
- HE7 :2 个目标函数,POF 呈周期性变化,在凸和凹之间交替。其 POS 和 POF 的表达式较为复杂,涉及多个三角函数和非线性变换。
- HE9 :2 个目标函数,POF 同样呈周期性变化,形状在凸和凹之间转换。其 POS 和 POF 的表达式与 HE7 类似,但具体形式略有不同。
参考文献:
[1]M. Helbig and A. Engelbrecht. Benchmark functions for cec 2015 special session and competition on dynamic multi-objective optimization.Technical report, 2015
三、Tr-NSGA-II求解CEC2015
部分代码
close all;
clear ;
clc;
warning off
TestProblem=1;%选择测试函数1-12(可以自己修改)
group=1;%选择参数1-8 (可以自己修改)
MultiObj = GetFunInfoCec2015(TestProblem);%获取测试问题维度、目标函数、上下限、目标个数等信息
MultiObj.name=GetFunPlotName(TestProblem);%获取测试问题名称
paramiter=GetFunParamiter(group);%获取参数nt taut maxgen
% 参数设置
params.Np = 300; %Np 种群大小 (可以自己修改)
params.Nr = 500; %Nr 外部存档大小 (可以自己修改) 注意:外部存档大小Nr不能小于种群大小Np
params.nt=paramiter(1); % nt 环境变化程度
params.taut=paramiter(2);% taut 环境变化频率
params.maxgen=paramiter(3);%maxgen 最大迭代次数Result = Tr-NSGA-II(params,MultiObj);%% 获取真实的POF
for gen=1:params.maxgenif rem(gen+1,params.taut)==0POF_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
部分结果
环境变量: n t n_t nt =10, τ t τ_t τt =10