Постройте 3-D переднюю сторону Парето

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

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

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

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

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

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' функция plot.

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.

Смотрите также

|

Похожие темы