IGD反轉世代距離-多目標優化評價指標概念及實現

IGD反轉世代距離-多目標優化評價指標概念及實現

覺得有用的話,歡迎一起討論相互學習~

我的微博我的github我的B站

參考資料
多目標進化優化[1]-鄭金華老師,鄒娟老師著
實驗室人手一本人人必看的寶藏圖書!

  • IGD(Inverted Generational Distance)是常用的可以同時評價算法收斂性和多樣性的指標,中文名反轉世代距離。

從GD到IGD

  • 先被提出的用於評價多目標算法收斂性的指標是GD(Generational Distance),用來表示PFknownPF_{known}PFtruePF_{true}之間的間隔距離,計算式被定義爲:

    GD=(i=1ndip)1/pnGD=\frac{(\sum^{n}_{i=1}d^p_i)^{1/p}}{n}

其中n表示PFknownPF_{known}中點的個數,p表示目標維數,did_{i}表示目標空間中得到的 每個點 PFknownPF_{known} 距離 PFtruePF_{true} 參考點(類似於答案)的最近歐式距離的平均值 。若此值爲0,則表示 PFknown==PFtruePF_{known} == PF_{true}.

  • 歐式距離的平面版本初中我們就學過^ _ ^
    在這裏插入圖片描述

  • 舉個[1]中二維目標的例子
    在這裏插入圖片描述
    計算可得:
    d1=(2.52)2+(98)22d_1=\sqrt[2]{(2.5-2)^2+(9-8)^2}
    d1=(33)2+(66)22d_1=\sqrt[2]{(3-3)^2+(6-6)^2}
    d1=(54)2+(44)22d_1=\sqrt[2]{(5-4)^2+(4-4)^2}

  • 因此,PFknownPF_{known}PFtruePF_{true} 之間的間隔距離爲 GD=1.1182+02+122/3=0.5GD=\sqrt[2]{1.118^2+0^2+1^2}/3=0.5

  • 值得一提的是,某種意義上可以這樣認爲: GD是從自己得到的每個點指向最近的真實前沿上的點的歐式距離的平均

IGD

  • 可以發現,GD的方式只能夠評價算法的收斂性 。爲了同時評價算法的 收斂性和多樣性 ,IGD被提出了。區別在於 IGD是從真實帕累託前沿上的參考點射向算法的得到的解,即是從PFtruePF_{true} 射向 PFknownPF_{known} ,因此被稱爲 反向世代距離
  • 思路是:從真實帕累託前沿上均勻取點,對於 真實前沿上的每個點找到已知帕累託前沿上距離最近的點 ,將這些點之間距離相加並取平均。和GD略微不同的是沒有開方的操作!只用取平均就行,分母是從真實前沿上取點的個數。
  • IGD=i=1ndinIGD=\frac{\sum^{n}_{i=1}|d_i|}{n}

其中n表示PFtruePF_{true}中點的個數,did_{i}表示目標空間中 真實前沿的每個點距已知前沿的最近歐式距離 。此值越小,意味着算法的綜合性能越好。

  • 在這裏插入圖片描述

關於IGD的解釋

  • 由於兩點間的距離是可逆的,A->B的距離和B->A的距離相等,那麼真實前沿上點到已知前沿的最小值必定包含了,已知前沿到真實前沿的最小值(IGD),假設真實前沿上的點比已知前沿的點多 這種觀點是錯的,因爲邊是有向的,從一個頂點出發只能連接一另一端的點,而不能同時連接兩個終點。 GD和IGD並不是從所有邊集合中挑選出其中距離最短的邊,而是從指定頂點出發的距離最短的有向邊!
    在這裏插入圖片描述
  • 例如,顯然A-D和A-B是最短的兩條邊。計算GD時,遍歷PFknown,會選擇A->D,然後到B,B會選擇B->D。計算IGD時,遍歷PFtrue,C會選C->A,即使A->D更短,但是對於C而言並不會考慮A的感受,D會選擇D->B,即時D->A也很短,但是D只能做出最好的選擇,很明顯D->B比D->A更好。而爲了避免同一個點指向兩個端點,即取最小的距離,使用循環的方法。在找到最近點後就會跳過該點進入下一個點的查找最近距離的步驟
  • 也直接引用鄭金華老師書[1]中的例子進行介紹。
    在這裏插入圖片描述
  • 爲什麼選擇從PFtrue出發放出射線呢?還是因爲PFtrue是分佈均勻的答案,從PFtrue出發才能讓一個PFknown不僅僅是 靠向PFtrue還要分佈均勻因此PF true中採樣點的數目十分重要,採樣點越多,分佈越均勻結果才越精確可靠

IGD實現

matlab

IGD = 0;% 初始化IGD爲0
for i = 1:51 % 遍歷PFtrue中的所有電
    % data中保存的是真實PF
    % data(i,1)表示第i行的第1列數
    % 得到一個單元格中數值是data(i,)形狀是(pop2,1)的長條狀列向量
    c1 = data(i,1)*ones(pop2,1);% 第一個目標的目標值
    c2 = data(i,2)*ones(pop2,1);% 第二個目標的目標值
    %對於一個參考點,使用所有實際點在兩個目標上對應項相減後分別在兩個目標上平方
    % sum(,2)按行相加
    % min 取最小的距離開方
    IGD = IGD + sqrt(min(sum((T2_data-[c1 c2]).^2,2)));
end
% 對PFtrue上所有點取平均
store(2,generation)=IGD/51;  

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章