LENGUAJE DE MODELADO LINGO
¿Qué es LINGO?
LINGO es una herramienta simple para utilizar la potencialidad de la optimización lineal y
no lineal para formular problemas muy grandes de una manera concisa, resolverlos y
analizar su solución. La optimización le ayuda a encontrar la respuesta que representa la
mejor solución; obtiene la mayor utilidad, respuesta o felicidad; o logra el menor costo,
desperdicio o disconformidad. A menudo estos problemas significan hacer el uso más
eficiente de sus recursos- incluyendo dinero, tiempo, maquinaria, personal, inventario
y mucho más. Los problemas de optimización se clasifican a menudo como lineales y no
lineales, dependiendo si las relaciones entre las variables son o no lineales.
LINGO es un lenguaje de modelado matemático diseñado para formular y resolver
problemas de programación lineal, programación entera y programación no lineal.
Lenguaje de modelado de LINGO
Sintaxis de LINGO
La sintaxis que se utiliza en este programa es muy sencilla. Para el nombre de las
Variables y otros identificadores se establece que pueden tener 32 caracteres como
Máximo, Deben comenzar con una letra seguido de letras, dígitos o _.
LINGO no distingue entre mayúsculas y minúsculas.
Con respecto a las sentencias:
• Todas las sentencias deben terminar en un punto y coma.
• Para darle un nombre a la función objetivo o a las restricciones, estos se deben colocar
entre corchetes.
• Para declarar la función objetivo debemos colocar las palabras reservadas MAX o MIN,
(aparecerán resaltadas en azul) seguidas del signo = .
• Los comentarios deben comenzar con un signo ”!” , los cuales aparecen resaltados en
verde. Al igual q las sentencias los comentarios finalizan con un punto y coma.
Una formulación en LINGO, tiene tres secciones:
1. Sección de conjuntos, SETS, que especifica los conjuntos y sus atributos
2. Sección de datos, DATA, que proporciona los datos a usar o indica donde
obtenerlos
3. Sección del modelo, MODEL, lugar donde se describe el modelo matemático.
SECCION DE CONJUNTOS
Cada conjunto tiene la sintaxis siguiente:
NOMBRE/ LOS MIEMBROS/: LOS ATRIBUTOS;
SETS:FABRICAS /F1,F2/ : CAPACIDAD;
CENTROS /C1,C2,C3/ :DEMANDA;
RUTAS( FABRICAS, CENTROS ): C, X;
ENDSETS
Los conjuntos, FABRICAS y CENTROS se denominan conjuntos primitivos y el último
se denomina conjunto derivado, donde C y X representan, respectivamente, los costos
unitarios de transporte y cantidad transportada de las fabricas a los centros.
SECCION DE DATOS
Los valores de los atributos de los elementos de los conjuntos, tienen la sintaxis siguiente:
DATA:
CAPACIDAD = 30, 20;
DEMANDA = 10, 25, 15;
C = 2, 4, 6,7, 10, 1;
ENDDATA
SECCION DEL MODELO
Para presentar el modelo se utiliza dos funciones @SUM y @FOR.
@SUM calcula la suma de una expresión sobre todos los miembros del conjunto.
La forma general es:
@SUM ( set: expresión)
Suma la expresión que sigue a los dos puntos.
Por ejemplo:
@SUM (RUTAS: C*X)
Suma la expresión que sigue a los dos puntos que corresponde al producto del costo
unitario de transporte por la cantidad transportada de cada origen a cada destino
considerado.
La segunda función es @FOR, esta función sirve para generar restricciones sobre los
miembros de un conjunto. La forma general es:
@FOR(set: restricción)
Por ejemplo:
@FOR(CENTROS(J):@SUM(FABRICAS(I):X(I,J))<=CAPACIDAD(I));
Indica que se genere la restricción que sigue a los dos puntos para cada miembro del
conjunto que les precede. Cada elemento del conjunto CENTROS(J) para J = 1,2,3 se
genera las restricciones siguientes:
J = 1: X11 + X21 >= 10
J = 2: X12 + X22 >= 25
J=3 X13 + X23 >= 15
La formulación completa es como sigue:
MODEL:
! 2 FABRICAS, 3 CENTROS, problema de transporte;
SETS:
FABRICAS /F1, F2/: CAPACIDAD;
CENTROS /C1, C2, C3/ : DEMANDA;
RUTAS (FÁBRICAS, CENTROS): C, X;
ENDSETS
DATA:
CAPACIDAD = 30,20;
DEMANDA = 10, 25,15;
C = 2, 4, 6,
7,10, 1;
ENDDATA
! LA FUNCION OBJETIVO;
MIN = @SUM(RUTAS:C*X);
! RESTRICCIONES DE LA DEMANDA;
@FOR (CENTROS (J): @SUM (FABRICAS (I): X (I, J)) >= DEMANDA (J));
! RESTRICCIONES DE LA OFERTA;
@FOR (FABRICAS (I): @SUM (CENTROS (J): X (I, J)) <= CAPACIDAD (I));
END
Para presentar el modelo algebraico se hace clic en la ficha LINGO, Generate,
Algebraic,Generate y se tiene como resultado lo siguiente:
MIN = X*( F2, C3) + 10 *X( F2, C2) + 7 *X( F2, C1) + 6 *X( F1, C3) + 4 *X( F1, C2) + *2
X( F1, C1)
SUBJECT TO
2] X( F2, C1) + X( F1, C1) >= 10
3] X( F2, C2) + X( F1, C2) >= 25
4] X( F2, C3) + X( F1, C3) >= 15
5] X( F1, C3) + X( F1, C2) + X( F1, C1) <= 30
6] X( F2, C3) + X( F2, C2) + X( F2, C1) <= 20
END
Se puede omitir el paso anterior pasando a la solución del modelo haciendo clic en
LINGO, Solve obteniendo el siguiente resultado:
Objective value: 160.0000
Variable Value Reduced Cost
CAPACIDAD( F1) 30.00000 0.0000000
CAPACIDAD( F2) 20.00000 0.0000000
DEMANDA( C1) 10.00000 0.0000000
DEMANDA( C2) 25.00000 0.0000000
DEMANDA( C3) 15.00000 0.0000000
C( F1, C1) 2.000000 0.0000000
C( F1, C2) 4.000000 0.0000000
C( F1, C3) 6.000000 0.0000000
C( F2, C1) 7.000000 0.0000000
C( F2, C2) 10.00000 0.0000000
C( F2, C3) 1.000000 0.0000000
X( F1, C1) 5.000000 0.0000000
X( F1, C2) 25.00000 0.0000000
X( F1, C3) 0.0000000 10.00000
X( F2, C1) 5.000000 0.0000000
X( F2, C2) 0.0000000 1.000000
X( F2, C3) 15.00000 0.0000000
Uso de funciones de dominio de variables
A menos que se especifique lo contrario, las variables en un modelo de LINGO son
continuas y no negativas. Más específicamente las variables pueden asumir cualquier
valor real desde cero hasta más infinito. En muchos casos este dominio para una variable
puede ser inapropiado. Por ejemplo puede necesitarse que una variable asuma valores
negativos, o solamente valores enteros. LINGO está provisto de cuatro funciones de
dominio de variables que permiten sobrepasar el dominio por omisión de una variable:
@GIN Limita la variable sólo a valores enteros
@BIN Hace una variable binaria (0 ó 1)
Permite que la variable tome cualquier valor
@FREE
real (positivo o negativo)
Limita la variable para que se ajuste a un rango
@BND
finito
Ejemplos de uso de variables enteras:
@GIN(X); Transforma la variable escalar X en entera
@GIN(PRODUCE(5)); Transforma la variable PRODUCE(5) en entera
@FOR(DAYS(I): @GIN(START(I))); Transforma todas las variables del atributo STARTen
binarias
Ejemplos de uso de variables binarias:
@BIN(X); Transforma la variable escalar X en binaria
@BIN(INCLUDE(4));Transforma la variable INCLUDE(4) en binaria
@FOR(ITEMS:@BIN(INCLUDE));Transforma todas las variables del atributo INCLUDE en
binarias
Ejemplos de uso de variables libres:
@FREE(X); Transforma la variable escalar X en libre
@FREEE(QUANTITY(4)); Transforma la variable QUANTITY(4) en libre
@FOR(ITEMS:@FREE(QUANTITY));Transforma todas las variables del atributo
QUANTITY en libres
Ejemplos de uso de variables con límites:
@BND(-1, X, 1) : Restringe la variable X al intervalo [-1, 1]
@BND(100, QUANTITY(4), 200): Limita QUANTITY(4) entre 100 y 200
@FOR(ITEMS: @BND( 10, Q, 20)): Fija los límites de todas las variables del atributo Q
en 10 y 20
@FOR(ITEMS: @BND(QL, Q, QU)): Fija los límites de todas las variables del atributo Q
en QL y QU (A QL y QU deben habérsele asignado valores en la sección de datos)
OPERADORES LOGICOS
LINGO tiene nueve operadores lógicos:
NOT (no), EQ (igual), NE (no igual), GT (mayor que), GE (mayor igual), LT (menor igual),
LE (menor igual), AND (y) y OR (o) que se utilizan para comparar valores, la forma de
usar es: #operador#.
Problema Nº 1:(MEZCLA) (usando 1 variables)
Una compañía Fabrica tres productos de caucho: AIRTEX (material esponjoso),
EXTENDEX (material elástico) y RESISTEX (material rígido). Los tres productos requieren
los mismos tres polímeros químicos y una base. La cantidad de cada ingrediente usado
por libra del producto final se muestra en la siguiente tabla.
Ingrediente (OZ/LB de producto)
Producto
Polímero A Polímero B Polímero C Base
AIRTEX 4 2 4 6
EXTENDEX 3 2 2 9
EXTENDEX 6 3 5 2
Inventario 500 425 650 1100
La compañía tiene el compromiso de producir ala menos 1000 libras de airtex,500 libras
de extendex y 400 libras de resistex para la próxima semana pero la gerencia de la
compañía sabe que puede vender más de cada uno de los tres productos .los inventarios
actuales de los ingredientes son 500 libras del polímero A , 425 libras del polímero B,650
libras el polímero C Y 1100 libras de la base . Cada libra de airtex produce a la compañía
una ganancia de $ 7, cada libra de extendex una ganancia de $7 y cada libra de resistex
una ganancia de $6.como gerente del departamento de producción, usted necesita
determinar el plan de producción optimo para esta semana.
Solución:
Ingredientes (oz/lb. de producto)
Polímer Polímer Polímer
compromis gananci
Producto o o o base
o a
A B C
airtex 4 2 4 6 1000 7
extendex 3 2 2 9 500 7
resistex 6 3 5 2 400 6
inventario 500 425 650 1100
Sea:
Xi: la cantidad de ingredientes del PRODUCTO i(i=airtex,extendex,resistex)que se puede
usar.
FUNCION OBJETIVO:
X*
i
1
ganacia
(i) ;donde ganancia es la utilidad ya sea del
i
Producto airtex, extendex, resistex.
Entonces: MAX Z = 7*X1 + 7*X2 + 6*X3
SUJETO A:
X
i
1
COMPROMISO
(
i
) i
Para i=1-----X1>=1000
Para i=2-----X2>=500
Para i=3-----X3 >=400
3
X
*
i
1
ito
(i
,
j)
requerimen
inventario
(
j
)*
16
, donde requerimiento (i , j) es la
cantidad
de producto de cada tipo de
ingrediente.
para J=1------ 4X1 + 3X2 + 6X3<= 500*16;
para J=2------ 2X1 + 2X2 + 3X3<= 425*16;
para J=3------ 4X1 + 2X2 + 5X3 <= 650*16;
para J=4------ 6X1 + 9X2 + 2X3 <= 1100*16;
SETS:
PRODUCTO/AIRTEX EXTENDEX RESISTEX/:NIVEL,COMPROMISO,GANANCIA;
INGREDIENTE/POLIA POLIB POLIC/:INVENTARIO;
PROIN(PRODUCTO,INGREDIENTE):X;
ENDSETS
DATA:
COMPROMISO=1000,500,400;
GANANCIA=7,7,6;
INVENTARIO =500,425,650,1100;
X=4,2,4,6,
3,2,2,9,
6,3,5,2;
ENDDATA
!FUNCION OBJETIVO MAXIMIZAR LA UTILIDAD;
MAX=@SUM(PRODUCTO:GANANCIA*NIVEL);
!RESTRICCION DEL INVENTARIO;
@FOR(INGREDIENTE(I):@SUM(PRODUCTO(P):X(P,I)*NIVEL(P))<=INVENTARIO(I)*16)
;
!RESTRICCION DEL COMPROMISO;
@FOR(PRODUCTO:NIVEL>=COMPROMISO);
END
Problema Nº 2:(DIETAS) (usando 1 subíndice):
El departamento de nutrición de un hospital prepara 30 menús de cena, uno para cada día
del más. Una comida consiste en espagueti,pavo,papas en escalope y pastel de
manzanas. Como director del departamento de nutrición, usted ha determinado que esta
comida debe proporcionar 63000 miligramos de proteínas,10 miligramos de hierro,15
miligramos de niacina, 1 miligramo de tiamina y 50 miligramos de vitamina C .cada 100
gramos de esta comida proporciona la cantidad de cada nutriente y grasas indicadas en la
siguiente tabla:
NUTRIENTE(mg / 100g)
Proteína Hierro Tiacina Tiamina Vitna c Grasa
Espagueti 5000 1.1 1.4 0.18 0.0 5000
Pavo 29300 1.8 5.4 0.06 0.0 5000
Papas 5300 0.5 0.9 0.06 10 7900
Espinaca
3000 2.2 0.5 0.07 28 300
s
Pastel 4000 1.2 0.60 0.15 3.0 14300
Solución: hacemos nuestra tabla
Potaje NUTRIENTE(mg/100g)
Proteína Hierro Tiacina Tiamin Vitna c Grasa Maxim
a o
Espaguet 5000 1.1 1.4 0.18 0 5000 300
i
Pavo 29300 1.8 5.4 0.06 0 5000 300
Papas 5300 0.5 0.9 0.06 10 7900 200
Espinaca 3000 2.2 0.5 0.07 28 300 100
s
Pastel 4000 1.2 0.6 0.15 3 14300 100
Minimo 63000 10 15 1 50 0
Sea Xi: cantidad de nutriente de tipo (i=1,2,3,4,5,6)
i=1---espagueti
i=2---pavo
i=3---papas
i=4---espinacas
i=5---pastel
i=6---grasa
Función objetivo:
min Z=X6;
Sujeto a:
Restricción de la cantidad de grasa total que debe haber :
5
X 6 X i * CGi 0 ; donde CGi es la cantidad de grasa ya sea en
i 1
Pavo , papas ,espinacas ,pastel, espagueti.
Por lo tanto: X6 – X1*5000 – 5000*X2 – 7900*X3 – 3000*X4 – 14300*X5=0
Restricción de la cantidad de nutriente por cada 100 mg que proporciona:
X
i 1
i MAXIMOi / 100 ; donde MAXIMO i es la cantidad máxima de cada potaje ya
sea de
Espagueti, pavo, papas, espinacas y pastel
Por lo tanto:
Para i=1-- X1<=300/100
Para i=2-- X2<=300/100
Para i=3-- X3<=200/100
Para i=4-- X4<=100/100
Para i=5-- X5<=100/100
Restricción de la cantidad de nutriente por pataje que debe haber como mínimo:
X
i 1
i * nutriente j ,i MINIMO j
Donde:
NUTRIENTEj,i . j ,es la cantidad de nutriente ya sea de proteína, hierro, tiacina, tiamina,
vitna C ,grasa por cada potaje i ya sea:Espagueti,pavo,papas,espinacas,pastel.
yMINIMOj es la cantidad de potaje como máximo que debe existir.
Por lo tanto:
Para i=1,2,3,4,5 Y j=1
X1*5000 + X2*29300 + X3*5300 + X4*3000 + X5*4000 >=63000
Para i=1,2,3,4,5 Y j=2
X1*1.1 + X2*1.8 + X3*0.5 + X4*2.2 + X5*1.2 >=10
Para i=1,2,3,4,5 Y j=3
X1*1.4 + X2*5.4 + X3*0.9 + X4*0.5 + X5*0.6 >=15
Para i=1,2,3,4,5 Y j=4
X1*0.18 + X2*0.06+ X3*0.06 + X4*0.07 + X5* 0.15 >=1
Para i=1,2,3,4,5 Y j=5
X1*5000 + X 2*5000 + X3*7900 + X4*300 + X5*14300 >=0
SETS:
POTAJE/ESPAGUETI PAVO PAPAS ESPINACAS
PASTEL/:NIVEL,MAXIMO;
NUTRIENTE/PROTEINA HIERRO TIACINA TIAMINA VITAMC
GRASA/:MINIMO;
PONU(POTAJE,NUTRIENTE):REQ;
ENDSETS
DATA:
MAXIMO=300,300,200,100,100;
MINIMO=63000,10,15,1,50,0;
REQ=5000,1.1,1.4,0.18,0,5000,
29300,1.8,5.4,0.06,0,5000,
5300,0.5,0.9,0.06,10,7900,
3000,2.2,0.5,0.07,28,300,
4000,1.2,0.6,0.15,3,14300;
ENDDATA
MIN=GRASA;
GRASA=@SUM(POTAJE(I):REQ(I,6)*NIVEL(I));
@FOR(POTAJE(I):NIVEL(I)<=MAXIMO(I)/100);
@FOR(NUTRIENTE(J):@SUM(POTAJE(I):REQ(I,J)*NIVEL(I))>=MINIMO(J));
END
HACIENDO CORRER EL PROGRAMA CON LINGO 10.0
Objective value: 54800.00
Total solver iterations: 3
Variable Value Reduced Cost
NIVEL( ESPAGUETI) 3.000000 0.000000
NIVEL( PAVO) 2.833333 0.000000
NIVEL( PAPAS) 2.000000 0.000000
NIVEL( ESPINACAS) 1.000000 0.000000
NIVEL( PASTEL) 0.6666667 0.000000
A ASI SUCESIVAMENTE……….
Problema Nº 3:(TRANSPORTE) (usando 2 subíndices):
La cadena de restaurantes “CUATRO MARIAS” se especializa en la preparación y venta
de pescados y mariscos. La demanda de pescado de las 4 sucursales de la cadena de
restaurantes “CUATRO MARIAS” es presentada en la siguiente tabla.
Jesús
Sucursal Callao San Luis Los Olivos
María
Demanda(Ton) 15 17 22 12
La cadena de restaurantes “CUATRO MARIAS” compra el pescado de 3 proveedores que
proporcionan las siguientes cantidades (ton) de pescado
Villa el
Proveedor ventanilla chorrillos
salvador
cantidad 30 25 21
Los costos de transporte (soles/tonelada) de los proveedores a las sucursales son:
sucursal
Proveedor Jesús María Callao San Luis Los Olivos
Ventanilla 6 2 6 7
V. salvador 4 9 5 3
chorrillos 8 8 1 5
Formule el modelo de PL que permita la distribución óptima de pescado de los
proveedores de las sucursales.
SOLUCION:
El problema nos menciona q debemos determinar la distribución óptima de pescado o
también dicho la cantidad de toneladas pescado q debe ir de cada proveedor a cada
sucursal de la empresa, este dato debe reflejarse en la función objetivo (FO).
Xij: cantidad de pescado distribuido (en toneladas) por el proveedor i hacia destino j
donde: (i va de 1 a 3 y j va de 1 a 4)
En esta expresión “i” (por convención representa las filas) representa a los proveedores y
“j” representa a las sucursales de la empresa “CUATRO MARIAS”
Ya tenemos el conjunto de variables con que vamos a trabajar pero eso no es suficiente
para determinar la FO, para nuestro caso nos pide determinar la distribución óptima para
tener el menor costo posible debido a la distribución del pescado.
sucursal
Proveedor Jesús Maria Callao San Luis Los Olivos
Ventanilla 6 2 6 7
V. salvador 4 9 5 3
chorrillos 8 8 1 5
Para armar la función objetivo necesitamos relacionar los datos costo unitario por
tonelada de pescado por número de toneladas pescados trasportados esto nos daría es
costo total de transporte.
En la tabla relacionamos primero al primer proveedor ventanilla (rojo) con la primera
sucursal Jesús María (verde) este dato nos refleja el costo por tonelada de trasporte
desde ventanilla hacia Jesús María (azul) lo cual nos da la relación 6*X11 este mismo paso
es para los demás datos con lo cual tendríamos:
3 4
FO: MIN Z = Xij
i
*Cij
1 j
1
MIN Z = 6*X11 +2*X12+ 6*X13+ 7*X14 +4*X21+ 9*X22 +5*X23 +3*X24 +8*X31 +8*X32 +1*X
335*X34
Determinando las restricciones:
Al determinar nuestra función objetivo ya tenemos un punto de partida de donde trabajar
ahora debemos relacionar de la forma más adecuada todos los datos q tengamos a mano
de preferencia almacenarlos en una sola tabla.
Sucursal
Los disponibilida
proveedor Jesús M. Callao S. Luis
Olivos d
ventanilla 6 2 6 7 30
V.
4 9 5 3 25
Salvador
Chorrillos 8 8 1 5 21
Demanda 15 17 22 12
A la tabla de costos hemos hecho unos añadidos los cuales son la disponibilidad y la
demanda, la que nos ayudaran a determinar las restricciones del problema
Restricción de la demanda:
Para la determinación de las restricciones se debe tener muy en cuenta la relación entre
los datos, para el caso de la demanda ella está relacionada directamente con los
proveedores ya q refleja la cantidad de toneladas q requiere cada sucursal. Entonces la
restricción de la demanda va estar basada según sucursal “j”.
Para j=1-----
X
i
disponibil
1
idad
(
i
,1
)
1
X11+ X21 +X31 15 (Jesús Maria)
Para j=2-----
X
i
disponibil
1
idad
(
i
,2
)
2
X12+ X22 +X32 17 (Callao)
Para j=3-----
X
i1
disponibil
idad
i
,3(
3)
X13+ X23 +X33 22 (San Luis)
Para j=4-----
X
i
disponibil
1
idad
(
i
,4
)
4
X14+ X24 +X34 12 (Los Olivos)
El símbolo de mayor igual en las restricciones quiere decir q la empresa requiere
satisfacer sus necesidades de demanda más un excedente para q no haya problemas de
insuficiencia de comida
Como se observa no se ha tomado los datos de los costos de transporte, esto se debe a
que la DEMANDAestá en función a las cantidad de toneladas de pescado y no en función
a los costos, es por ello q se relaciona directamente con las cantidades a transportar, en
conclusión se deben relacionar datos q tengan igual UNIDADES de medición para q
exista concordancia en el problema.
Restricción de la disponibilidad:
Se trabaja de forma análoga a la restricción de demanda pero como se vio en el cuadro
anterior la disponibilidad no está relacionada con las sucursales sino con los proveedores
“i”, entonces
El símbolo de menor igual refleja q los pro veedores pueden distribuir todo el pescado q
poseen o menos hacia las sucursales.
Para i=1-----
X
j1
COMPRA
(
1)
1
,j
X11+ X12 +X13 30 (ventanilla)
Para i=2-----
X
j1
COMPRA
(
2)
2
,j
i=2 X21+ X22 +X23 25 (Villa el Salvador)
2
Para i=3-----
X
j1
COMPRA
(
3)
3
,j
i=3 X31+ X32 +X33 21 (Chorrillos)
Al igual que la demanda la disponibilidad está en función a la cantidad de toneladas
trasportadas así q no debe estar relacionada con ninguna dato que refleje costos.
Problema Nº 3:(usando 3 subíndices):
La ciudad de Busville tiene tres distritos escolares. En la tabla A se da el número de
estudiantes que pertenecen a grupos minoritarios y no minoritarios. El 25% de todos los
estudiantes (200/800) pertenecen a grupos minoritarios.
Tabla A:
ESTUDIANTES
ESTUDIANTES DE GRUPOS
DE GRUPOS NO
DISTRITO MINORITARIOS MINORITARIOS
1 50 200
2 50 250
3 100 150
La corte local a decidido que cada una de las dos escuelas de segunda enseñanza
de la ciudad (Cooley y waltwhitman) debe tener aproximadamente (más o menos 5%)
el mismo porcentaje de estudiantes de minorías, que la ciudad entera. En la tabla B
se da las distancias entre los distritos escolares y las escuelas. Cada escuela debe
tener entre 300 y 500 estudiantes. Utilice la programación lineal para determinar la
asignación de los estudiantes a cada escuela para minimizar la distancia total que
tienen que viajar los estudiantes para llegar a ella.
Tabla B:
WALT
DISTRITO COOLEY WHITMAN
1 1 2
2 2 1
3 1 1
Solución:
Primero vamos a encontrar la función objetivo, la escuela busca minimizar la distancia
total recorrida por sus estudiantes desde su distrito a la escuela y cuantos estudiantes son
mayorías y minoritarios, entonces vamos a llamar a la variable estudiantesi,j,k, donde i:
estudiantes del distrito i (i=1,2,3) que pertenecen al grupo j (1:minoria,2:mayoria) y que
estudian en la escuela k ( 1:Cooley,2:Walt Whitman).Si lo queremos expresar
escalarmente con los datos de la tabla Nro 2
MIN=1*(estudiantes 111+ estudiantes 121)+2*(estudiantes 211+2* estudiantes
221)+1*(estudiantes 311+ estudiantes 321)+2*(estudiantes 112+ estudiantes
222)+1*(estudiantes 221+ estudiantes 222)+1*(estudiantes 312+1* estudiantes 322)
Esta fórmula nos explica que se está multiplicando la distancia recorrida de la escuela k
con la cantidad de estudiantes de tipo j (1: minoria y 2: mayoria) en cada distrito i. Si lo
queremos expresar matemáticamente seria:
MINIMIZAR Σ DISTANCIAik * ESTUDIANTEijK
Las Restricciones:
La primera restricción va ser con respecto a cantidad de alumnos de los dos tipos minoría
y mayoría en los distritos i, según la encuesta realizada matemáticamente lo
expresaríamos así.
For i ( For j Σ EST UDIANTE ijK< CANTIDAD ij )
La segunda restricción es con respecto a la cantidad de estudiantes en cada escuela por
dato nos dicen que lo mínimonumero de estudiantes para la dos escuelas es 300
estudiantes y la máxima 500 estudiantes, lo presentaremos matemáticamente así
For k ΣiΣj ESTUDIANTE ijk>= Numero de estudiantes
La tercera restricción es con respecto al porcentaje de alumnos en cada escuela, la
minoría representa el 25 % de la ciudad entera y la mayoría representa el 75%,
comonosdice que cada escuela tiene un +- 5% de minoría de la minoría total de la
ciudad, entonces cada escuela debe tomar entre el 20% y el 30% de estudiantes de las
minorías .Representando matemáticamente
For k ( ΣiΣj ESTUDIANTE ijk>= PORCTIPO*( ΣiΣj ESTUDIANTE ijk ) )
!colegios ;
SETS:
DIST/1..3/:;
TIPO/1..2/:;
COLE/1..2/:;
DT(DIST,TIPO):CANT;
DC(DIST,COLE):DISTA;
ALUMNOS(DIST,TIPO,COLE):X;
ENDSETS
DATA:
CANT=50,200,50,250,100,150;
DISTA=1,2,2,1,1,1;
ENDDATA
MIN=@SUM(ALUMNOS:DISTA*X);
!ALUMNOS POR DISTRITO Y POR TIPO;
@FOR(DT(I,J):@SUM(ALUMNOS(I,J,K):X(I,J,K))=CANT(I,J));
@FOR(COLE(K):@SUM(ALUMNOS(I,J,K):X(I,J,K))>300);
@FOR(COLE(K):@SUM(ALUMNOS(I,J,K):X(I,J,K))<500);
@FOR(COLE(K):@SUM(ALUMNOS(I,J,K)|J#EQ#1:X(I,J,K))>0.2*(@SUM(DT(I,J):X(I,J,K))));
@FOR(COLE(K):@SUM(ALUMNOS(I,J,K)|J#EQ#1:X(I,J,K))<0.3*(@SUM(DT(I,J):X(I,J,K))));
END
EL MODELO ALGEBRAICO:
MODEL:
[_1] MIN= X_1_1_1 + 2 * X_1_1_2 + 2 * X_1_2_1 + X_1_2_2 + X_2_1_1 + 2 *
X_2_1_2 + 2 * X_2_2_1 + X_2_2_2 + X_3_1_1 + 2 * X_3_1_2 + 2 * X_3_2_1
+
X_3_2_2 ;
[_2] X_1_1_1 + X_1_1_2 = 50 ;
[_3] X_1_2_1 + X_1_2_2 = 200 ;
[_4] X_2_1_1 + X_2_1_2 = 50 ;
[_5] X_2_2_1 + X_2_2_2 = 250 ;
[_6] X_3_1_1 + X_3_1_2 = 100 ;
[_7] X_3_2_1 + X_3_2_2 = 150 ;
[_8] X_1_1_1 + X_1_2_1 + X_2_1_1 + X_2_2_1 + X_3_1_1 + X_3_2_1 <=
300;
[_9] X_1_1_2 + X_1_2_2 + X_2_1_2 + X_2_2_2 + X_3_1_2 + X_3_2_2 <=
500;
[_10] 0.8 * X_1_1_1 - 0.2 * X_1_2_1 + 0.8 * X_2_1_1 - 0.2 * X_2_2_1 +
0.8 * X_3_1_1 - 0.2 * X_3_2_1 >= 0 ;
[_11] 0.8 * X_1_1_2 - 0.2 * X_1_2_2 + 0.8 * X_2_1_2 - 0.2 * X_2_2_2 +
0.8 * X_3_1_2 - 0.2 * X_3_2_2 >= 0 ;
[_12] 0.7 * X_1_1_1 - 0.3 * X_1_2_1 + 0.7 * X_2_1_1 - 0.3 * X_2_2_1 +
0.7 * X_3_1_1 - 0.3 * X_3_2_1 <= 0 ;
[_13] 0.7 * X_1_1_2 - 0.3 * X_1_2_2 + 0.7 * X_2_1_2 - 0.3 * X_2_2_2 +
0.7 * X_3_1_2 - 0.3 * X_3_2_2 <= 0 ;
END
1. Una compañía elabora dos productos P1 y P2, cada uno requiere e componentes C1 y
C2, la disponibilidad de los componentes y precio de venta de muestra en el siguiente
cuadro:
Producto Componentes Precio de Venta
C1 C2 (S/./Unidad)
P1 1 2 4
P2 3 1 3
Dispone 15000 10000
Se pide formular el problema y optimizar el ingreso de ventas:
Solución:
!PROBLEMA Nº1;
!PROD=TIPO DE PRODUCTO PV=PRECIO DE VENTA DE PRODUCTO;
!COM=COMPONENTES DISP=DISPONIBILIDAD DE LOS COMPONENTES;
!CANT=COMPONENTES PARA CADA PRODUCTO X=CANTIDAD DEL
PRODUCTO(1,2);
SETS:
PROD/1..2/:PV,X;
COM/1..2/:DISP;
MATRIZ(PROD,COM):CANT;
ENDSETS
DATA:
PV=4,3;
DISP=15000,10000;
CANT=1,2,
3,1;
ENDDATA
MAX=@SUM(PROD:PV*X);
@FOR(COM(J):@SUM(PROD(I):CANT(I,J)*X(I))<=DISP(J));
2. (PROPUESTO)La capacidad de producción de TEXTIL-PERU es de 900 unidades
mensuales. Los costos unitarios de producción y el compromiso mensual de venta a
EXPORT-PERU son como sigue:
Mes Costo de Producción Venta (Unidades)
(S/. / unidades)
1 100 300
2 150 350
3 200 400
3. (PROPUESTO)FLORANID S.A., es una empresa dedicada a la comercialización de
abonos para plantas que emplea 3 tipos diferentes de ingredientes A, B y C, para
conseguir 3 tipos de abonos 1, 2, y 3.
En cuanto a los ingredientes, su disponibilidad es limitada y sus costos son los siguientes:
CANTIDAD DISPONIBLE COSTOS
NGREDIENTE
(kg) (S/./ kg)
A 4.000 1.300
B 6.000 1.500
C 2.000 1.000
Las utilidades para los abonos son:
Abono 1 2.0 S/./ kg
Abono 2 3.0 S/./ kg
Abono 3 1.5 S/./ kg
Además de lo anterior, los ingredientes han de mezclarse en proporciones específicas
para asegurar una combinación adecuada:
Para el abono 1, no menos del 25 % de A y no más del 40 % de C; para el abono 2, no
menos del 30 % de A, no menos del 20 % ni más del 30 % de B y no más del 15 % de C;
y para el abono 3, no menos del 35 % de B.
Con todos los datos que FLORANID S.A. nos ha facilitado, nos piden que determinemos:
¿Cuánta cantidad de cada tipo de abono hay que producir de forma que se maximice el
beneficio de la compañía?
Solución:
Con los datos podemos construir un primer esquema que nos permitirá desarrollar el
modelo de programación lineal para la resolución del problema:
ABONOS CANTIDAD COSTOS
INGREDIENTES
1 2 3 DISPONIBLE (kg) (S/. /kg)
A X11 X12 X13 4000 1300
B X21 X22 X23 6000 1500
C X31 X32 X33 2000 1000
4. (PROPUESTO) Una compañía vende dos mezclas diferentes de nueces. La mezcla
más barata contiene un 80% de cacahuates y un 20% de nueces, mientras que las
más cara contiene 50% de cada tipo. Cada semana la compañía obtiene 1800 kilos de
cacahuates y 1200 kilos de nueces de sus fuentes de suministros. ¿Cuántos kilos de
cada mezcla debería producir a fin de maximizar las utilidades si las ganancias son de
$ 10 por cada kilo de la mezcla más barata y de $ 15 por cada kilo de la mezcla más
cara?
MEZCLA CACAHUATE NUEZ GANANCIA POR SEMANA
BARATA 80% 20% $10 POR KILO
CARA 50% 50% $ 15 POR KILO
5. (PROPUESTO)Una empresa de servicios debe proveer personal de vigilancia a sus
clientes durante el próximo año en las siguientes cantidades estimadas:
1. trimestre: 7000dias vigilante.
2. trimestre: 8500dias vigilante
3. trimestre: 6500dias vigilante
4. trimestre: 9000dias vigilante
Un vigilante debe ser entrenado durante cinco días antes de estar disponible para
asignarlo a los clientes.
Existe 65 días de trabajo en cada trimestre y al inicio del primer trimestre existen 120
vigilantes calificados en la nómina. Los vigilantes son pagados por la empresa y no por el
cliente; ellos ganan un salario de S/.500 al mes. Durante cada trimestre la empresa pierde
el 15% de su personal (incluyendo vigilantes entrenados en el trimestre anterior).
Formular la PL.
6. Los requerimientos para la producción de 3 tipos de barras de chocolate así como la
cantidad de recursos y la utilidad de cada tipo se muestran en el siguiente cuadro:
Materia prima B1 B2 B3 Cantidad
disponible
Azúcar 1 1 1 50
Chocolate 2 3 1 100
Ganancia 3 7 5
unitaria
Solución:
!D=CANTIDAD DISPONIBLE G=GANANCIA UNITARIA;
!IN=MATERIA PRIMA B=TIPO DE BARRA DE CHOCOLATE;
!P=REQUERIMIENTOS PARA CADA PRODUCTO ;
sets:
in/1..2/:d;
b/1..3/:p,g;
ca(in,b):uso;
endsets
data:
g=3, 7, 5;
d=50, 100;
uso= 1, 1, 1
2, 3, 1;
enddata
max=@sum(b:p*g);
@for(in(i):@sum(b(j):uso(i,j)*p(j))<=d(i));
end
MAX 3 P( 1) + 7 P( 2) + 5 P( 3)
SUBJECT TO
2] P( 1) + P( 2) + P( 3) <= 50
3] 2 P( 1) + 3 P( 2) + P( 3) <= 100
END
7. Steelco produce dos tipos de acero en tres diferentes acerías. Durante un mes dado,
cada acería dispone de 200 horas de alto horno. El tiempo y el costo de producción
de una tonelada de acero, difiere de una fábrica a otra, debido a las diferencia en los
hornos de cada fábrica. En el cuadro siguiente se muestran el tiempo y el costo de
producción para cada fábrica. Cada mes, Steelco tiene que producir por lo menos 500
toneladas de acero 1 y 600 toneladas de acero2. formule un PL, para minimizar los
costos para producir el acero deseado.
ACERIA ACERO 1 ACERO 2
COSTO TIEMPO COSTO TIEMPO
ACERIA 1 10 20 11 22
ACERIA 2 12 24 9 18
ACERIA 3 14 28 10 30
Solucion:
!X=CANTIDAD PRODUCIDA;
SETS:
aceria/1..3/:horas;
acero/1..2/:cantidad;
rutas(aceria,acero):costo,tiempo,x;
ENDSETS
DATA:
horas=12000,12000,12000;
cantidad=500,600;
costo=10 11,
12 9,
14 10;
tiempo=20 22,
24 18,
28 30;
ENDDATA
min=@sum(rutas:costo*x);
@for(acero(j):@sum(aceria(i):x(i,j))>=cantidad(j));
@for(aceria(i):@sum(acero(j):tiempo(i,j)*x(i,j))<=horas(i));
END
8. Una Tienda de animales ha determinado que cada Hámster debería recibirla al menos
70 unidades de proteína. 100 unidades de carbohidratos y 20 unidades de grasa. Si la
tienda vende los seis tipos de alimentos mostrados en la tabla. ¿Qué mezcla de
alimento satisface las necesidades a un costo mínimo para la tienda?
Proteínas Carbohidratos Grasa Costo
Alimento
(Unid /Oz) (Unid /Oz) (Unid / Oz) (Oz)
A 20 50 4 2
B 30 30 9 3
C 40 20 11 5
D 40 25 10 6
E 45 50 9 8
F 30 20 10 8
Solución:
!TIPO=TIPO DE ALIMENTO CO=COSTO DEL ALIMENTO POR ONZA;
!MACRO=TIPO DE MACRONUTRIENTE UNID=UNIDADES QUE DEBE RECIBIR EL
HAMSTER;
!CANT= CANTIDAD DE MACRONUTRIENTES X=CANTIDAD A MEZCLAR;
SETS:
TIPO/1..6/:CO,X;
MACRO/1..3/:UNID;
MATRIZ1(TIPO,MACRO):CANT;
ENDSETS
DATA:
CO=2,3,5,6,8,8;
UNID=70,100,20;
CANT=20,50,4,
30,30,9,
40,20,11
40,25,10,
45,50,9,
30,20,10;
ENDDATA
MIN=@SUM(TIPO:CO*X);
@FOR(MACRO(J):@SUM(TIPO(I):CANT(I,J)*X(I))>=UNID(J));
END
9. Las capacidades de producción del producto P de las fábricas A y B, los costos por
unidad transportada a los centros de consumo C1 y C2 y las demandas de estos son
como sigue:
Fabrica Costos de Transporte Producción
C1 C2
A 5 10 300
B 12 3 400
Demanda 250 350
Solución:
!FAB=FABRICA(1,2) PROD=PRODUCCION DE CADA FABRICA;
!CEN=CENTRO (1,2) DEM=DEMANDA;
!CO= COSTO DE TRANSPORTE X=UNIDADES TRANSPORTADAS;
SETS:
FAB/1..2/:PROD;
CEN/1..2/:DEM;
MATRIZ1(FAB,CEN):CO,X;
ENDSETS
DATA:
PROD=300,400;
DEM=250,350;
CO= 5,10,
12,3;
ENDDATA
MIN=@SUM(MATRIZ1:CO*X);
@FOR(FAB(I):@SUM(CEN(J):X(I,J))<=PROD(I));
@FOR(CEN(J):@SUM(FAB(I):X(I,J))>=DEM(J));
END
10. Cuatro productos se procesan en secuencia de dos maquinas. La siguiente tabla
proporciona los datos pertinentes al problema.
Tiempo de fabricación por unidad (hora)
Máquina Costo Producto Capacidad
($) / hora 1 2 3 4 (hora)
1 10 2 3 4 2 500
2 5 3 2 1 2 380
Precio de
venta 65 70 55 45
!MAQ=MAQUINA(1,2) CAP=CAPACIDAD DE CADA MAQUINA(HORAS);
!PROD=PRODUCTO(1,2,3,4) PV=PRECIO DE VENTA;
!TM= TIEMPO X=UNIDADES PRODUCIDAS UTI= UTILIDAD;
SETS:
MAQ/1..2/:CAP;
PROD/1..4/:PV;
MATRIZ1(MAQ,PROD):TM,X,uti;
ENDSETS
DATA:
CAP=500,380;
PV=65,70,55,45;
TM= 2,3,4,2,
3,2,1,2;
UTI=45,40,15,25
50,60,50,35;
ENDDATA
MAX=@SUM(MATRIZ1:UTI*X);
@FOR(MAQ(I):@SUM(PROD(J):TM(I,J)*X(I,J))<=CAP(I));
END