• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MATLAB算法应用案例精讲-智能优化算法多目标算法性能评价指标

武飞扬头像
林聪木
帮助1

前言

在评估多目标优化算法的效果时,我们通常使用五个主要指标:GD(Generational Distance)、IGD(Inverted Generational Distance)、Hypervolume、Spacing和Spread。

GDIGD是用于测量算法生成的解集合与真实前沿解之间的距离的指标。具体而言,GD测量了所有生成解与真实前沿解之间的平均欧几里得距离,而IGD测量了所有真实前沿解与生成解之间的平均欧几里得距离。这两个指标的目标是越小越好,即算法的生成解集合应该尽可能接近真实前沿解。

Hypervolume则是用于测量算法生成的解集合能够覆盖的真实前沿解的体积大小的指标。目标是越大越好,即算法生成的解集合应该尽可能覆盖更多的真实前沿解。

SpacingSpread是用于测量算法生成的解集合的分布情况的指标。Spacing测量了所有解之间的最小欧几里得距离,而Spread测量了所有解之间的最大欧几里得距离。

通过对这些指标的全面评估,我们可以更好地了解算法的表现并进行优化。

代码实现

MATLAB

Spread.m

  1.  
    %% PopObj:算法求得的pareto解集
  2.  
    %% PF:真实的解集
  3.  
    function Score = Spread(PopObj,PF)
  4.  
    Dis1 = pdist2(PopObj,PopObj);
  5.  
    Dis1(logical(eye(size(Dis1,1)))) = inf;
  6.  
    [~,E] = max(PF,[],1);PF(E,:)
  7.  
    Dis2 = pdist2(PF(E,:),PopObj);
  8.  
    d1 = sum(min(Dis2,[],2));
  9.  
    d2 = mean(min(Dis1,[],2));
  10.  
    Score = (d1 sum(abs(min(Dis1,[],2)-d2))) / (d1 (size(PopObj,1)-size(PopObj,2))*d2);
  11.  
    end

Spacing.m

  1.  
    %% PopObj:算法求得的pareto解集
  2.  
    %% PF:真实的解集
  3.  
    function Score = Spacing(PopObj,PF)
  4.  
    Distance = pdist2(PopObj,PopObj,'cityblock');
  5.  
    Distance(logical(eye(size(Distance,1)))) = inf;
  6.  
    Score = std(min(Distance,[],2));
  7.  
    end

IGD.m

  1.  
    %% PopObj:算法求得的pareto解集
  2.  
    %% PF:真实的解集
  3.  
    function Score = IGD(PopObj,PF)
  4.  
    Distance = min(pdist2(PF,PopObj),[],2);
  5.  
    Score = mean(Distance);
  6.  
    end

HV.m

  1.  
    %% PopObj:算法求得的pareto解集
  2.  
    %% PF:真实的解集
  3.  
    function [Score,PopObj] = HV(PopObj,PF)
  4.  
    % Hypervolume
  5.  
    [N,M] = size(PopObj);
  6.  
    fmin = min(min(PopObj,[],1),zeros(1,M));
  7.  
    fmax = max(PF,[],1);
  8.  
    PopObj = (PopObj-repmat(fmin,N,1))./repmat((fmax-fmin)*1.1,N,1);
  9.  
    PopObj(any(PopObj>1,2),:) = [];
  10.  
    % The reference point is set to (1,1,...)
  11.  
    RefPoint = ones(1,M);
  12.  
    if isempty(PopObj)
  13.  
    Score = 0;
  14.  
    elseif M < 4
  15.  
    % Calculate the exact HV value
  16.  
    pl = sortrows(PopObj);
  17.  
    S = {1,pl};
  18.  
    for k = 1 : M-1
  19.  
    S_ = {};
  20.  
    for i = 1 : size(S,1)
  21.  
    Stemp = Slice(cell2mat(S(i,2)),k,RefPoint);
  22.  
    for j = 1 : size(Stemp,1)
  23.  
    temp(1) = {cell2mat(Stemp(j,1))*cell2mat(S(i,1))};
  24.  
    temp(2) = Stemp(j,2);
  25.  
    S_ = Add(temp,S_);
  26.  
    end
  27.  
    end
  28.  
    S = S_;
  29.  
    end
  30.  
    Score = 0;
  31.  
    for i = 1 : size(S,1)
  32.  
    p = Head(cell2mat(S(i,2)));
  33.  
    Score = Score cell2mat(S(i,1))*abs(p(M)-RefPoint(M));
  34.  
    end
  35.  
    else
  36.  
    % Estimate the HV value by Monte Carlo estimation
  37.  
    SampleNum = 1000000;
  38.  
    MaxValue = RefPoint;
  39.  
    MinValue = min(PopObj,[],1);
  40.  
    Samples = unifrnd(repmat(MinValue,SampleNum,1),repmat(MaxValue,SampleNum,1));
  41.  
    if gpuDeviceCount > 0
  42.  
    % GPU acceleration
  43.  
    Samples = gpuArray(single(Samples));
  44.  
    PopObj = gpuArray(single(PopObj));
  45.  
    end
  46.  
    for i = 1 : size(PopObj,1)
  47.  
    drawnow();
  48.  
    domi = true(size(Samples,1),1);
  49.  
    m = 1;
  50.  
    while m <= M && any(domi)
  51.  
    domi = domi & PopObj(i,m) <= Samples(:,m);
  52.  
    m = m 1;
  53.  
    end
  54.  
    Samples(domi,:) = [];
  55.  
    end
  56.  
    Score = prod(MaxValue-MinValue)*(1-size(Samples,1)/SampleNum);
  57.  
    end
  58.  
    end
  59.  
     
  60.  
    function S = Slice(pl,k,RefPoint)
  61.  
    p = Head(pl);
  62.  
    pl = Tail(pl);
  63.  
    ql = [];
  64.  
    S = {};
  65.  
    while ~isempty(pl)
  66.  
    ql = Insert(p,k 1,ql);
  67.  
    p_ = Head(pl);
  68.  
    cell_(1,1) = {abs(p(k)-p_(k))};
  69.  
    cell_(1,2) = {ql};
  70.  
    S = Add(cell_,S);
  71.  
    p = p_;
  72.  
    pl = Tail(pl);
  73.  
    end
  74.  
    ql = Insert(p,k 1,ql);
  75.  
    cell_(1,1) = {abs(p(k)-RefPoint(k))};
  76.  
    cell_(1,2) = {ql};
  77.  
    S = Add(cell_,S);
  78.  
    end
  79.  
     
  80.  
    function ql = Insert(p,k,pl)
  81.  
    flag1 = 0;
  82.  
    flag2 = 0;
  83.  
    ql = [];
  84.  
    hp = Head(pl);
  85.  
    while ~isempty(pl) && hp(k) < p(k)
  86.  
    ql = [ql;hp];
  87.  
    pl = Tail(pl);
  88.  
    hp = Head(pl);
  89.  
    end
  90.  
    ql = [ql;p];
  91.  
    m = length(p);
  92.  
    while ~isempty(pl)
  93.  
    q = Head(pl);
  94.  
    for i = k : m
  95.  
    if p(i) < q(i)
  96.  
    flag1 = 1;
  97.  
    else
  98.  
    if p(i) > q(i)
  99.  
    flag2 = 1;
  100.  
    end
  101.  
    end
  102.  
    end
  103.  
    if ~(flag1 == 1 && flag2 == 0)
  104.  
    ql = [ql;Head(pl)];
  105.  
    end
  106.  
    pl = Tail(pl);
  107.  
    end
  108.  
    end
  109.  
     
  110.  
    function p = Head(pl)
  111.  
    if isempty(pl)
  112.  
    p = [];
  113.  
    else
  114.  
    p = pl(1,:);
  115.  
    end
  116.  
    end
  117.  
     
  118.  
    function ql = Tail(pl)
  119.  
    if size(pl,1) < 2
  120.  
    ql = [];
  121.  
    else
  122.  
    ql = pl(2:end,:);
  123.  
    end
  124.  
    end
  125.  
     
  126.  
    function S_ = Add(cell_,S)
  127.  
    n = size(S,1);
  128.  
    m = 0;
  129.  
    for k = 1 : n
  130.  
    if isequal(cell_(1,2),S(k,2))
  131.  
    S(k,1) = {cell2mat(S(k,1)) cell2mat(cell_(1,1))};
  132.  
    m = 1;
  133.  
    break;
  134.  
    end
  135.  
    end
  136.  
    if m == 0
  137.  
    S(n 1,:) = cell_(1,:);
  138.  
    end
  139.  
    S_ = S;
  140.  
    end
学新通

GD.m

  1.  
    %% PopObj:算法求得的pareto解集
  2.  
    %% PF:真实的解集
  3.  
    function Score = GD(PopObj,PF)
  4.  
    % Generational distance
  5.  
    Distance = min(pdist2(PopObj,PF),[],2);
  6.  
    Score = norm(Distance) / length(Distance);
  7.  
    end

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcbbbb
系列文章
更多 icon
同类精品
更多 icon
继续加载