写在开始

目前EDOLAB已在Github中开源,如果对您有帮助,请为我们点亮Star。论文在arXiv上发表,同时已投稿至期刊ACM Transactions on Mathematical Software

  现实生活中的很多优化问题具有动态特征,这类优化问题称为动态优化问题(DOPs)。传统的静态优化算法难以适应这些环境的变化,动态优化算法(EDOAs)专为解决这类问题而设计,有许多的研究者投入动态优化方向进行研究,产生了大量优质的EDOAs,促进了研究方向的不断突破。但在当下,当研究者开始研究自己的EDOA,并准备对比其他算法时,就会发现并没有一个统一的实验平台对以往的EDOAs进行管理,且很多EDOA的源码并未公开,研究者通常需要自行编写算法与测试问题的代码,这导致了几个问题:

  • 即便是算法的细微实现差异都会导致显著的性能差异,例如,在复杂的动态优化算法中,一个微小的代码修改可能会影响算法的收敛速度或在不同环境下的适应性​。
  • 一些研究可能使用相同的动态基准生成器(如Moving Peaks Benchmark),但对基准生成器的参数配置存在差异(如随机数生成器、初始峰值配置等),这些设置会直接影响问题的难度。因此,不同研究在性能比较时,如果未采用一致的参数配置,会导致不公平的对比结果。
  • 在动态优化问题中,算法的性能通常通过不同的指标来衡量,如离线误差($E_o$)和环境变化前最好误差($E_{bbc}$)。然而,不同研究对这些指标的计算方式可能存在差异,导致结果的不可比性。
  • 部分EDOA实现中使用了问题的内部参数(如峰值位置的变化幅度或环境变化频率)来辅助算法的自适应,这在一定程度上给该算法带来不公平优势。公平的实验应将问题实例视为“黑箱”,不依赖问题的内部信息,以保证对所有算法的一致性。

  为了支持研究者们在动态优化领域进行公平公正的算法性能测试,我和Danial Yazdani还有一些其他的伙伴从2021年开始,着手开发了一个MATLAB开源平台——EDOLAB。为了解决上述不公平的问题,EDOLAB采用了模块化的设计,所有算法在一致的框架下实现,并使用标准化的基准生成器和性能指标进行评价,以确保公平和可重复的实验环境,以便研究者能够轻松地在不同动态优化算法之间进行比较和实验,同时EDOLAB包含教育模块,能够让研究者方便给自己的受众展示算法的详细行为。

EDOLAB的构成

  EDOLAB是一个主要面向进化动态优化算法(Evolutionary Dynamic Optimization Algorithms, EDOAs)的平台,提供了丰富的工具和资源。它包含了25种不同的EDOAs以及4个Benchmark,便于研究者进行算法实验、分析和可视化。EDOLAB可以让用户在不同的动态环境中进行实验,从而帮助理解算法在环境变化时的响应能力和适应性。

丰富的算法库

  25种不同的EDOAs如下所示:

算法参考文献优化组件种群结构子种群数量种群大小种群聚类方式
ACFPSOref 1PSO多种群自适应自适应按索引
AMPDEref 2DE多种群自适应自适应按位置
AMPPSOref 2PSO多种群自适应自适应按位置
AmQSOref 3PSO多种群自适应自适应按索引
AMSOref 4PSO多种群自适应自适应按位置
CDEref 5DE/best/2/bin多种群固定固定按索引
CESOref 6DE/rand/1/exp 和 PSO双种群固定固定N/A
CPSOref 7PSO多种群自适应固定按位置
CPSORref 7PSO多种群自适应固定按位置
DSPSOref 9PSO多种群自适应固定按位置和适应度
DynDEref 10DE/best/2/bin多种群固定固定按索引
DynPopDEref 11DE/best/2/bin多种群自适应自适应按索引
FTMPSOref 12PSO多种群自适应自适应按索引
HmSOref 13PSO多种群固定固定按索引
IDSPSOref 14PSO多种群自适应固定按位置和适应度
ImQSOref 15PSO多种群固定固定按索引
mCMA-ESref 16CMA-ES多种群自适应自适应按索引
mDEref 16DE/best/2/bin多种群自适应自适应按索引
mjDEref 16jDE多种群自适应自适应按索引
mPSOref 16PSO多种群自适应自适应按索引
mQSOref 17PSO多种群固定固定按索引
psfNBCref 18PSO多种群自适应固定按位置和适应度
RPSOref 19PSO单种群固定固定N/A
SPSOAD+APref 20PSO多种群自适应自适应按位置和适应度
TMIPSOref 21PSO双种群固定固定N/A

丰富的问题库

  4个Benchmark包含:Moving Peaks Benchmark(MPB)$^{[22]}$、Generalized Dynamic Benchmark Generator(GDBG)$^{[23]}$、Free Peaks([FPs])$^{24}$以及Generalized Moving Peaks Benchmark(GMPB)$^{[25]}$。


  四个Benchmark的适应度地形图如下所示:

Benchmark:左上(MPB),右上(GDBG),左下(FPs),右下(GMPB)

可视化教育模块

  EDOLAB的教育模块是专为教育目的设计的,尤其适合新研究者。通过该模块,可以观察到:

  • 二维问题空间的变化
  • 个体随时间的迁移和变化轨迹
  • 算法如何应对环境变化并追踪移动的最优解

灵活的实验模块

  EDOLAB允许用户通过GUI界面或脚本模式运行实验,为研究者提供了极大的灵活性。研究者可以使用平台内置的算法和问题,也可以将新算法、性能指标和问题添加到平台中,进行实验和性能评估。

  EDOLAB包含两个性能评价指标:离线误差($E_o$)和变化前最好误差($E_{bbc}$)。

  • $E_o$ (Offline Error):指的是离线误差,衡量的是在动态优化问题(DOP)中算法在整个过程中的平均误差。通常通过多次运行后计算其均值、标准差以及中位数,以综合评估算法在动态环境中适应变化的性能。计算公式如下,其中$\hat{e}$是环境总数,$u$是变化频率,$\boldsymbol{x}_e^{\star}$ 是第 $e$ 个环境中的最优位置,$\boldsymbol{x}_{e}^{*{((e-1)u+b)}}$ 是第 $e$ 环境中第 $b$ 个适应度评估中找到的最优解。

$$ E_o=\frac{1}{\hat{e} u} \sum_{e=1}^{\hat{e}} \sum_{b=1}^{u}\left(f_e\left(\boldsymbol{x}_e^{\star}\right)-f_e\left(\boldsymbol{x}_{e}^{*{((e-1)u+b)}}\right)\right) $$

  • $E_{bbc}$ (Average Error Before Environmental Changes):指的是环境变化之前的平均误差,即在每次环境改变之前的误差值的平均。这个指标反映了算法在稳定阶段(环境不变时)的适应性表现,同样计算其均值、标准差和中位数来评估算法的稳定性。计算公式如下,其中 $\boldsymbol{x}_{e}^{*}$ 是在第 $e$ 个环境中找到的最优解。

$$ E_{bbc}=\frac{1}{\hat{e}} \sum_{e=1}^{\hat{e}}\left(f_e\left(\boldsymbol{x}_e^{\star}\right)-f_e\left(\boldsymbol{x}_{e}^{*}\right)\right) $$

EDOLAB的使用

  EDOLAB支持图形用户界面(GUI)和命令(非GUI)模式,方便研究者根据需要选择适合的操作方式,EDOLAB运行的数据流图如下所示。
EDOLAB运行数据流图

GUI模式

  在GUI模式下,用户可以选择实验模式与教育模式,用户可以在界面中选择特定的算法和基准测试,并设置参数(如维度、环境变化频率、变化幅度、环境数量等),然后运行。这一模块旨在为用户提供易于配置和操作的实验环境,便于快速进行算法测试和性能评估。

实验模式

  • 在EDOLAB根目录中执行 GUI.MLAPPRunWithGUI.m
  • 选择实验(Experiment)标签
  • 选择一个算法和基准测试
  • 设置参数:[维度、目标区域数量、变化频率、变化幅度、环境数量、运行次数]
  • 运行实例

实验模式

教育模式

  • 在EDOLAB根目录中执行 GUI.MLAPPRunWithGUI.m
  • 选择教育(Educational)标签
  • 选择一个算法和基准测试
  • 设置参数:[目标区域数量、变化频率、变化幅度、环境数量] 请注意,教育模块用于教育展示,因此维度固定为2
  • 运行实例

教育模式

非GUI模式

  对于更高级的用户,EDOLAB提供了非GUI模式,只需在MATLAB中打开并编辑RunWithoutGUI.m文件,用户可以手动设置算法名称、基准名称以及相应的参数(如峰值数量、环境数量等),然后直接运行实验。该模式允许用户灵活控制算法的输入输出,便于更精细的实验控制和结果分析。

  • 在EDOLAB根目录中打开RunWithoutGUI.m
  • 设置算法名称(AlgorithmName)与问题名称(BenchmarkName)
%% ********Selecting Algorithm & Benchmark********
AlgorithmName = 'psfNBC';    %Please input the name of algorithm (EADO) you want to run here (names are case sensitive).
%  The list of algorithms (EADOs) and some of their details can be found in Table 1 of the EDOLAB's paper.
%  The current version of EDOLAB includes the following algorithms (EADOs):
%  'ACFPSO', 'AMPDE', 'AMPPSO', 'AmQSO', 'AMSO', 'CDE', 'CESO', 'CPSO', 'CPSOR' 
%  'DSPSO', 'DynDE', 'DynPopDE', 'FTMPSO', 'HmSO',  'IDSPSO', 'ImQSO' 
%  'mCMAES', 'mDE', 'mjDE', 'mQSO' , 'SPSO_AD_AP', 'psfNBC', 'RPSO', 'TMIPSO'
BenchmarkName = 'GMPB';     %Please input the name of benchmark you want to use here (names are case sensitive).
%  The current version of EDOLAB includes the following benchmark generators: 'MPB' , 'GMPB' , 'FPs' , 'GDBG'
  • 设置问题参数
%% ********Benchmark parameters and Run number********
PeakNumber                     = 10;  %The default value is 10
ChangeFrequency                = 5000;%The default value is 5000
Dimension                      = 5;   %The default value is 5. It must be set to 2 for using Education     module
ShiftSeverity                  = 1;   %The default value is 1
EnvironmentNumber              = 100;  %The default value is 100
RunNumber                      = 31;   %It should be set to 31
  • 算法参数需要在用户定义的算法目录中进行设置
  • 设置是否进行优化实时可视化
% For experimention module
VisualizationOverOptimization = 0
% For education module
VisualizationOverOptimization = 1
  • 如果 VisualizationOverOptimization == 0,实验模块将被激活,用户可以配置是否进行画图、生成Excel结果表
% No need for plot
OutputFigure = 0
% Requires offline and current error plots as visualized outputs of the experiment
OutputFigure = 1

% No need for excel output
GeneratingExcelFile = 0
% Requires an excel file containing output statistics and results
GeneratingExcelFile = 1


  输出的Excel结果表具有较强的可读性,可以为用户提供详细的实验信息。
实验结果输出至Excel中

EDOLAB的扩展

  EDOLAB的架构设计具有很强的可扩展性,使得研究人员可以根据自己的研究需求轻松添加新的算法、基准生成器和性能指标。这种模块化设计为研究人员提供了高度的实验灵活性,并促进了新技术和方法的快速集成和测试。

添加基准生成器

  若要添加新的基准生成器,用户需在Benchmark文件夹下创建一个新子文件夹,并命名为新的基准名称。接着,在此子文件夹中创建包含基准函数的_fitness_ABC.m_文件和生成基准实例的BenchmarkGenerator_ABC.m文件。用户需要在生成器中定义所有参数,并通过结构体Problem初始化所有环境参数。
添加Benchmark

添加性能指标

  用户可以通过在fitness.m文件中添加所需的代码收集信息,并将代码集成到EDOA的性能指标计算部分中,以便于在主函数中直接计算自定义的性能指标。此功能极大地支持算法的自定义和结果分析。

添加新的EDOA

  如果需要添加新的EDOA,可以在Algorithm文件夹中创建一个与算法名称相同的子文件夹,并将新算法的所有函数文件放置在该文件夹内。为了在EDOLAB中调用该算法,用户需在主目录下编辑RunWithoutGUI.m文件,并在算法主函数中调用BenchmarkGenerator.m生成问题实例。此步骤使得新算法可以无缝集成到EDOLAB中进行实验。

写在结尾

  EDOLAB论文发表在期刊TOMS上,目前正在二审中,同时平台也正在不断的扩充功能,如果您觉得EDOLAB对您有帮助,请前往Github仓库为我们点亮Star。

最后修改:2024 年 11 月 04 日
如果觉得我的文章对你有用,请随意赞赏