【问题标题】:Pareto Optimal Front帕累托最优前沿
【发布时间】:2013-12-24 11:36:35
【问题描述】:

我试图获得两个适应度函数的帕累托最优前沿。我使用一个虚拟矩阵对无主解决方案进行排序,该矩阵在矩阵中为任何无主解决方案分配“一个”。当我绘制帕累托前沿时,它会不断包含我知道不属于帕累托最优的点。但是,我似乎无法找到此问题的原因。任何帮助将不胜感激。

for  i = 1:1000
    f1(i) = x(i,1)^2;
    f2(i) = (x(i,1)-2)^2;
end
store = zeros(1000,1);
for i = 1:1000
    st = zeros(1000,1);
    for j = 1:1000
        if i == j
            st(j) = 1;                         
            continue;                           %Skip to next iteration.
        end
        if f1(i) > f1(j) && f2(i) > f2(j);      %Check for "x-dominated"
           continue;
        else st(j) = 1;                         %Dummy 1000x1 matrix
        end
    end
    if st == ones(1000,1)                       %Testing the dummy matrix for dominance
       store(i) = x(i);
    end
end

pareto = store(store ~= 0);                     
N = length(pareto);
for k = 1:N
    f3(k) = x(k,1)^2;
    f4(k) = (x(k,1)-2)^2;
end

【问题讨论】:

  • 请给我们最小/最简单的可重现示例,您可以找到发生这种情况的位置,包括该点以及不应找到该点的原因。
  • @DennisJaheruddin 感谢您的回复。我认为我可能错的地方是这个 if 语句检查占主导地位的解决方案。如果 f1(i) > f1(j) && f2(i) > f2(j);我会向你展示情节,但我不知道在论坛中是否可能。
  • @thewaywewalk 可能,我很早就找到了它,但无法充分利用它。

标签: algorithm matlab controls mathematical-optimization evolutionary-algorithm


【解决方案1】:

不太确定你做了什么,但这就是我用有限点绘制帕累托前沿的方法。我认为这应该会让你走上正轨:

t=1:10;
f1 = t.^2;
f2 = (t-2).^2;

ip = true(size(f1));

for k=1:numel(f1)
    if any(f1<f1(k)&(f2<f2(k)))
        ip(k) = false;
    end
end

plot(f1,f2)
hold all
plot(f1(ip),f2(ip),'ro')

【讨论】:

  • 感谢@DennisJaheruddin,这是一个很好的指导,会让我大开眼界。
  • 我想连接帕累托边界(不仅仅是点)。有什么办法可以实现吗?
  • @divB 从概念上讲,您应该能够将点按顺序排列,然后告诉 matlab 在图中添加一条线是微不足道的。但是,我不知道以正确顺序获得积分的简单方法。 (假设你只有 (1,1 ; 0,0, 0,2) 计算机怎么知道顺序是什么?!)
  • @divB 获取顺序,将点投影到目标函数的法线上,并排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多