Programación Multiobjetivo
Hoy quiero compartir con ustedes este interesante tema en lo que usualmente trabajo
minimizar F(x)=(f_1 (x),f_2 (x),...,f_n (x)) con x en R^ n en uno de un objetivo, haciendo uso de unas nueva variables que varía entre cero y uno, y cuya suma exacta es uno, esto es:
minimizar w(x,y)=∑(i=0)^n▒f_i (x)*z_i con ∑(i=0)^n▒z_((i) ) =1 y 0⩽z_i⩽1∀i=1,...,n.
Uno de los ejemplos más conocidos es el ejemplo propuesto por Shaffer que consiste en minimizar dos funciones parabólicas, en donde a medida que nos aproximamos al mínimo de una nos alejamos del mínimo de la otra, este tipo de problemas se conoce como problemas en conflictos, pero en particular este es de parcialmente en conflicto, debido a que hay zonas de la función no se contradice la búsqueda del mínimo, la zona totalmente en conflicto se presenta en el rango [0,2]
El problema de shaffer se define como (o uno de los problemas de shaffer):
minimizar F(x)=((x)^2,(x-2)^2 )con x en el rango [-4,4], notemos que 0 es el mínimo de la primera función y 2 el de la segunda pero los objetivos están en conflicto, y las técnicas de programación matemáticas usuales no son prudentes en el caso, debido a que no existe un único minimizador, sino un conjunto de minimizadores que llamaremos conjunto eficiente, y las imágenes de ese conjunto se llamará conjunto pareto, al escribirlo haciendo uso de la suma ponderada, tenemos:
minimizar w(x,z)=z_1x^2+z_2(x-2)^2; ahora este problema puede ser resuelto con las técnicas usuales de programación matemática, sin embargo, presente su solución a través de GAMS que es una herramienta muy útil y programación se presenta a continuación:
Problema de shaffer en GAMS
$title escalar shaffer
- definir parámetros
scalar alp /0/; - variables del problema
variables
z valor de la función objetivo
x nivel de la actividad i;
positive variable x;
- definimos limites de variables
x.lo=-4;
x.up=4; - funciones
equations
cost funcion objetivo;
cost..z=e=alp(power(x,2))+(1-alp)(power((x-2),2));
model shaffer /all/;
solve shaffer USING nlp MINIMIZING z;
- son para comunicar matlab y Gams
$if exist matdata.gms $include matdata.gms - mostrar resultados
display x.l
$libinclude matout x.l I
$libinclude matout z.l
Note que en la programación, he llamado a z1 como alp y z2 como (1-alp) esto para que la suma de 1, la solución del problema es cualquier valor entre [0,2] y esto dependerá del valor que le demos a alp, al variar este valor obtendremos todo el conjunto eficiente, y con animo de ver su representación gráfica, podemos enlazar GAMS con MATLAB haciendo uso las ultimas lineas del programa.
Hacemos la corrida en GAMS, este programa se guardo como shaffer1 y este almacenará los valores de la función costo ponderada, junto con el vector de decisión “x”, el programa para la representación grafica en matlab podría ser:
% ejemplo de shaffer con suma ponderada
clc
h=0:0.1:1;
[m,n]=size(h);
y1=[];
y2=[];
x1=[];
for i=1:n
alp=h(i);
[x,z]=gams('shaffer1','alp');
% disp(x)
% pause(0.5)
x1(i)=x.val;
y1(i)=x1(i)^2;
y2(i)=(x1(i)-2)^2;
alp=[];
end
plot(y1,y2,'*')
La gráfica queda representada por:
En economía, los problemas multiobjetivos son ampliamente conocidos y el concepto de pareto muy utilizado, en estas líneas solo describo de forma ilustrativa algo del método.
La primera imagen fue realizada en Paint por mi persona para una tesis, la segunda imagen fue elaborada en MATLAB
contenido 100% original con el apoyo del
Proyecto de Curación Comunitaria de Steem @steemcurator04
Buen trabajo, hagamos de Steem algo grande.
Click aquí para entrar a la COMUNIDAD LATINA