PlatEMO平台的使用与源代码修改(1)

尊重算法框架开发者的工作

platEMO是Ye Tian等学者写的一款基于MATLAB的多目标优化工具,为新入门的同学或者开发者提供了很大的便利。各位同学在使用中应尊重分享者的工作,保护他人的权利。在此感谢PlatEMO开发者的分享!!!

修改目的

PlatEMO提供的图 我们想要的图

假如我们想将多个算法的IGD指标放到一张图中进行比较,这时就需要将算法计算的IGD、HV数值保存。但是PlatEMO只提供了图像,没有办法得到原始绘图的数据,这时候我们只能选择修改源码了。

修改方法

  1. 修改Public/GLOBAL.m文件中的下列代码
function value = Metric(metric,Population,PF)
            % Calculate the metric value of the population
            Feasible     = find(all(Population.cons<=0,2));
            NonDominated = NDSort(Population(Feasible).objs,1) == 1;
            try
                value = metric(Population(Feasible(NonDominated)).objs,PF); % 将此处的分号删除就可以在命令行中打印IGD等指标数值
            catch
                value = NaN;
            end
        end
  1. 执行多个算法
main(-algorithm,@MOPSO,-problem,@DTLZ2,-N,100,-M,3,-run,10)

main(-algorithm,@NSGAII,-problem,@DTLZ2,-N,100,-M,3,-run,10)
  1. 创建新的MATLAB脚本,录入控制台输出的IGD值,拼凑图像即可。
t=1:1:10;
% 将从控制台得到的IGD等数值存入数据即可,简单而又朴实
mopso=[0.1597, 0.1210, 0.0997, 0.0963, 0.0955, 0.094, 0.0925, 0.1053, 0.0985, 0.1133];
nsgaII=[0.1962, 0.1045, 0.083, 0.0724, 0.0771, 0.0716, 0.0674, 0.068, 0.0668, 0.0694];
plot(t,mopso,-o,t,nsgaII,-*,LineWidth,2);

legend(MOPSO,NSGAII);
xlabel(迭代次数,Fontsize,12);
ylabel(IGD指标值,Fontsize,12);
title(IGD比较);
  1. 将得到的值组成数组,用plot函数绘制即可得到第二张图像。这是最笨最简单的方法了。。。
经验分享 程序员 微信小程序 职场和发展