Está en la página 1de 7

Optimización Avanzada

Problemas Programación Entera Mixta (PEM)

Contenido
Problemas de Programación Entera Mixta ........................................................................... 2
1. Organizar una estantería (problema de la mochila) ................................................................................ 2
Problemas de Programación Entera Mixta
1. Organizar una estantería (problema de la mochila)

Un gran almacén desea reorganizar su estantería de electrodomésticos. Tiene datos de demanda de los últimos
meses. Pero la estantería tiene un límite de espacio y no todos los productos ofrecen igual beneficio neto al
almacén. Si los datos que se tienen reportados son los siguientes y la estantería solo permite un volumen de 24
m3 y un peso de 39 k elija los ítems que usted pondría, de manera que alcance a conseguir el máximo beneficio
neto posible total sin exceder el volumen disponible.

Ítem (i) Volumen V(i) (m3) Peso P(i) Beneficio neto ¿Se expone o no?
BN(i) (miles) X(i)
A 8 4 100
B 7 5 80
C 3.5 5 70
D 5 2 20
E 8 6 90
F 3 2 90
G 3 7 80
H 4 3 30
I 1 7 20
J 4 2 30
Solución
Variables de decisión
1 𝑠𝑖 𝑒𝑙 𝑖𝑡𝑒𝑚 𝑖 𝑒𝑠 𝑒𝑥𝑝𝑢𝑒𝑠𝑡𝑜
𝑋𝑖 = {
0 𝑒𝑛 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜
Función objetivo
Maximizar beneficios netos totales
Maximizar ∑𝑖 𝐵𝑁𝑖 𝑋𝑖 (miles de $)
Restricciones
No puede excederse su capacidad en volumen
∑𝑖 𝑉𝑖 𝑋𝑖 ≤ 24 (m3)
No puede excederse su capacidad en peso
∑𝑖 𝑃𝑖 𝑋𝑖 ≤ 39 (k)
Las variables X(i) son binarias.
La solución, aunque es entera se concentra todo en el ítem A, C, F, G, I y J. Con unos beneficios de

ítem Beneficio Volumen Peso


A 100 8 4
C 70 3.5 5
F 90 3 2
G 80 3 7
I 20 1 7
J 30 4 2
Total 390 22.5 27
Holgura NA 24-22.5=1.5 39-27=12

Resolviendo el problema como variables binarias la solución cambia

![Maximizar Beneficios];
[Funcion_Objetivo ]MAX=100*XA + 80*XB + 70*XC+ 20*XD + 90*XE + 90*XF
+ 80*XG + 30*XH + 20*XI+ 30*XJ;
!Sujeto a las restricciones;
!Restricción del volumen;
[Volumen] 8*XA + 7*XB + 3.5*XC+ 5*XD + 8*XE + 3*XF
+ 3*XG + 4*XH + 1*XI+ 4*XJ<=24;
!Restricción del peso;
[Peso] 4*XA + 5*XB + 5*XC+ 2*XD + 6*XE + 2*XF
+ 7*XG + 3*XH + 7*XI+ 2*XJ<=39;
!Indicando que son variables binarias;
@BIN(XA);@BIN(XB); @BIN(XC);@BIN(XD); @BIN(XE);@BIN(XF);
@BIN(XG);@BIN(XH);@BIN(XI);@BIN(XJ);
Otra manera de hacerlo en Lingo programando será: (incluyendo las dos restricciones como vectores)

Model:

sets:
item/1..10/:X,B;
Volumen/1/:V;
Peso/1/:P;
arcoVi(Volumen,item):M1;
arcoPi(Peso,item):M2;

endsets

data:
B = 100 80 70 20 90 90 80 30 20 30;
V=24;
P=39;
M1 = 8 7 3.5 5 8 3 3 4 1 4;
M2 = 4 5 5 2 6 2 7 3 7 2;
enddata

MAX=@sum(item(i):X(i)*B(i));
@for(Volumen(j):@sum(item(i):X(i)*M1(j,i))<=V(j));
@for(Peso(j):@sum(item(i):X(i)*M2(j,i))<=P(j));
@for(item(i):X(i)>=0);
@for(item(i):@Bin(X(i)));
Otra manera de hacerlo en Lingo programando será: (incluyendo las dos restricciones como matriz)

Model:

sets:
item/1..10/:X,B;
Capacidad/1 2/:C;
arcoCi(Capacidad,item):M;

endsets

data:
B = 100 80 70 20 90 90 80 30 20 30;
C=24
39;
M = 8 7 3.5 5 8 3 3 4 1 4
4 5 5 2 6 2 7 3 7 2;
enddata

MAX=@sum(item(i):X(i)*B(i));
@for(Capacidad(j):@sum(item(i):X(i)*M(j,i))<=C(j));
@for(item(i):X(i)>=0);
@for(item(i):@Bin(X(i)));
En resumen, las tres formas de hacer el ejercicio es:

Otra manera de hacerlo es usando la función @ole que traiga los datos desde Excel, para ello el libro debe estar
abierto, lo único que se cambiaría en la programación es la parte de los datos

En el argumento de la función @ole se le debe indicar como se llama el libro de Excel, y como se llama el rango
de los datos en Excel, notar que lo coeficientes de la función objetivo fueron llamados beneficios:
Notar que los valores del lado derecho de las restricciones fueron llamados “restriccion”

y los valores de los coeficientes del lado izquierdo de las restricciones fueron llamados “Capacidad”

Los nombres de los rangos son arbitrarios y se deben poner en EXCEL.

También podría gustarte