我已经多次尝试编写提取非支配(或支配)
的代码使用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得到非支配解。
提前致谢
答案 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')
导致:
这正是它看起来的样子。否则你需要澄清你的问题。