Постройте график 3-D Парето-Фронте

Этот пример показывает, как построить график фронта Парето для трех целей. Каждая целевая функция является квадратным расстоянием от конкретной 3-D точки. Для скорости вычисления запишите каждую целевую функцию векторизированным образом как скалярный продукт. Чтобы получить плотный набор решений, используйте 200 точек на фронте Парето.

Пример сначала показывает, как получить график с помощью встроенной 'psplotparetof' постройте график функции. Затем, на случай, если вы используете gamultiobj или другой способ получения точек Парето, пример показывает, как построить точки непосредственно, и показывает, как построить интерполированную поверхность вместо точек Парето.

fun = @(x)[dot(x - [1,2,3],x - [1,2,3],2), ...
    dot(x - [-1,3,-2],x - [-1,3,-2],2), ...
    dot(x - [0,-1,1],x - [0,-1,1],2)];
options = optimoptions('paretosearch','UseVectorized',true,'ParetoSetSize',200,...
    'PlotFcn','psplotparetof');
lb = -5*ones(1,3);
ub = -lb;
rng default % For reproducibility
[x,f] = paretosearch(fun,3,[],[],[],[],lb,ub,[],options);
Pareto set found that satisfies the constraints. 

Optimization completed because the relative change in the volume of the Pareto set 
is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 
'options.ConstraintTolerance'.

Figure paretosearch contains an axes. The axes with title Pareto Front contains an object of type line.

Создайте 3-D точечный график

Постройте графики точек на фронте Парето с помощью scatter3.

figure
subplot(2,2,1)
scatter3(f(:,1),f(:,2),f(:,3),'k.');
subplot(2,2,2)
scatter3(f(:,1),f(:,2),f(:,3),'k.');
view(-148,8)
subplot(2,2,3)
scatter3(f(:,1),f(:,2),f(:,3),'k.');
view(-180,8)
subplot(2,2,4)
scatter3(f(:,1),f(:,2),f(:,3),'k.');
view(-300,8)

Figure contains 4 axes. Axes 1 contains an object of type scatter. Axes 2 contains an object of type scatter. Axes 3 contains an object of type scatter. Axes 4 contains an object of type scatter.

Вращая график в интерактивном режиме, вы получаете лучшее представление о его структуре.

Интерполированная объемная поверхностная диаграмма

Чтобы увидеть фронт Парето как поверхность, создайте рассеянную интерполяцию.

figure
F = scatteredInterpolant(f(:,1),f(:,2),f(:,3),'linear','none');

Чтобы построить график получившейся поверхности, создайте mesh в пространстве x-y от наименьших до самых больших значений. Затем постройте график интерполированной поверхности.

sgr = linspace(min(f(:,1)),max(f(:,1)));
ygr = linspace(min(f(:,2)),max(f(:,2)));
[XX,YY] = meshgrid(sgr,ygr);
ZZ = F(XX,YY);

Постройте график точек и поверхности Парето.

figure
subplot(2,2,1)
surf(XX,YY,ZZ,'LineStyle','none')
hold on
scatter3(f(:,1),f(:,2),f(:,3),'k.');
hold off
subplot(2,2,2)
surf(XX,YY,ZZ,'LineStyle','none')
hold on
scatter3(f(:,1),f(:,2),f(:,3),'k.');
hold off
view(-148,8)
subplot(2,2,3)
surf(XX,YY,ZZ,'LineStyle','none')
hold on
scatter3(f(:,1),f(:,2),f(:,3),'k.');
hold off
view(-180,8)
subplot(2,2,4)
surf(XX,YY,ZZ,'LineStyle','none')
hold on
scatter3(f(:,1),f(:,2),f(:,3),'k.');
hold off
view(-300,8)

Figure contains 4 axes. Axes 1 contains 2 objects of type surface, scatter. Axes 2 contains 2 objects of type surface, scatter. Axes 3 contains 2 objects of type surface, scatter. Axes 4 contains 2 objects of type surface, scatter.

Вращая график в интерактивном режиме, вы получаете лучшее представление о его структуре.

Постройте график набора Парето в пространстве переменных управления

Вы можете получить график точек на наборе Парето с помощью 'psplotparetox' постройте график функции.

options.PlotFcn = 'psplotparetox';
[x,f] = paretosearch(fun,3,[],[],[],[],lb,ub,[],options);
Pareto set found that satisfies the constraints. 

Optimization completed because the relative change in the volume of the Pareto set 
is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 
'options.ConstraintTolerance'.

Figure paretosearch contains an axes. The axes with title Parameter Space contains an object of type line.

Кроме того, создайте график поля точек значений X в наборе Парето.

figure
subplot(2,2,1)
scatter3(x(:,1),x(:,2),x(:,3),'k.');
subplot(2,2,2)
scatter3(x(:,1),x(:,2),x(:,3),'k.');
view(-148,8)
subplot(2,2,3)
scatter3(x(:,1),x(:,2),x(:,3),'k.');
view(-180,8)
subplot(2,2,4)
scatter3(x(:,1),x(:,2),x(:,3),'k.');
view(-300,8)

Figure contains 4 axes. Axes 1 contains an object of type scatter. Axes 2 contains an object of type scatter. Axes 3 contains an object of type scatter. Axes 4 contains an object of type scatter.

Этот набор не имеет чистой поверхности. Вращая график в интерактивном режиме, вы получаете лучшее представление о его структуре.

Параллельный график

Можно построить график набора Парето с помощью параллельного графика координат. Можно использовать график параллельных координат для любого количества размерностей. На графике каждая цветная линия представляет одну точку Парето, и каждая переменная координат строится на связанной вертикальной линии. Постройте график значений целевой функции с помощью parellelplot.

figure
p = parallelplot(f);
p.CoordinateTickLabels =["Obj1";"Obj2";"Obj3"];

Окрашивайте точки Парето в самую низкую десятую часть значений Obj2.

minObj2 = min(f(:,2));
maxObj2 = max(f(:,2));
grpRng = minObj2 + 0.1*(maxObj2-minObj2);
grpData = f(:,2) <= grpRng;
p.GroupData = grpData;
p.LegendVisible = "off";

Figure contains an object of type parallelplot.

См. также

|

Похожие темы