PlatEMO是由田野等学者共同开发的基于MATLAB多目标进化平台,主要优点:
包含了50种多目标优化算法,110个多目标优化问题。
显示了PlatEMO在一些具有3个目标的MOP的帕累托最优前沿上采样的参考点,而其他任何现有的EMO库都没有提供这样的参考点。
同时也跟现有的5个库进行对比
PlatEMO提供了多种不同类型的MOEA和MOPS,其中MOEA的类型包括遗传算法、差分算法、粒子群优化算法、模因算法、分布估计算法、代理辅助进化算法以及多目标、多目标、组合、大规模和昂贵的MOPS优化问题。
PlatEMO根目录下有六个文件夹和一个接口函数main.m。
PlatEMO也有一个简单的体系结构,它只涉及两个类,即全局类GLOBAL和个体类INDIVDUAL,用于存储所有参数并连接所有组件(例如MOEA、MOPS和操作符)。
所有算法函数的统一接口。
GLOBAL:表示所有的参数设置,包括MOEA函数算法的处理、MOP函数问题的处理、算子函数操作符的处理以及与环境有关的其他参数(种群大小、目标数量、决策变量的长度、适应度评估的最大次数等)。例如:方法Initialization()可以生成指定大小的随机初始种群,方法Variation()可以生成一组具有指定父代的子代。
INDIVDUAL:它的对象完全是MOEA中的个体,单个对象包含四个属性,即dec、obj、con和add,dec是单个对象的决策变量数组,是在实例化对象时分配的。obj和con分别存储在分配了dec之后计算的个体的目标值和约束值。属性add用于存储某些特殊操作符的个体的附加属性。
在没有图形用户界面的情况下,PlatEMO运行MOEA的顺序图。
PlatEMO 2.9的发行要点,添加一种用于约束优化的算法(即CMOEA-MS),一种用于大规模优化的算法(即DGEA),一种用于昂贵的优化的算法(即MESMO)和一种用于特征选择的算法(即DAEA)。该平台目前有122种算法。
下载地址:https://github.com/BIMK/PlatEMO
本人之前也上传到csdn上,需要直接访问即可https://download.csdn.net/download/qq_36317312/12889129
PlatEMO提供了两种运行方式:
通过调用main(‘name’,value,‘name’,value,…)直接运行指定算法、问题和设置
-algorithm. 要执行的MOEA的函数。
-problem. 待解决的MOP。
-N. MOEA的种群规模。注意,它被固定在某些MOEAs(例如moea .m)中的某些特定值上,因此这些MOEAs的实际种群大小可能并不完全等于这个参数。
-M. MOP的目标数目。注意,在不可伸缩的MOPs(例如ZDT1.m)中,目标的数量是恒定的,因此这个参数对于这些MOPs是无效的。
-D. MOP决策变量的个数。注意,在某些MOP中,决策变量的数量是常量或固定到某些特定整数上的(例如:ZDT5.m),因此决策变量的实际数量可能并不完全等于这个参数。
-evaluation. 函数评价的最大数目。
-run. 运行数。如果用户希望为相同的算法、问题、M和D参数保存多个结果,则在每次运行时修改此参数,使结果的文件名不同。
-save. 保存的种群。如果将该参数设置为0(默认值),则会在终止后显示结果图;否则,在进化过程中获得的种群将保存在一个名为的文件中Data\algorithm\algorithm_problem_M_D_run.mat。例如:如果save为5并且evaluation是20000,评价数量为4000、8000、12000、16000、20000时得到的种群将被保存。
-outputFcn. 每次生成后调用的函数,通常不需要修改。
注意,用户不需要分配所有参数,因为每个参数都有一个默认值。
下面就简单演示一下
选择的是NSGAII的算法+DTLZ2 的问题,种群大小为100,评价最大数目为10000
main('-algorithm',@NSGA-II,'-problem',@DTLZ2,'-N',100,'-evaluation',10000);
通过调用main()可运行图形界面
main()
测试模式:单个算法运行细节研究
实验模式:多个算法的批量性能对比
具体功能块:
PlatEMO测试模块界面如上图所示。各区域管制的职能如下:
Region A. 选择要执行的MOEA和MOP。
Region B.设置所选MOEA和MOP的参数。每个参数的值应该是一个标量。注意这里的公共参数N,M,D和evaluation都视为MOP的参数。如果将参数设置为空,则该参数将等于其默认值。
Region C.根据当前配置执行MOEA。
Region D.显示光标移动到的区域B中的参数的介绍。
Region E.显示优化过程中的当前种群。
Region F.放大,缩小,平移或旋转E区域的轴。
Region G.在新的标准MATLAB图中打开E区域的坐标轴,可以对坐标轴进行更多的操作,例如保存坐标轴。
Region H.选择要显示在E区域轴线上的数据,包含种群的pareto front,种群的pareto集合,MOP的真实pareto front和任何性能度量的收敛轮廓。
Region I.控制优化过程,即,开始,暂停,停止,后退和前进。
Region J.显示其中一个历史结果。
Region K.显示结果的最终种群的性能度量值。
Region L.显示执行的详细信息。
用户打开测试模块后,首先选择要在A区域执行的MOEA和MOP,并在B区域设置参数,然后按下区域C按钮执行算法。实时种群将显示在E区域的轴线上,用户可以使用I区域的按钮来控制优化过程。算法结束后,通过选择J区域的弹出菜单,可以重新显示所有的历史结果。
PlatEMO实验模块界面如上图所示。各区域管制的职能如下:
Region A. 选择要执行的MOEA和MOP。
Region B.设置所选MOEA和MOP的参数。MOPs里的每个参数的值都可以是一个向量。因此,MOEAs可以在相同的MOP上以不同的设置执行。
Region C.设置每个文件中保存的种群数量。例如,如果种群大小为5,评估的数量为20000,评价数量为4000,8000,12000,16000和20000时的种群被保存。
Region D.设置每个MOP上每个MOEA的运行次数。
Region E.设置保存实验设置的文件路径。用户还可以打开现有的配置文件来加载实验设置。所有结果都将保存在文件路径的同一文件夹中。
Region F.按顺序或并行执行实验。
Region G.显示实验的统计结果。
Region H.指定表中显示的数据类型。
Region I.将表格保存为Excel或LaTeX格式。
Region J.选择表中显示的数据,包括最终总体的任何性能度量值。
Region K.控制优化过程,即,开始,暂停,停止。
Region L.右键单击一个单元格,以显示种群的Pareto front,种群的pareto集合,或度量值的收敛轮廓。
用户打开实验模块,首先选择在区域A中执行的MOEAs和MOPs,并在区域B中设置它们的参数,在区域C中设置保存的种群数量,在区域D中设置运行的数量。选择需要对比的算法以及问题,最后运行结果可以显示出来,实验结束后,按下I区按钮,可以将表中数据以Excel或LaTeX格式保存。
PlatEMO的扩展主要是允许用户在其中添加自己的MOEA、MOP、Operators and Performance indicators.
用户只需按照PlatEMO的要求对其算法的matlab函数的输入和输出稍作修改,并将该函数(.m文件)放在根目录的\Algorithms文件夹中。
可以根据NSGAII主函数源代码的案例研究,来看一下
MOEA的主函数有一个输入参数和零个输出参数,其中唯一的输入参数表示当前运行的全局对象。然后,通过调用Global.Initialization()生成初始种群,并计算每个个体的非支配前沿数和拥挤距离(第2-4行)。在每一代中,都会调用函数Global.NotT ermination()来检查是否满足终止条件,并将变量Population传递给该函数作为最终输出(第5行)。然后,依次执行交配池选择、后代生成和环境选择(第6-9行)。
除了函数的接口,MOEA至少需要执行以下三个操作:通过Global.Initialization()获取初始种群,通过Global.NotT remination()检查优化状态并输出最终种群,通过Global.Variation()生成后代,其中所有这三个函数都由全局对象提供。
MOP函数的所有.m文件都存储在\Problems文件夹中,将算法放在根目录下。
选择了DTLZ2的源代码,其中任何MOP所需的公共代码都带有下划线
NSGAII的函数DTLZ2()包含3个输入参数和1个输出参数。输入参数Operation决定要执行的操作;Global参数表示全局对象;当Operation设置为不同的值时,参数Input有不同的含义,输出参数varargout也有不同的含义。与每次运行中只调用一次的MOEA函数不同,MOP函数可以针对不同的操作调用多次。
MOP函数包含三个独立的操作:生成随机决策变量(第3-10行),计算目标值和约束值(第11-23行),以及对真正的帕累托前沿上的参考点进行采样(第24-27行)。
基于二进制编码的进化运算符的源代码(即EAbinary.m),其中运算符函数的.m文件都存储在文件夹\Operators中。运算符函数有两个输入参数,一个表示全局对象(即全局),另一个表示父代群体(即父代),它还有一个输出参数表示生成的子代(即子代)。
源代码可以看出,操作符函数的主要任务是根据Parent的值生成子代,其中EAbinary()执行代码第6-11行的单点交叉和第12-13行的逐位变异。然后,生成并返回子代的各个对象(第14行)。
显示了IGD的源代码,其中所有这些性能指标函数都存储在文件夹\Metrics中。
IGD()的输入参数由两部分组成:总体的目标值(即PopObj)和在真实Pareto前沿上采样的参考点(即Pf)。
可以使用MATLAB提供的内置函数pDist2()来计算PF中的每个点到PopObj中的点的最小距离的平均值。
这就是PlatEMO平台的大致内容,后期我也会结合自己方向更新一篇关于拓展功能部分,主要是将一些实际应用问题来用多目标优化算法来解决,同时将算法和问题添加到PlatEMO平台中。
非常感谢晓风wangchao的博客,给了我很大的帮助,同时也参考了一些内容,有兴趣大家也可以看一下https://blog.csdn.net/qq_40434430/article/details/88366639
最后看了这篇文章:[1]: Ye Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, “PlatEMO: A MATLAB platform for evolutionary multi‐objective optimization [educational forum],” IEEE Computational Intelligence Magazine, 2017, 12(4): 73‐87.
已经上传:https://download.csdn.net/download/qq_36317312/13492629
中文用户手册已经上传:https://download.csdn.net/download/qq_36317312/15580717
PlatEMO3.0文件资源:https://download.csdn.net/download/qq_36317312/15580736
有需要的小伙伴,也可以访问BIMK实验室的github链接:https://github.com/BIMK/PlatEMO