Постройте 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 object. The axes object with title Pareto Front contains an object of type line.

opts = optimoptions('gamultiobj',"PlotFcn","gaplotpareto","PopulationSize",200);
[xg,fg] = gamultiobj(fun,3,[],[],[],[],lb,ub,[],opts);
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Pareto front contains an object of type line.

Этот график показывает многим меньше точек, чем paretosearch график. Решите задачу снова с помощью более многочисленного населения.

opts.PopulationSize = 400;
[xg,fg] = gamultiobj(fun,3,[],[],[],[],lb,ub,[],opts);
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.

Измените угол обзора, чтобы лучше совпадать с psplotpareto график.

view(-40,57)

Figure Genetic Algorithm contains an axes object. The axes object with title Pareto front contains an object of type line.

Найдите точку решения Используя подсказки

Выберите точку в графике при помощи инструмента Data Tips.

Изображенная точка имеет индекс 92. Отобразите точку xg(92,:) это содержит переменные решения, сопоставленные с изображенной точкой.

disp(xg(92,:))
   -0.2889    0.0939    0.4980

Выполните целевые функции в этой точке, чтобы видеть, что она совпадает с отображенными значениями.

disp(fun(xg(92,:)))
   11.5544   15.1912    1.5321

Создание 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 objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter. Axes object 3 contains an object of type scatter. Axes object 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 objects. Axes object 1 contains 2 objects of type surface, scatter. Axes object 2 contains 2 objects of type surface, scatter. Axes object 3 contains 2 objects of type surface, scatter. Axes object 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 object. The axes object 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 objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter. Axes object 3 contains an object of type scatter. Axes object 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.

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

|

Похожие темы