platEMO提取运行后的save数据
github地址:https://github.com/BIMK/PlatEMO
platEMO介绍
在github上下载后使用matlab打开,运行main()
,会出现如下所示的GUI界面
|
|
可以注意到这里,他有一个缓存机制
数据会在Data文件夹下保存起来
大致是这么个命名
处理数据
platEMO的数据不能直接在GUI窗口调节,也没有直接留在工作区因此我写了一个小的脚本来处理,不过只是为了生成几个图可能代码复用性不是很强,en应该可以直接把下面写的更简单的
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 2019.11.17
% show the plot
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
Path{1} = '.\Data\ARMOEA\'; % 设置数据存放的文件夹路径
Path{2} = '.\Data\MOEAD\';
Path{3} = '.\Data\NSGAII\';
Path{4} = '.\Data\NSGAIII\';
%% 初始化存储变量
for i = 1:4
for j = 1:7
a_dtlz{i}{j}.runtime = zeros(30,1);
a_dtlz{i}{j}.IGD = zeros(30,1);
a_dtlz{i}{j}.Coverage = zeros(30,1);
a_dtlz{i}{j}.GD = zeros(30,1);
a_dtlz{i}{j}.HV = zeros(30,1);
end
end
%% 读出指标量
for i = 1:4
File{i} = dir(fullfile(Path{i},'*.mat'));
len_file = size(File{i}, 1);
for j = 1:len_file
% 按 _ 分割文件名,将变量读出来
split_name = strsplit(File{i}(j).name, {'_', '.'});
F_Trace = strcat( Path{i}, File{i}(j).name );
eval(['temp','=','load( F_Trace )',';']);
metric = temp.metric;
% disp(File{i}(j).name);
% 确认限制测试集
if str2num(split_name{2}(end)) > 7 | str2num(split_name{2}(1)) ~= 'W'
continue;
end
a_dtlz{i}{ str2num(split_name{2}(end)) }.runtime( str2num(split_name{5}) ) = metric.runtime;
a_dtlz{i}{ str2num(split_name{2}(end)) }.IGD( str2num(split_name{5}) ) = metric.IGD;
a_dtlz{i}{ str2num(split_name{2}(end)) }.Coverage( str2num(split_name{5}) ) = metric.Coverage;
a_dtlz{i}{ str2num(split_name{2}(end)) }.GD( str2num(split_name{5}) ) = metric.GD;
a_dtlz{i}{ str2num(split_name{2}(end)) }.HV( str2num(split_name{5}) ) = metric.HV;
end
end
%% prepare the plot data
col = ['r', 'g', 'b', 'k', 'c', 'm', 'y'];
for i = 1:4
a_show{i} = zeros(1, 7);
end
% figure;
%% plot runtime
% subplot(5,1,1);
figure;
for i = 1:7
for j = 1:4
a_show{j}(i) = a_dtlz{j}{i}.runtime(30);
end
end
plot(a_show{1}, col(1));
for j = 2:4
hold on; plot(a_show{j}, col(j));
end
title('runtime WFG');
legend('ARMOEA','MOEAD','NSGAII','NSGAIII');
%% plot IGD
% subplot(5,1,2);
figure;
for i = 1:7
for j = 1:4
a_show{j}(i) = a_dtlz{j}{i}.IGD(30);
end
end
plot(a_show{1}, col(1));
for j = 2:4
hold on; plot(a_show{j}, col(j));
end
title('IGD WFG');
legend('ARMOEA','MOEAD','NSGAII','NSGAIII');
%% plot Coverage
% subplot(5,1,3);
figure;
for i = 1:7
for j = 1:4
a_show{j}(i) = a_dtlz{j}{i}.Coverage(30);
end
end
plot(a_show{1}, col(1));
for j = 2:4
hold on; plot(a_show{j}, col(j));
end
title('Coverage WFG');
legend('ARMOEA','MOEAD','NSGAII','NSGAIII');
%% plot GD
% subplot(5,1,4);
figure;
for i = 1:7
for j = 1:4
a_show{j}(i) = a_dtlz{j}{i}.GD(30);
end
end
plot(a_show{1}, col(1));
for j = 2:4
hold on; plot(a_show{j}, col(j));
end
title('GD WFG');
legend('ARMOEA','MOEAD','NSGAII','NSGAIII');
%% plot HV
% subplot(5,1,5);
figure;
for i = 1:7
for j = 1:4
a_show{j}(i) = a_dtlz{j}{i}.HV(30);
end
end
plot(a_show{1}, col(1));
for j = 2:4
hold on; plot(a_show{j}, col(j));
end
title('HV WFG');
legend('ARMOEA','MOEAD','NSGAII','NSGAIII');
数据图