exponenta event banner

Участок 3-D Фронт Парето

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

В примере сначала показано, как получить график с помощью встроенного '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.

Создайте 3D диаграмму рассеяния

Печать точек на передней панели Pareto с помощью 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');

Для построения графика результирующей поверхности создайте сетку в пространстве 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.

См. также

|

Связанные темы