如何提取非支配解决方案(Pareto front)

时间:2013-11-22 20:36:50

标签: matlab function solution

我已经多次尝试编写提取非支配(或支配)

的代码

使用MATLAB解决两个目标函数。

我有两个简单的目标函数:

J1 = X ^ 2

J 2 =(X-2)。^ 2

我有一个x值的范围,比如-5到5,例如,有100个解决方案

在指定范围内随机生成。

我想从这些解决方案中提取非支配解决方案。

我对上述所有操作都没有任何问题。到目前为止我所做的是:

   % generating 100 solutions randomly between -5 and 5:

   x=-5+10*rand(100,1);

   % calculate both objective functions, J1 and J2 at each solution:

   J1=x.^2;

   J2=(x-2).^2;

现在,我遇到了如何将概念转换为书面代码的问题。

我知道如何提取非支配解决方案和帕累托前沿的概念。

我可以手动完成,但这需要很长时间。

我尝试使用if语句,但结果并不准确。

我认为最好提取主导解决方案的索引,然后从

中删除它们

主矢量x得到非支配解。

提前致谢

1 个答案:

答案 0 :(得分:1)

你介意来自FEX的文件吗? This one works perfectly: "Pareto Front" by Yi Cao

为您提供主导解决方案x的索引。

然后你必须像这样使用它:

x=-5+10*rand(100,1);
J1=x.^2;
J2=(x-2).^2;

idx = paretofront([J1,J2]);
xdi = ~ismember(idx,1:numel(x));

figure(1)
hold on
scatter(J1,J2,10,'red');
scatter(J1(idx),J2(idx),50,'blue');
scatter(J1(xdi),J2(xdi),50,'green');
hold off

legend('all solutions','dominating solutions','non dominating solutions')

导致:

enter image description here

这正是它看起来的样子。否则你需要澄清你的问题。