Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Genere y trace un frente de Pareto

Este ejemplo muestra cómo generar y trazar un frente de Pareto para una función multiobjetivo 2-D utilizando.fgoalattain

Los dos objetivos en este ejemplo son las versiones desplazadas y escaladas de la función convexa 1+x2.

function f = simple_mult(x)  f(:,1) = sqrt(1+x.^2); f(:,2) = 4 + 2*sqrt(1+(x-1).^2);

Ambos componentes están aumentando como disminuciones por debajo de 0 o aumentos por encima de 1.x Entre 0 y 1, f1(x) está aumentando y f2(x) está disminuyendo, por lo que hay una región de contrapartida.

t = linspace(-0.5,1.5); F = simple_mult(t); plot(t,F,'LineWidth',2) hold on plot([0,0],[0,8],'g--'); plot([1,1],[0,8],'g--'); plot([0,1],[1,6],'k.','MarkerSize',15); text(-0.25,1.5,'Minimum(f_1(x))') text(.75,5.5,'Minimum(f_2(x))') hold off legend('f_1(x)','f_2(x)') xlabel({'x';'Tradeoff region between the green lines'})

Para encontrar el frente de Pareto, primero encuentra el minima sin restricciones de las dos funciones. En este caso, puede ver por inspección que el mínimo de f1(x) es 1, y el mínimo de f2(x) es 6, pero en general puede que necesites usar una rutina de optimización.

En general, escriba una función que devuelva un componente concreto de la función multiobjetivo.

function z = pickindex(x,k) z = simple_mult(x); % evaluate both objectives z = z(k); % return objective k

A continuación, busque el mínimo de cada componente mediante un solucionador de optimización. Puede utilizar en este caso, o para problemas de mayor dimensión.fminbndfminunc

k = 1; [min1,minfn1] = fminbnd(@(x)pickindex(x,k),-1,2); k = 2; [min2,minfn2] = fminbnd(@(x)pickindex(x,k),-1,2);

Establezca objetivos que sean el optima sin restricciones para cada componente. Usted puede alcanzar simultáneamente estos objetivos sólo si las funciones multiobjetivas no interfieren entre sí, lo que significa que no hay compensación.

goal = [minfn1,minfn2];

Para calcular el frente de Pareto, tome los vectores de peso [, 1 –] de 0 a 1.aaa Resuelva el problema de logro de objetivo, estableciendo los pesos en los distintos valores.

nf = 2; % number of objective functions N = 50; % number of points for plotting onen = 1/N; x = zeros(N+1,1); f = zeros(N+1,nf); fun = @simple_mult; x0 = 0.5; options = optimoptions('fgoalattain','Display','off'); for r = 0:N     t = onen*r; % 0 through 1     weight = [t,1-t];     [x(r+1,:),f(r+1,:)] = fgoalattain(fun,x0,goal,weight,...         [],[],[],[],[],[],[],options); end  figure plot(f(:,1),f(:,2),'k.'); xlabel('f_1') ylabel('f_2')

Puede ver el equilibrio entre los dos objetivos.

Consulte también

Temas relacionados