Grafico del fronte di Pareto 3D
Questo esempio mostra come tracciare un fronte di Pareto per tre obiettivi. Ogni funzione obiettivo è la distanza al quadrato da un particolare punto tridimensionale. Per velocizzare i calcoli, scrivere ciascuna funzione obiettivo in forma vettorializzata come prodotto scalare. Per ottenere un insieme di soluzioni denso, utilizzare 200 punti sul fronte di Pareto.
L'esempio mostra innanzitutto come ottenere il grafico utilizzando la funzione plot integrata 'psplotparetof'. Quindi risolvi lo stesso problema e ottieni il grafico utilizzando gamultiobj, che richiede impostazioni delle opzioni leggermente diverse. L'esempio mostra come ottenere variabili di soluzione per un punto particolare nel grafico di Pareto. Quindi l'esempio mostra come tracciare i punti direttamente, senza utilizzare una funzione di tracciamento, e mostra come tracciare una superficie interpolata invece di punti di Pareto.
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'.

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

Questo grafico mostra molti meno punti rispetto al grafico paretosearch. Risolvi nuovamente il problema utilizzando una popolazione più ampia.
opts.PopulationSize = 400; [xg,fg] = gamultiobj(fun,3,[],[],[],[],lb,ub,[],opts);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.
Cambia l'angolo di visualizzazione per adattarlo meglio al grafico psplotpareto.
view(-40,57)

Trova il punto di soluzione utilizzando i suggerimenti degli strumenti
Selezionare un punto nel grafico utilizzando lo strumento Suggerimenti sui dati.


Il punto raffigurato ha indice 92. Visualizza il punto xg(92,:) che contiene le variabili di soluzione associate al punto raffigurato.
disp(xg(92,:))
-0.2889 0.0939 0.4980
A questo punto valutare le funzioni obiettivo per verificare che corrispondano ai valori visualizzati.
disp(fun(xg(92,:)))
11.5544 15.1912 1.5321
Crea un grafico a dispersione 3D
Tracciare i punti sul fronte di Pareto utilizzando 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)

Ruotando il grafico in modo interattivo, è possibile ottenere una visione migliore della sua struttura.
Grafico di superficie interpolata
Per vedere il fronte di Pareto come una superficie, creare un interpolante sparso.
figure F = scatteredInterpolant(f(:,1),f(:,2),f(:,3),'linear','none');
Per tracciare la superficie risultante, creare una mesh nello spazio x-y dal valore più piccolo a quello più grande. Quindi tracciare il grafico della superficie interpolata.
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);
Rappresenta graficamente i punti di Pareto e la superficie.
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)

Ruotando il grafico in modo interattivo, è possibile ottenere una visione migliore della sua struttura.
Tracciare l'insieme di Pareto nello spazio delle variabili di controllo
È possibile ottenere un grafico dei punti dell'insieme di Pareto utilizzando la funzione di grafico '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'.

In alternativa, creare un grafico a dispersione dei valori x nell'insieme di Pareto.
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)

Questo set non ha una superficie trasparente. Ruotando il grafico in modo interattivo, è possibile ottenere una visione migliore della sua struttura.
Trama parallela
È possibile tracciare il grafico dell'insieme di Pareto utilizzando un grafico a coordinate parallele. È possibile utilizzare un grafico a coordinate parallele per qualsiasi numero di dimensioni. Nel grafico, ogni linea colorata rappresenta un punto di Pareto e ogni variabile coordinata è rappresentata da una linea verticale associata. Rappresentare graficamente i valori della funzione obiettivo utilizzando parellelplot .
figure p = parallelplot(f); p.CoordinateTickLabels =["Obj1";"Obj2";"Obj3"];
Colora i punti di Pareto nel decimo più basso dei valori di 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";