我有这个代码应该为我的数据绘制Pareto前沿,但仅在某些情况下。对于背景,帕累托前沿是所有非支配解决方案的集合,这是最大化每个功能的点。有没有帮助排除故障?
x=cost;
y=portscores;
v=[x,y];
v=sortrows(v,1, 'descend');
x=v(:,1);
y=v(:,2);
count = 0 ;
n_vect = zeros(1,[]);
b_vect = zeros(1,[]);
for i=2:113
m=max(v(1:i-1,2));
if v(i,2) > m
n=(v(i,2));
b=(v(i,1));
n_vect = [n_vect,n];
b_vect = [b_vect, b];
end
end
scatter(x,y)
hold on
plot(b_vect, n_vect)
xlabel('Overall Cost')
ylabel('Overall Portfolio Scores')
title('Pareto Frontier')
答案 0 :(得分:0)
如果您正在绘制人类观看数据,那么优化代码是没有意义的。所以只需使用天真的O(N平方)算法。迭代,然后每个点支配它在x和y上优于的点,因此设置一个标志。然后再次迭代以获得前方,这是未标记的点。