一、TrMOPSO介绍
基于迁移学习的动态多目标粒子群优化算法(Transfer Learning based Dynamic Multiobjective particle swarm optimization,TrMOPSO)是一种经典的动态多目标进化算法。
算法概述
- 算法组合 :将迁移学习技术与多目标粒子群优化算法相结合,旨在解决动态多目标优化问题。
- 软件架构 :基于 Tr-DMOEA 框架,通过调用 Tr-IPG 模块来生成初始种群,进而利用 MOPSO 算法进行优化操作。
算法流程
初始化 :在优化过程开始时,对粒子群进行初始化操作,随机生成粒子的位置和速度,并计算每个粒子的适应度值。
个体最优位置更新 :每个粒子根据自身的适应度值,更新个体最优位置(pbest),即将当前适应度值与历史个体最优位置的适应度值进行比较,若更优则将其作为新的个体最优位置。
全局最优位置更新 :在粒子群中选择适应度值最优的粒子的位置作为全局最优位置(gbest),该位置代表着当前粒子群搜索到的最优解的位置。
粒子速度和位置更新 :根据粒子群优化算法的速度和位置更新公式,调整粒子的速度和位置,公式如下:
- 速度更新公式: v i t + 1 = w ∗ v i t + c 1 ∗ r a n d ( ) ∗ ( p b e s t i − x i t ) + c 2 ∗ r a n d ( ) ∗ ( g b e s t − x i t ) v_{i}^{t+1}=w*v_{i}^{t}+c_{1}*rand()*(pbest_{i}-x_{i}^{t})+c_{2}*rand()*(gbest-x_{i}^{t}) vit+1=w∗vit+c1∗rand()∗(pbesti−xit)+c2∗rand()∗(gbest−xit)
- 位置更新公式: x i t + 1 = x i t + v i t + 1 x_{i}^{t+1}=x_{i}^{t}+v_{i}^{t+1} xit+1=xit+vit+1
适应度值更新 :根据新的位置信息,计算每个粒子的适应度值,为后续的个体最优位置和全局最优位置的更新做准备。
终止条件判断 :判断是否满足终止条件,如达到最大迭代次数或适应度值收敛要求。若满足终止条件,则输出当前的全局最优位置作为优化结果;否则,返回步骤 2,继续进行迭代优化。
关键点解析
迁移学习原理 :通过领域自适应方法(如 TCA),将历史环境下的 Pareto 最优前沿(POF)映射到新环境下的潜在空间,使得不同环境下的解的概率分布差异尽可能小,从而在新环境下快速生成具有较高质量的初始种群,加速粒子群的收敛过程。
种群初始化 :利用 Tr-IPG 模块,基于迁移学习生成初始种群。其主要过程是先随机生成当前优化函数和下一时刻优化函数的两组解,再通过 TCA 方法计算得到变换矩阵,将当前时刻的 POF 映射到潜在空间,最后在潜在空间中搜索与映射后的 POF 最近的个体,作为下一时刻优化函数的初始种群。
多样性和收敛性平衡 :在动态多目标优化过程中,需要在多样性和收敛性之间进行平衡。TrMOPSO 算法通过调整粒子群中的个体最优位置和全局最优位置来影响粒子的搜索行为,同时利用迁移学习生成的初始种群具有较高的多样性,有利于算法在动态环境中快速适应和收敛。
与其他算法比较
- 与传统 MOPSO 算法比较 :传统的 MOPSO 算法在处理动态多目标优化问题时,往往需要重新初始化种群,难以充分利用历史信息,收敛速度较慢,且在环境变化时容易陷入局部最优。而 TrMOPSO 算法通过迁移学习技术,能够有效地利用历史环境下的 POF 信息,快速生成适应新环境的初始种群,提高了算法的收敛速度和解的质量。
- 与 Tr-NSGA-II 算法比较 :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
三、TrMOPSO求解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 = TrMOPSO(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
部分结果
环境变量: n t n_t nt =10, τ t τ_t τt =10