上一小节(在PlatEMO v2.9中增加多模态多目标算法(2)),我已经更改了调用计算指标的代码,在该小节我会展示更改后PlatEMO v2.9
的计算指标的代码,以保证与上节修改代码的接口相同。
IGD
function Score = IGD(Parameter)
% <metric> <min>
% Inverted generational distance
%------------------------------- Reference --------------------------------
% C. A. Coello Coello and N. C. Cortes, Solving multiobjective optimization
% problems using an artificial immune system, Genetic Programming and
% Evolvable Machines, 2005, 6(2): 163-190.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
Distance = min(pdist2(PF,PopObj),[],2);
Score = mean(Distance);
end
HV
function [Score,PopObj] = HV(Parameter)
% <metric> <max>
% Hypervolume
%------------------------------- Reference --------------------------------
% E. Zitzler and L. Thiele, Multiobjective evolutionary algorithms: A
% comparative case study and the strength Pareto approach, IEEE
% Transactions on Evolutionary Computation, 1999, 3(4): 257-271.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,RefPoint] = deal(Parameter{:});
% Normalize the population according to the reference point set
[N,M] = size(PopObj);
fmin = min(min(PopObj,[],1),zeros(1,M));
% fmin=270;
% fmax=3500;
fmax = max(PF,[],1)*1.1;
PopObj = (PopObj-repmat(fmin,N,1))./repmat(fmax-fmin,N,1);
PopObj(any(PopObj>1,2),:) = [];
% The reference point is set to (1,1,...)
if isempty(RefPoint)
RefPoint = ones(1,M);
end
if isempty(PopObj)
Score = 0;
elseif M < 4
% Calculate the exact HV value
pl = sortrows(PopObj);
S = {1,pl};
for k = 1 : M-1
S_ = {};
for i = 1 : size(S,1)
Stemp = Slice(cell2mat(S(i,2)),k,RefPoint);
for j = 1 : size(Stemp,1)
temp(1) = {cell2mat(Stemp(j,1))*cell2mat(S(i,1))};
temp(2) = Stemp(j,2);
S_ = Add(temp,S_);
end
end
S = S_;
end
Score = 0;
for i = 1 : size(S,1)
p = Head(cell2mat(S(i,2)));
Score = Score + cell2mat(S(i,1))*abs(p(M)-RefPoint(M));
end
else
% Estimate the HV value by Monte Carlo estimation
SampleNum = 1000000;
MaxValue = RefPoint;
MinValue = min(PopObj,[],1);
Samples = unifrnd(repmat(MinValue,SampleNum,1),repmat(MaxValue,SampleNum,1));
if gpuDeviceCount > 0
% GPU acceleration
Samples = gpuArray(single(Samples));
PopObj = gpuArray(single(PopObj));
end
for i = 1 : size(PopObj,1)
drawnow();
domi = true(size(Samples,1),1);
m = 1;
while m <= M && any(domi)
domi = domi & PopObj(i,m) <= Samples(:,m);
m = m + 1;
end
Samples(domi,:) = [];
end
Score = prod(MaxValue-MinValue)*(1-size(Samples,1)/SampleNum);
end
end
function S = Slice(pl,k,RefPoint)
p = Head(pl);
pl = Tail(pl);
ql = [];
S = {};
while ~isempty(pl)
ql = Insert(p,k+1,ql);
p_ = Head(pl);
cell_(1,1) = {abs(p(k)-p_(k))};
cell_(1,2) = {ql};
S = Add(cell_,S);
p = p_;
pl = Tail(pl);
end
ql = Insert(p,k+1,ql);
cell_(1,1) = {abs(p(k)-RefPoint(k))};
cell_(1,2) = {ql};
S = Add(cell_,S);
end
function ql = Insert(p,k,pl)
flag1 = 0;
flag2 = 0;
ql = [];
hp = Head(pl);
while ~isempty(pl) && hp(k) < p(k)
ql = [ql;hp];
pl = Tail(pl);
hp = Head(pl);
end
ql = [ql;p];
m = length(p);
while ~isempty(pl)
q = Head(pl);
for i = k : m
if p(i) < q(i)
flag1 = 1;
else
if p(i) > q(i)
flag2 = 1;
end
end
end
if ~(flag1 == 1 && flag2 == 0)
ql = [ql;Head(pl)];
end
pl = Tail(pl);
end
end
function p = Head(pl)
if isempty(pl)
p = [];
else
p = pl(1,:);
end
end
function ql = Tail(pl)
if size(pl,1) < 2
ql = [];
else
ql = pl(2:end,:);
end
end
function S_ = Add(cell_,S)
n = size(S,1);
m = 0;
for k = 1 : n
if isequal(cell_(1,2),S(k,2))
S(k,1) = {cell2mat(S(k,1))+cell2mat(cell_(1,1))};
m = 1;
break;
end
end
if m == 0
S(n+1,:) = cell_(1,:);
end
S_ = S;
end
GD
function Score = GD(Parameter)
% <metric> <min>
% Generational distance
%------------------------------- Reference --------------------------------
% D. A. Van Veldhuizen, Multiobjective evolutionary algorithms:
% Classifications, analyses, and new innovations, Ph.D. thesis, Department
% of Electrical and Computer Engineering, Graduate School of Engineering,
% Air Force Institute of Technology, Wright Patterson Air Force Base, 1999.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
Distance = min(pdist2(PopObj,PF),[],2);
Score = norm(Distance) / length(Distance);
end
Converge
function Score = Coverage(Parameter)
% <metric> <min>
% Coverage
%------------------------------- Reference --------------------------------
% E. Zitzler and L. Thiele, Multiobjective evolutionary algorithms: A
% comparative case study and the strength Pareto approach, IEEE
% Transactions on Evolutionary Computation, 1999, 3(4): 257-271.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
Domi = false(1,size(PopObj,1));
for i = 1 : size(PF,1)
Domi(sum(repmat(PF(i,:),size(PopObj,1),1)-PopObj<=0,2)==size(PopObj,2)) = true;
end
Score = sum(Domi) / size(PopObj,1);
end
CPF
function Score = CPF(Parameter)
% <metric> <max>
% Coverage over Pareto front
%------------------------------- Reference --------------------------------
% Y. Tian, R. Cheng, X. Zhang, M. Li, and Y. Jin, Diversity assessment of
% multi-objective evolutionary algorithms: Performance metric and benchmark
% problems, IEEE Computational Intelligence Magazine, 2019.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~] = deal(Parameter{:});
if size(PF,1) > 1
%% Normalization
fmin = min(PF,[],1);
fmax = max(PF,[],1);
PopObj = (PopObj-repmat(fmin,size(PopObj,1),1))./repmat(fmax-fmin,size(PopObj,1),1);
PF = (PF-repmat(fmin,size(PF,1),1))./repmat(fmax-fmin,size(PF,1),1);
%% Map to the Pareto front
[~,Close] = min(pdist2(PopObj,PF),[],2);
PopObj = PF(Close,:);
%% Calculate the indicator value
VPF = Coverage(map(PF,PF),inf);
V = Coverage(map(PopObj,PF),VPF/size(PopObj,1));
Score = V./VPF;
else
fmin = min(PopObj,[],1);
fmax = max(PopObj,[],1);
PopObj = (PopObj-repmat(fmin,size(PopObj,1),1))./repmat(fmax-fmin,size(PopObj,1),1);
Score = Coverage(map(PopObj,PopObj),1/size(PopObj,1));
end
end
function y = map(x,PF)
% Project the points in an (M-1)-d manifold to an (M-1)-d unit hypercube
[N,M] = size(x);
x = x - repmat((sum(x,2)-1)/M,1,M);
PF = PF - repmat((sum(PF,2)-1)/M,1,M);
x = x - repmat(min(PF,[],1),size(x,1),1);
x = x./repmat(sum(x,2),1,M);
x = max(1e-6,x);
y = zeros(N,M-1);
for i = 1 : N
c = ones(1,M);
k = find(x(i,:)~=0,1);
for j = k+1 : M
temp = x(i,j)/x(i,k)*prod(c(M-j+2:M-k));
c(M-j+1) = 1/(temp+1);
end
y(i,:) = c(1:M-1);
end
y = y.^repmat(M-1:-1:1,N,1);
end
function V = Coverage(P,maxv)
% Calculate the hypervolume of each point's monopolized hypercube
[N,M] = size(P);
L = zeros(N,1);
for x = 1 : N
P1 = P;
P1(x,:) = inf;
L(x) = min(max(abs(P1-repmat(P(x,:),N,1)),[],2));
end
L = min(L,maxv.^(1/M));
Lower = max(0,P-repmat(L/2,1,M));
Upper = min(1,P+repmat(L/2,1,M));
V = sum(prod(Upper-Lower,2));
end
DeltaP
function Score = DeltaP(Parameter)
% <metric> <min>
% Averaged Hausdorff distance
%------------------------------- Reference --------------------------------
% O. Schutze, X. Esquivel, A. Lara, and C. A. Coello Coello, Using the
% averaged Hausdorff distance as a performance measure in evolutionary
% multiobjective optimization, IEEE Transactions on Evolutionary
% Computation, 2012, 16(4): 504-522.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
IGDp = mean(min(pdist2(PF,PopObj),[],2));
GDp = mean(min(pdist2(PopObj,PF),[],2));
Score = max(IGDp,GDp);
end
DM
function Score = DM(Parameter)
% <metric> <max>
% Metric for diversity
%------------------------------- Reference --------------------------------
% K. Deb and S. Jain, Running performance metrics for evolutionary
% multi-objective optimization, KanGAL Report 2002004, 2002.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
fmax = max(PF,[],1);
fmin = min(PF,[],1);
H = calGrid(PF(:,1:end-1),fmax(1:end-1),fmin(1:end-1),size(PopObj,1));
h = H & calGrid(PopObj(:,1:end-1),fmax(1:end-1),fmin(1:end-1),size(PopObj,1));
Score = calM(h,H)./calM(H,H);
end
function h = calGrid(P,fmax,fmin,div)
% Determine whether each grid has at least one point
[N,M] = size(P);
d = (fmax-fmin)./div;
GLoc = ceil((P-repmat(fmin,N,1))./repmat(d,N,1));
GLoc = max(1,GLoc);
h = zeros(M,div);
for i = 1 : M
h(i,:) = ismember(1:div,GLoc(:,i));
end
end
function m = calM(h,H)
% Calculate the value function m()
M = size(h,1);
h = [ones(M,1),h,ones(M,1)];
H = [ones(M,1),H,ones(M,1)];
m = 0;
for i = 1 : M
for j = 2 : size(h,2)-1
if H(i,j)
if h(i,j)
if h(i,j-1)
if h(i,j+1)
m = m + 1;
else
m = m + 0.67;
end
else
if h(i,j+1)
m = m + 0.67;
else
m = m + 0.75;
end
end
else
if h(i,j-1)
if h(i,j+1)
m = m + 0.75;
else
m = m + 0.5;
end
else
if h(i,j+1)
m = m + 0.5;
else
m = m + 0;
end
end
end
end
end
end
end
PD
function Score = PD(Parameter)
% <metric> <max>
% Pure diversity
%------------------------------- Reference --------------------------------
% H. Wang, Y. Jin, and X. Yao, Diversity assessment in many-objective
% optimization, IEEE Transactions on Cybernetics, 2017, 47(6): 1510-1522.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
[PopObj,PF,~,~,~,~] = deal(Parameter{:});
N = size(PopObj,1);
C = false(N);
C(logical(eye(size(C)))) = true;
D = pdist2(PopObj,PopObj,'minkowski',0.1);
D(logical(eye(size(D)))) = inf;
Score = 0;
for k = 1 : N-1
while true
[d,J] = min(D,[],2);
[~,i] = max(d);
if D(J(i),i) ~= -inf
D(J(i),i) = inf;
end
if D(i,J(i)) ~= -inf
D(i,J(i)) = inf;
end
P = any(C(i,:),1);
while ~P(J(i))
newP = any(C(P,:),1);
if P == newP
break;
else
P = newP;
end
end
if ~P(J(i))
break;
end
end
C(i,J(i)) = true;
C(J(i),i) = true;
D(i,:) = -inf;
Score = Score + d(i);
end
end
Spread
function Score = Spread(varagin)
% <metric> <min>
% Spread
%------------------------------- Reference --------------------------------
% Y. Wang, L. Wu, and X. Yuan, Multi-objective self-adaptive differential
% evolution with elitist archive and crowding entropy-based diversity
% measure, Soft Computing, 2010, 14(3): 193-209.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2018-2019 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "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".
%--------------------------------------------------------------------------
PopObj=varagin{1};
PF=varagin{2};
Dis1 = pdist2(PopObj,PopObj);
Dis1(logical(eye(size(Dis1,1)))) = inf;
[~,E] = max(PF,[],1);Draw(PF(E,:),'*b');PF(E,:)
Dis2 = pdist2(PF(E,:),PopObj);
d1 = sum(min(Dis2,[],2));
d2 = mean(min(Dis1,[],2));
Score = (d1+sum(abs(min(Dis1,[],2)-d2))) / (d1+(size(PopObj,1)-size(PopObj,2))*d2);
end