Programación Multiobjetivo

in Comunidad Latina4 years ago

Hola Amigos de Steemit

Hoy quiero compartir con ustedes este interesante tema en lo que usualmente trabajo

La mayoría de los problemas, por lo menos los que se pueden representar matemáticamente, son multiobjetivos, por ejemplo se desea, maximizar ganancias y minimizar costos al mismo tiempo, para poder hacer esto, hacemos uso de la programación matemática multiobjetivo, en esos casos se definen dos espacios de trabajo, el espacio de decisión y el espacio objetivo, el primero esta definido por la zona factible de la variable de decisión, y el segundo por la imagen de esas variables, en la figura se muestra estos espacios para un problema biobjetivo.

Ahora bien, la idea en estas lineas, es presentar de manera muy simple uno de los métodos muy conocidos en programación matemática, la suma ponderada, que consiste en escribir un problema multiobjetivo, definido como:

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

Sort:  
Desde @steemitvenezuela apoyamos tu publicación con nuestro voto por ser un Contenido 100% Original. Puedes leer nuestros reportes de curación dándole click aquí. Te invitamos a las reuniones semanales en discord por nuestro canal de voz. Sigue publicando en la COMUNIDAD LATINA.
 4 years ago 
Has sido recompensado por @acostaeladio por ser un
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

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64093.86
ETH 3123.80
USDT 1.00
SBD 3.94