Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
![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”