You are on page 1of 30

J. Ponce, G. Solís y L.

Ulfe Sección E

Guia de LINGO
herramienta de LINDO Systems de Optimización Matemática

¿Qué es LINGO?
LINGO es una herramienta simple que permite utilizar el poder de la optimización lineal y no
lineal para formular grandes problemas concisamente, resolverlos, y analizar la solución. La
optimización ayuda a encontrar la respuesta que satisface el mejor resultado. Frecuentemente,
estos problemas involucraban el uso mas eficiente de los recursos (dinero, tiempo, maquinaria,
personal, etc.). Los problemas de optimización se pueden clasificar en lineales o no lineales,
dependiendo de cómo las relaciones entre las variables.

La ventana inicial de LINGO.

Desarrollo de un modelo en LINGO.


Supongamos que CompuQuick Corp. Produce 2 modelos de computadoras: Standard y Turbo.
CompuQuick puede vender cada unidad Standard que produce a un precio de $100, y cada
unidad Turbo por $150. La fábrica puede producir a lo sumo 100 computadoras Standard por
día y 120 computadoras Turbo. CompuQuick tiene una capacidad de trabajo de 160 horas por
día. Las computadoras Standard requieren 1 hora de labor, mientras que las Turbo requieren 2
horas. El problema de CompuQuick es determinar la mezcla de computadoras Standard y
Turbo a producir cada día para maximizar el total de las ventas sin exceder el límite de
producción y de trabajo.
En general un modelo de optimización consiste en los siguientes 3 ítems:
1. Función objetivo
2. Variables
3. Restricciones

La sintaxis para escribir la función objetivo en LINGO es:


MAX = 100 * STANDARD + 150 * TURBO;

1
Investigación de Operaciones 1

Nota: Cada línea en LINGO finaliza con un punto y coma. Los punto y coma son requeridos.
El modelo no se resolverá si falta algún punto y coma.

Las restricciones se introducen de la siguiente manera:


STANDARD <= 100;
TURBO <=120;
STANDARD + 2 * TURBO <= 160;

Nota: Dado que la mayor parte de las computadoras no tienen una tecla de menor o igual ( ),
LINGO ha adoptado como convención utilizar el símbolo <= para representar Como
alternativa, se puede usar el símbolo < para expresar menor o igual. Lo mismo se usa >= ó >
para expresar mayor o igual (

Una expresión puede abarcar mas de una línea, por ejemplo:


MAX = 100 * STANDARD
+ 150 * TURBO;

Se pueden introducir comentarios, que serán ignorados por LINGO, comenzando con un signo
de exclamación ! y terminando con un punto y coma. Los comentarios también pueden ocupar
varias líneas. Por ejemplo:
X= 1.5 * Y + Z / 2 * Y; ! Esto es
Un comentario;
X= 1.5 * ! Esto es un comentario en el medio de una restricción; Y + Z / 2 * Y;

LINGO no distingue entre mayúsculas y minúsculas, por lo que es lo mismo STANDARD que
standard y que StAnDaRd.

Los nombres de las variables deben comenzar con un carácter alfabético (A-Z), los siguientes
caracteres pueden ser alfabéticos, numéricos o subrayado (_). Los nombres pueden ser de
hasta 32 caracteres de longitud.

Resolución del modelo


Para ordenar a LINGO a que resuelva el problema, se debe seleccionar el comando Solve del
menú LINGO, o presionar el botón Solve de la barra de herramientas. Si no hay errores en la

2
J. Ponce, G. Solís y L. Ulfe Sección E

formulación del problema durante la etapa de compilación, LINGO invocará al módulo de


resolución adecuado para buscar la solución óptima.

Ventana de estado.

En esta ventana se puede monitorear el proceso de resolución y las dimensiones del modelo.
El recuadro "Variables" muestra el numero total de variables del modelo, las variables que son
no lineales y las enteras. Una variable es considerada no lineal si es parte de una restricción
no lineal en el modelo. Mientras mas variables no lineales y enteras contenga el modelo, mas
difícil será resolverlo de forma óptima en un tiempo razonable. Los modelos lineales puros sin
variables enteras tienden a resolverse mas rápidamente. La cuenta de variables no incluye las
que LINGO determina como de valor fijo, por ejemplo: dadas las restricciones

X = 1;
X + Y = 3;

LINGO determina por la primera restricción que X está fija en 1, y, usando esta información,
deduce que Y está fija en 2. X e Y serán entonces excluidas del modelo. En el recuadro
"Constraints" se muestra la cantidad total de restricciones y el número de éstos que son no
lineales. Una restricción es considerada no lineal si una o mas variables aparecen de forma no
lineal en la restricción. El recuadro "Nonzeros" muestra el total de coeficientes distintos de cero
que aparecen en el modelo y el número de estos que aparecen en variables no lineales. El
recuadro "Memory Used" muestra la cantidad de memoria que está utilizando LINGO para
resolver el modelo. El recuadro "Elapsed Runtime" muestra el tiempo total utilizado para
generar y resolver el modelo. El recuadro "Optinizer Status" muestra el estado actual del
optimizador:

3
Investigación de Operaciones 1

Campo Descripción
State Estado de la solución actual, puede ser
"Global optimum", "Local optimum",
"Feesible", "Unbounded", "Interrupted",
"Undetermined"
Iterations Numero de iteraciones
Infeasibility Cantidad de veces que es violada una
restricción
Objetive Valor actual de la función objetivo
Best IP Valor de la función objetivo de la mejor
solución entera encontrada (solo en modelos
de programación entera)
IP Bound Límite teórico de la función objetivo para
modelos de programación entera.

Cuando LINGO termine de resolver el modelo, creará una nueva ventana con el título Solution
Report, conteniendo los detalles de la solución:

Informe de la solución.

Costo Reducido:
En el informe de la solución se encuentra un valor de costo reducido para cada variable. Hay
dos interpretaciones válidas y equivalentes para el costo reducido. Primero se puede interpretar
como el monto por el cual el coeficiente objetivo de la variable se debería incrementar antes de
hacerse provechoso darle a la variable en cuestión un valor positivo en la solución óptima. Por
ejemplo, si la variable tuviera un costo reducido de 10, el coeficiente objetivo de esta variable
deberá incrementarse en 10 unidades en un problema de maximización o decrementarse en 10

4
J. Ponce, G. Solís y L. Ulfe Sección E

unidades en un problema de minimización para convertirse en una alternativa atractiva. Una


variable en la solución óptima automáticamente tiene un costo reducido de 0. Segundo, el costo
reducido de una variable se puede interpretar como el monto de penalización que habrá que
pagar por introducir una unidad de esa variable en la solución. Como antes, si la variable
tuviera un costo reducido de 10, habrá que pagar una penalización de 10 unidades para
introducir la variable en la solución. En otras palabras, el valor objetivo caerá en 10 unidades
en un modelo de maximización, o se incrementará 10 unidades en un problema de
minimización. Los costos reducidos son válidos sólo dentro de un rango de valores.

Holgura o excedente
La columna Slack or Surplus en el informe de la solución de LINGO muestra que tan cerca se
está de satisfacer una restricción como una igualdad. Esta cantidad, en restricciones de menor
o igual, se denomina generalmente holgura. En restricciones de mayor o igual se la llama
excedente. Si una restricción es exactamente satisfecha como una igualdad, la holgura o
excedente valdrá cero. Si una restricción es violada, este valor será negativo. Esto ayuda a
encontrar las restricciones violadas cuando en el modelo no existe un conjunto de valores para
las variables que satisfacen simultáneamente todas las restricciones. En el ejemplo de
CompuQuick, nótese que la fila 3 (TURBO <= 120) tiene un slack de 90, porque el valor óptimo
de TURBO es 30, esta fila está a 90 unidades de ser satisfecha como una igualdad.

Precio Dual.
El informe de la solución de LINGO también da un valor de precio dual para cada restricción.
El precio dual se puede interpretar como el monto en que la función objetivo mejorará si el
segundo miembro de la restricción se incrementase una unidad. Por ejemplo, en la solución de
CompuQuick, el precio dual en la fila 4 significa que agregar una unidad mas al trabajo causará
que la función objetivo mejore en 75, a un valor de 14575. Nótese que mejorar es un término
relativo. En un problema de maximización, mejorar significa que la función objetivo se
incrementará, y en un problema de minimización el valor objetivo se reducirá si el segundo
miembro de una restricción con precio dual positivo es incrementado. Los precios duales son a
veces llamados precios sombra, porque ellos dicen cuanto debería pagar por una unidad de
recurso. En el ejemplo anterior, CompuQuick podría pagar hasta $75 por cada unidad de
trabajo. Al igual que los costos reducidos, los precios duales son válidos sólo dentro de un
rango de valores.

Para qué utilizar un lenguaje de modelación?


Una de las características más potentes de LINGO, es el lenguaje de modelación matemática.
Este lenguaje permite expresar el problema de una manera natural, similar a la notación
matemática standard. Además de poder ingresar cada término de cada restricción
explícitamente, LINGO permite expresar una serie de restricciones similares en una sola
sentencia compacta. Otra característica conveniente del lenguaje de modelación de LINGO, es
la sección de datos. La sección de datos permite aislar los datos de la formulación del modelo.
De hecho, LINGO puede incluso, leer los datos de una planilla de cálculo, de una base de
datos o un archivo de texto. Con los datos independientes del modelo, es mucho mas fácil
hacer cambios, y hay menos oportunidad de cometer errores. El modelo de CompuQuick del
ejemplo anterior, usa variables escalares, cada variable está explícitamente listada por nombre
(STANDARD y TURBO) y cada restricción aparece explícitamente. En la mayor parte de los
grandes modelos, será necesario trabajar con un grupo de varias restricciones y variables muy
similares. Para esto, LINGO tiene la habilidad de manejar conjuntos de objetos, que permiten
efectuar estas operaciones mas eficientemente.

El problema del transporte.


Por ejemplo: supóngase que la compañía Wireless Widget (WW) tiene 6 depósitos que proveen
a 8 vendedores. Cada deposito puede proveer una cantidad de materiales que no puede ser
excedida, y cada vendedor tiene una demanda que debe ser satisfecha. WW quiere determinar
cuánto material enviar de cada depósito a cada vendedor para minimizar el costo. Este es un
problema clásico de optimización llamado es problema del transporte.

5
Investigación de Operaciones 1

El siguiente diagrama ilustra el problema:

Puesto que cada depósito puede enviar a cada vendedor, hay un total de 48 caminos o arcos
de envío posibles, se necesitará 1 variable para cada uno de estos arcos que representen la
cantidad enviada. Están disponibles los siguientes datos:

Depósito Capacidad
1 60
2 55
3 51
4 43
5 41
6 52

Vendedor Demanda
1 35
2 37
3 22
4 32
5 41
6 32
7 43
8 38

Costo de envío por unidad ($):

V1 V2 V3 V4 V5 V6 V7 V8
Wh1 6 2 6 7 4 2 5 9
Wh2 4 9 5 3 8 5 8 2
Wh3 5 2 1 9 7 4 3 3
Wh4 7 6 7 3 9 2 7 1
Wh5 2 3 9 5 7 2 6 5
Wh6 5 5 2 2 8 1 4 3

La función objetivo:
El primer paso para plantear el modelo será construir la función objetivo. Como mencionamos,
WW quiere minimizar el total de los costos de envío. Haremos que la variable VOLUME_I_J
indique la cantidad de mercadería enviada desde el depósito i hacia el vendedor j. Entonces, si
tuviéramos que escribir la función objetivo usando variables escalares tendríamos:

MIN = 6 *
VOLUME_1_1 + 2 * VOLUME_1_2 +

6
J. Ponce, G. Solís y L. Ulfe Sección E

6 * VOLUME_1_3 + 7 * VOLUME_1_4 +
4 * VOLUME_1_5 +
.
.
.
8 * VOLUME_6_5 + VOLUME_6_6 + 4 * VOLUME_6_7 +

3 * VOLUME_6_8;

Estos son 9 de los 48 términos de la función objetivo. Como se ve, ingresar una fórmula como
esta es tedioso y propenso a errores. En un caso mas realista, los vendedores podrían ser
miles, y el modelado con variables escalares se vuelve muy problemático. Con la notación
matemática, se podría expresar esta ecuación de esta forma: Minimizar  ij COSTij * VOLUMEij
De una forma similar, el lenguaje de modelado de LINGO permite expresar la función objetivo
de una forma corta, fácil de tipear, y fácil de entender. La sentencia de LINGO equivalente es:
MIN = @SUM(LINKS(I,J): COST(I,J) * VOUME(I,J)); En otras palabras, Minimizar la suma de
los costos de envío (COST) por unidad por el Cantidad (VOLUME) de mercadería enviada por
todos los caminos (LINKS) entre los depósitos y los vendedores.

Restricciones
El siguiente paso es formular las restricciones. Hay dos conjuntos de restricciones en este
modelo. El primero garantiza que cada vendedor recibe el número de unidades requerida
(restricciones de demanda). El segundo conjunto de restricciones asegura que cada depósito
no envía mas de lo que tiene (restricciones de capacidad). Comenzando con las restricciones
de demanda del Vendedor 1, necesitamos sumar los envíos de todos los depósitos hacia el
Vendedor 1 e igualarlo a la demanda, que es de 35 unidades. Si usáramos la notación basada
en escalares, necesitaríamos construir lo siguiente:

VOLUME_1_1 + VOLUME_2_1 + VOLUME_3_1 +

VOLUME_4_1 + VOLUME_5_1 + VOLUME_6_1 = 35;

Además de otras 7 restricciones de demanda, para cubrir a los 8 vendedores. Pero, utilizando
el lenguaje de modelado basado en conjuntos de LINGO, podemos simplificar esta tarea. La
sentencia correspondiente queda así:

@FOR( VENDORS( J):


@SUM( WAREHOUSES( I): VOLUME( I, J)) =

DEMAND( J));

Esta sentencia reemplaza a las 8 restricciones de demanda. Significa: para todos los
vendedores (VENDORS), la suma del volumen (VOLUME) enviado desde cada uno de los
depósitos (WAREHAUSES) a ese vendedor debe ser igual a la demanda correspondiente
(DEMANDA) del vendedor. Nótese la gran similitud con la notación matemática. De manera
análoga pueden expresarse las restricciones de capacidad:

@FOR( WAREHOUSES( I):


@SUM( VENDORS( J): VOLUME( I, J))<=

CAPACITY( I));

Equivale a: para cada miembro del conjunto WAREHAUSES, la suma del Volumen (VOLUME)
enviado a cada vendedor (VENDORS) desde ese depósito, debe ser menor o igual a la
capacidad del depósito.

7
Investigación de Operaciones 1

El modelo completo

MODEL:

MIN = @SUM( LINKS( I, J):


COST( I, J) * VOLUME( I, J));
@FOR( VENDORS( J):
@SUM( WAREHOUSES( I): VOLUME( I, J)) =
DEMAND( J));
@FOR( WAREHOUSES( I):
@SUM( VENDORS( J): VOLUME( I, J)) <=
CAPACITY( I));

END

Sin embargo, todavía faltan definir los datos del modelo que LINGO llama "la sección de
conjuntos" y "la sección de datos"

Definición de los Conjuntos


LINGO permite definir conjuntos de objetos relacionados en la "sección de conjuntos" (sets
section). Esta sección comienza con la palabra clave SETS: y termina con ENDSETS. Una
vez definidos los miembros del conjunto, LINGO tiene un grupo de funciones (p.e. @FOR) que
aplican operaciones a todos los miembros de un conjunto utilizando sólo una sentencia. En el
caso del modelo de Wireless Widget, hemos construido 3 conjuntos:

 Depósitos
 Vendedores
 Arcos de envío desde cada depósito a cada vendedor

SETS:

WAREHOUSES / WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY;


VENDORS / V1 V2 V3 V4 V5 V6 V7 V8/ : DEMAND;
LINKS( WAREHOUSES, VENDORS): COST, VOLUME;

ENDSETS

La segunda línea dice que el conjunto WAREHOUSES tiene los elementos WH1, WH2, WH3,
WH4, WH5 y WH6, cada uno con un atributo llamado CAPACITY (capacidad). Los vendedores
se definen en la tercera línea, cada uno con un atributo llamado DEMANDA. El último conjunto,
titulado LINKS (enlaces) representa los 48 caminos entre los depósitos y los vendedores. Cada
camino tiene los atributos costo (COST) y volumen (VOLUME) asociados. La sintaxis para
definir este conjunto, difiere de las dos anteriores. Especificando LINKS( WAREHOUSES,
VENDORS) estamos diciendo a LINGO que el conjunto LINKS deriva de WHAREHOUSES y
VENDORS. En este caso, LINGO genera cada par ordenado de (depósitos, vendedores).
Cada uno de estos 48 pares ordenados es un elemento del conjunto LINKS.

Ingreso de datos
LINGO permite al usuario aislar los datos en una sección separada del modelo. En el ejemplo
de Wireless Widget, tenemos la siguiente sección de datos:

DATA:

CAPACITY = 60 55 51 43 41 52;
DEMAND = 35 37 22 32 41 32 43 38;
COST = 6 2 6 7 4 2 5 9
49538582

8
J. Ponce, G. Solís y L. Ulfe Sección E

52197433
76739271
23957265
5 5 2 2 8 1 4 3;

ENDDATA

La sección de datos comienza con la sentencia DATA: y finaliza con ENDDATA. Los atributos
CAPACITY del conjunto WAREHOUSES y DEMANDA de VENDORS se inicializan de forma
directa. El atributo COSTO del conjunto bidimensional LINKS es un poco mas oscuro. Cuando
LINGO inicializa una matriz multidimensional, incrementa el índice exterior mas rápidamente,
en este caso COST(WH1, V1) se inicializa primero, seguido de COST(WH1, V2) hasta
COSTO(WH1, V8). Después se inicializará COST(WH2, V1), y así sucesivamente. LINGO
también tiene la capacidad de importar los datos desde fuentes externas, específicamente de
archivos de texto y planillas de cálculo, establecer vínculos OLE a Excel y/o crear vínculos
ODBC a las bases de datos mas populares. Poniendo juntas las secciones de datos, de
conjuntos, la función objetivo y las restricciones, el modelo queda como sigue:

MODEL:

!A 6 Warehouse 8 Vendor Transportation Problem;


SETS:
WAREHOUSES/ WH1 WH2 WH3 WH4 WH5 WH6/: CAPACITY;
VENDORS/ V1 V2 V3 V4 V5 V6 V7 V8/: DEMAND;
LINKS (Warehouses, Vendors): COST, VOLUME;
ENDSETS
!The objective;
MIN = @SUM( LINKS( I, J):
COST( I, J) * VOLUME( I, J));
!The demand constraints;
@FOR( VENDORS( J):
@SUM( WAREHOUSES( I): VOLUME( I, J)) =
DEMAND( J));
!The capacity constraints;
@FOR( WAREHOUSES( I):
@SUM( VENDORS( J): VOLUME( I, J)) <=

CAPACITY( I));
!Here is the data;
DATA:
CAPACITY = 60 55 51 43 41 52;
DEMAND = 35 37 22 32 41 32 43 38;
COST = 6 2 6 7 4 2 5 9
49538582
52197433
76739271
23957265
55228143
ENDDATA

END

Resolución del modelo del transporte.


Ahora, vamos a resolver el modelo para determinar el volumen óptimo de envíos desde cada
depósito hacia cada vendedor. Se debe seleccionar la opción SOLVE del menú LINGO, o
presionar el botón SOLVE de la barra de menú. LINGO responderá resolviendo el modelo y
retornando el informe de la solución que contiene los valores de las variables, restricciones y
datos en el modelo.

9
Investigación de Operaciones 1

Dimensiones máximas
El número máximo de restricciones y variables que LINGO puede manejar depende de la
versión. Los límites de las distintas versiones son:

Versión Restricciones Variables


Demo/Web 50 100
Solver Suite 100 200
Super 500 1,000
Hyper 2,000 4,000
Industrial 8,000 16,000
Extended 32,000 100,000

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. Mas específicamente las variables pueden asumir cualquier valor real desde
cero hasta mas 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)

@FREE Permite que la variable tome cualquier valor


real (positivo o negativo)
@BND Limita la variable para que se ajuste a un
rango 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 START en
enteras

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

10
J. Ponce, G. Solís y L. Ulfe Sección E

(A QL y QU deben habérsele asignado valores en la


sección de datos)

Rango
El comando rango se utiliza para generar un reporte de rango para el modelo de la ventana
activa. El reporte de rango muestra sobre que rangos se puede: 1) cambiar un coeficiente en
la función objetivo sin causar un cambio en alguno de los valores óptimos en las variables de
decisión, ó 2) cambiar una constante de una fila (coeficiente del segundo miembro) sin
provocar un cambio en los valores óptimos de los precios duales o costos reducidos.

Ejemplo:

[OBJECTIVE] MAX = 20 * A + 30 * C;
[ALIM] A <= 60;
[CLIM] C <= 50;
[JOINT] A + 2 * C <= 120;

El reporte de rango del modelo anterior es el siguiente:

Ranges in which the basis is unchanged:

Objective Coefficient Ranges


Current Allowable Allowable
Variable Coefficient Increase Decrease
A 20.00000 INFINITY 5.000000
C 30.00000 10.00000 30.00000

Righthand Side Ranges


Row Current Allowable Allowable
RHS Increase Decrease
ALIM 60.00000 60.00000 40.00000
CLIM 50.00000 INFINITY 20.00000
JOINT 120.0000 40.00000 60.00000

La primera sección del reporte se titula Rangos de Coeficientes Objetivos. En la primera


columna, titulada Variable, se listan por su nombre todas las variables a optimizar. La siguiente
columna, titulada Current Coefficient (Coeficiente actual) muestra el coeficiente actual de la
variable en la función objetivo. La siguiente columna Allowable Increase (Incremento permitido)
nos dice el monto en que podríamos incrementar el coeficiente en la función objetivo sin
cambiar los valores óptimos de las variables. La última columna, Allowable Decrease
(Decremento permitido) muestra el monto en que podríamos decrementar el coeficiente en la
función objetivo sin que cambien los valores óptimos en las variables. La información de los
incrementos y decrementos permitidos de los coeficientes de la función objetivo es útil para
responder a las preguntas como: "Cuanto mas (menos) provechoso puede ser esta actividad
antes de que estemos dispuestos a hacer mas (menos) de esto?"

Nota: Los rangos son válidos si se quiere cambiar un solo coeficiente de la función objetivo o
del segundo miembro de alguna restricción.

La segunda sección del reporte de rango se titula Rangos del Lado Derecho. La primera
columna, Row (fila), muestra los nombres de todas las filas a optimizar, o restricciones del
modelo. La segunda columna, Current RHs (RHS Actual) dice el término constante, o segundo
miembro de la fila. Las dos columnas siguientes, Allowable Increase y Alolowable Decrease,
nos dice cuanto podemos incrementar o decrementar el coeficiente correspondiente a la fila, sin
afectar a los valores de los precios duales o costos reducidos. Recordemos que los precios
duales son, efectivamente, precios sombra que nos dicen que precio estamos dispuestos a

11
Investigación de Operaciones 1

pagar (o a vender) de un recurso. El precio dual sin embargo, no nos dice cuanto estamos
dispuestos a comprar (o a vender). Esta información se obtiene de los incrementos y
decrementos permitidos de los coeficientes de los segundos miembros de cada fila.

Nota: Cada fila en el modelo del ejemplo está precedida por un nombre enserrado entre
corchetes. Esta es una práctica importante si se quiere generar reportes de rango. Si no se le
ponen nombres a las filas, LINGO les asigna un número de fila que utiliza internamente como
índice. Este índice interno no corresponderá siempre con el orden de la fila en el modelo
original. Entonces es conveniente nombrar las filas para hacer mas entendible el reporte de
rango.

12
J. Ponce, G. Solís y L. Ulfe Sección E

Guia de What’s Bets! (WB)


herramienta de LINDO Systems de Optimización Matemática

PROBLEMA No 1 : OPTIMIZACION DE OLEODUCTO.

PERFIL DE LA APLICACION
Este modelo es un ejemplo de un problema de redes (que requieren el flujo de recursos, a un
costo mínimo a lo largo de diferentes rutas, los cuales están asociados con costos variables).
Teniendo en cuenta límites de capacidad a lo largo de las rutas. Los oleoductos de aceite y gas,
las rutas de camión y aire pueden ser utilizadas en su costo - eficiencia más alta aplicando los
principios demostrados en este modelo.

EL PROBLEMA EN PALABRAS
Usted, como el operador de una red de suministros de aceite, debe escoger entre varios
oleoductos disponibles de 2 pozos a 3 estaciones de bombeo, y de las estaciones de bombeo a
4 refinerías. Los pozos tienen una capacidad de suministro mensual, el cual no debe ser
excedido, las capacidades de los oleoductos deben ser limitadas, y los costos varían entre los
oleoductos. Además la demanda mensual de la refinería debe ser totalmente cubierta.

ANTECEDENTES
Usted debe decidir cuantos barriles por mes debe bombear a lo largo de cada oleoducto.
Actualmente, ningún oleoducto esta operando entre el pozo 1 y la estación de bombeo "C",
entre la estación de bombeo A y las refinerías 3 y 4 y entre la estación de bombeo “C” y la
refinería 1. La decisión de cuanto material enviar a lo largo de un oleoducto dado esta
determinado por el costo mensual por unidad de ese oleoducto y por la necesidad de satisfacer
la demanda de la refinería sin exceder el suministro mensual del pozo.

13
Investigación de Operaciones 1

OBJETIVO DE LA OPTIMIZACION:
El objetivo de este modelo es minimizar el costo total de bombeo sin exceder la capacidad de
salida mensual de los pozos o la capacidad de los oleoductos, mientras se cubra la demanda
de cada refinería.

FORMULACION: OPTIMIZACION DE OLEODUCTO.

Definición de Variables:

Xij : Volumen de bombeo del Pozo i a la Estación de Bombeo j.


Xjh : Volumen de bombeo de la Estación de Bombeo j a la Refinería h

Formulación :

Restricción de Conservación

Restricción de Capacidad de pozo

14
J. Ponce, G. Solís y L. Ulfe Sección E

Restricción de Demanda de Refinería

Restricciones de Capacidad de Arcos

15
Investigación de Operaciones 1

Función Objetivo

LA HOJA DE CALCULO
La hoja de cálculo del oleoducto (PIPELINE) antes de la optimización

16
J. Ponce, G. Solís y L. Ulfe Sección E

A.- DETERMINAR LAS CELDAS AJUSTABLES


Las celdas ajustables son; B7, B8, y C7..C9, contienen las cantidades enviadas desde los
pozos hacia las estaciones de bombeo; y las celdas E7..E8, F7..F9, G8..G9 y H8..H9,
contienen las cantidades enviadas desde las estaciones de bombeo hacia las refinerías. Las
celdas B9, E9, G7 y H7 son celdas fijadas con un valor de cero; estos oleoductos no están
abiertos (operativos).

B.- DEFINIR BEST! (Función Objetivo)


La solución Best! de este problema es aquel que minimiza el costo total de bombeo de la celda
E37. La formula en E37 es la suma de los dos subtotales para los costos de bombeos del pozo
y la refinería. Cada subtotal, a su vez es la suma del producto de los costos de bombeo a lo
largo de cada oleoducto abierto (operativo), (desde los pozos hacia las estaciones de bombeo
en la 1era instancia y desde las estaciones de bombeo hacia la refinería en la segunda
instancia) y las cantidades llevadas en ese oleoducto.

C.- ESPECIFICAR RESTRICCIONES


Las restricciones en el modelo de oleoducto (PIPELINE) deben cumplir varias funciones.
Primero, la capacidad de suministro en los pozos no debe ser excedida. En las celdas B12 y
C12, las fórmulas de las restricciones requieren que la suma de las cantidades bombeadas
desde cada pozo sea menor que o igual a las capacidades en B11 y C11.

Segundo, la cantidad recibida en cada estación de bombeo debe ser igual a la cantidad de
bombeo de salida; tales restricciones son conocidas como restricciones de conservación. Para
lograr esto, las celdas D7..D9, contienen fórmulas de restricciones que fuerzan la suma de
cantidades bombeadas desde los pozos a cada bomba para ser igual a la suma de las
cantidades bombeadas desde esa bomba a las refinerías.

Tercero, la demanda en las refinerías deben estar cubiertas. Estas restricciones están en las
celdas E12..H12, y requieren que la suma de las cantidades bombeadas desde las bombas a
cada refinería sea mayor que o igual a las demandas E11..H11.

Finalmente, las capacidades de los oleoductos no deben ser excedidas. Las fórmulas de las
restricciones en B29..C31 y E29..H31, uno para cada "arco” completan este resultado.

17
Investigación de Operaciones 1

Ahora Ud. puede solucionar el modelo. La solución se muestra abajo.La hoja de cálculo del
oleoducto (PIPELINE), después de la optimización

What’s Best! a retornado un costo total minimizado de bombeo de US $ 1,431.05. Note que
todas las estaciones de bombeo están en uso.

PROBLEMA No 2 : Manejo de Inventario Multi - Periodo

Perfil de la aplicación
¿Que hacer si su producto está hecho de materiales que son de abastecimiento limitado y
requieren de facilidades especiales de almacenaje que son Costos?. En tal situación Ud. tiene
que mantener las compras y los costos de inventarios bajos, pero manteniendo suficiente stock
para cubrir la demanda. Si Ud. usa recursos perecibles, o materiales sujetos a limitaciones de
abastecimiento, Ud. probablemente encuentre problemas como éstos.

El problema en palabras
Las demandas de su producción varían sobre 13 periodos de tiempo. Las materias primas,
disponibles a costos variables de 3 diferentes proveedores, deben mantenerse ocasionalmente
en cantidad suficientes, de tiempo en tiempo, para cubrir las necesidades de producción. Un
costo de mantenimiento asociado con el inventario a futuro complica el panorama.
¿Cómo se puede determinar cuanto inventario mantener y que proveedor asignar mientras que
se minimice el costo total y se cubra las demandas de su cliente para el producto?

18
J. Ponce, G. Solís y L. Ulfe Sección E

Antecedentes
El problema es como sigue. Usted conoce la demanda unitaria para cada uno de los 13
periodos de tiempo. Por ejemplo la demanda para el periodo de tiempo 1, en celda B6, debe
ser cubierta usando alguna combinación de origen 1, 2, y 3 (D6-F6); el inventario final en la
celda G6 es igual al inventario inicial, mas la suma de cantidades compradas de cada origen,
menos la demanda unitaria. Usted no solo debe satisfacer la demanda para cada periodo;
usted también debe minimizar la cantidad de inventario a futuro. Obviamente, es de su interés
el comprar cuanto le sea posible del origen menos caro, origen 1; pero la demanda en algunos
periodos excede la capacidad del origen 1.

Objetivo de la optimización
El objetivo en el modelo de inventario es minimizar el costo total en H21, y determinar cuanto
material comprar de cada origen, en cada periodo de tiempo, cubrir la demanda del cliente para
la compra más baja y el costo de mantenimiento.

FORMULACION: Manejo de Inventario Multi - Periodo

Definición de Variables:

Xij : Número de unidades compradas al origen i en el Periodo j.


Ij : Nivel de Inventario en el Periodo j
Dj : Demanda en el Periodo j
Cj : Costo total en el Periodo j

i = 1,2,3 j = 1,2,3 ... 13

Formulación :

Restricción de Flujo de Inventario

19
Investigación de Operaciones 1

Restricción de Capacidad de origen

20
J. Ponce, G. Solís y L. Ulfe Sección E

Ecuación de Costo Total por periodo

Función Objetivo

La Hoja de Cálculo

Modelo de Inventario antes de Solucionarlo

21
Investigación de Operaciones 1

Note que el origen 1 es obviamente la mejor ganga (celda D21), pero como la demanda se
incrementa de periodo en periodo (B6.B8), el origen 1 con una capacidad de 180, no será
suficiente para cubrir la demanda.

A. Determinar las Celdas ajustables.(Celdas Variables)


Las celdas ajustables son las cantidades compradas, para cada periodo de tiempo, de cada
uno de los tres proveedores orígenes. Estos valores, ingresados como ceros, se encuentran en
D6..F18.

B. Definir BEST (La celda Función Objetivo)


La mejor solución al problema de inventario consiste de la combinación de compras de cada
origen en cada periodo de tiempo, el cual da por resultado, el costo Total Mínimo en la celda
H21. La formula en esta celda, SUM(H6..H18), es la suma de costos de periodos; cada costo
de periodo esta compuesto de la suma de los costos de compra y mantenimiento de inventario
para ese periodo.

C. Especificar Restricciones
Las restricciones son: Debe de haber provisiones suficientes para cada periodo de tiempo con
el fin de satisfacer su demanda, y la capacidad de los tres proveedores no debe excederse. Las
primeras restricciones se encuentran en C6..C18.

Mire la formula enC6:WB(B6,”=”,G5+SUM(D6..F6). La cantidad mantenida del periodo anterior


(G5) es añadida a la cantidad de compras de los 3 orígenes, y requiere ser no menor que la
demanda para el periodo 1 (B6).

El segundo grupo de restricciones, que proveen los orígenes no deben ser usados mas allá de
su capacidad, esta en las celdas D27..F39. En la celda D27, por ejemplo: WB(D6,”=”,$D$20).
D6, la cantidad comprada del origen 1 en el periodo 1, requiere no ser mayor que D20, la
capacidad de abastecimiento.

Solución del modelo.


Modelo de Inventario después de solucionarlo

22
J. Ponce, G. Solís y L. Ulfe Sección E

What’s Best! encuentra un costo total minimizado de $263,836 en la celda H21.

23
Investigación de Operaciones 1

Análisis de la Solución de un Problema de Programación Lineal


resuelto por software de Optimización Matemática de LINDO Systems, Inc.
Lindo - Lingo - What’s Best!

CASO DE LA PLANEACION DE LA PRODUCCION

Una Compañía elabora 5 productos en 2 plantas.


La PLANTA 1 elabora los productos Q1, Q2 y Q3.
La PLANTA 2 elabora los productos Q4 y Q5.

La cantidad de materia prima y el espacio necesario de almacenamiento se da en la siguiente tabla:

PRODUCTO Q1 Q2 Q3 Q4 Q5 DISPONIBILIDAD
Materia Prima (lb) 2 4 4 3 3 6000 libras
Espacio (pies3 ) 1 2 2 2 3 4000 pies3
UTILIDAD $20 $15 $12 $30 $16

Los productos Q1, Q2 y Q4 son comprados por EMPRESAS INDUSTRIALES y entre los tres productos
se deben producir como mínimo 200 unidades.

Los productos Q3 y Q5 son comprados por EMPRESAS COMERCIALES y entre los dos productos se
deben producir como mínimo 300 unidades.

Cada uno de los cinco productos necesita de un tiempo de procesamiento de 1 hora. La PLANTA 1
dispone de 1400 horas y la PLANTA 2 dispone de 1000 horas.

Se ha impuesto la condición de utilizar todas las horas en su totalidad (es decir que no hayan horas
muertas) en ambas plantas.

EL MODELO es el siguiente :

Qi = cantidad a producir del producto i i = 1, 2, 3, 4, 5

MAX 20Q1 + 15Q2 + 12Q3 + 30Q4 + 16Q5 (Utilidad Total)


s.a:
2Q1 + 4Q2 + 4Q3 + 3Q4 + 3Q5 <= 6000 (Materia Prima)
Q1 + 2Q2 + 2Q3 + 2Q4 + 3Q5 <= 4000 (Espacio)
Q1 + Q2 + Q4 >= 200 (Emp. Industriales)
Q3 + Q5 >= 300 (Emp. Comerciales)
Q1 + Q2 + Q3 = 1400 (Horas Planta 1)
Q4 + Q5 = 1000 (Horas Planta 2)

REPORTE DE SOLUCIÓN CON LINDO/PC

Modelo visto con LOOK ALL:


MAX 20 Q1 + 15 Q2 + 12 Q3 + 30 Q4 + 16 Q5
SUBJECT TO
2) 2 Q1 + 4 Q2 + 4 Q3 + 3 Q4 + 3 Q5 <= 6000
3) Q1 + 2 Q2 + 2 Q3 + 2 Q4 + 3 Q5 <= 4000
4) Q1 + Q2 + Q4 >= 200
5) Q3 + Q5 >= 300
6) Q1 + Q2 + Q3 = 1400
7) Q4 + Q5 = 1000

24
J. Ponce, G. Solís y L. Ulfe Sección E

END

25
Investigación de Operaciones 1

OBJECTIVE FUNCTION VALUE

1) 54400.00

VARIABLE VALUE REDUCED COST


Q1 1300.000000 .000000
Q2 .000000 11.000000
Q3 100.000000 .000000
Q4 800.000000 .000000
Q5 200.000000 .000000

ROW SLACK OR SURPLUS DUAL PRICES


2) .000000 3.000000
3) 300.000000 .000000
4) 1900.000000 .000000
5) .000000 -14.000000
6) .000000 14.000000
7) .000000 21.000000

NO. ITERATIONS= 7

RANGES IN WHICH THE BASIS IS UNCHANGED:

OBJ COEFFICIENT RANGES


VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
Q1 20.000000 6.000000 INFINITY
Q2 15.000000 11.000000 INFINITY
Q3 12.000000 INFINITY 6.000000
Q4 30.000000 INFINITY 6.000000
Q5 16.000000 6.000000 INFINITY

RIGHTHAND SIDE RANGES


ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 6000.000000 400.000000 200.000000
3 4000.000000 INFINITY 300.000000
4 200.000000 1900.000000 INFINITY
5 300.000000 300.000000 200.000000
6 1400.000000 100.000000 200.000000
7 1000.000000 66.666660 133.333300

1.- Plan Optimo de Producción:

Q1=1300 unidades de Q1
Q2=0
Q3=100 unidades de Q3
Q4=800 unidades de Q4
Q5=200 unidades de Q5

2.- ¿Cuánto es la máxima Utilidad? :

$ 54400

26
J. Ponce, G. Solís y L. Ulfe Sección E

3.- Costos Reducidos:


Solo se interpretan cuando son diferentes de 0.
Costo reducido de Q2=11

Primera Interpretación.- Se puede notar que el producto Q2 no conviene fabricarlo, para que sea
conveniente fabricarlo, su utilidad debe aumentar por lo menos en 11 $ / unidad.

Segunda Interpretación.- Se sabe que el producto 2 no debemos fabricarlo, si forzamos la


producción de este producto, la utilidad total se reducirá en forma proporcional a 11 $ por cada
unidad fabricada.

Observaciones:
- Si en las columnas correspondientes a cada variable, ninguno de los valores son cero, entonces el
modelo no tiene solución.
- Si en las columnas correspondientes a cada variable, los dos valores son ceros, entonces el
modelo tiene más de una solución óptima.

4.- Holguras y Excesos:


a) Holgura 0 en la fila 2: Toda la materia prima ha sido utilizada, sobrante o lbs.
b) Holgura 300 en la fila 3: hay 300 pies3 de espacio de almacén no utilizadas.
c) Variable de exceso 1900 en la fila 4: se están entregando 1900 u. Adicionales alas Empresas
Industriales, ya que lo mínimo que pedían era 200 y estamos entregando 2100.
d) Variable de exceso 0 en la fila 5: se están entregando exactamente lo mínimo pedido (300u.) a las
Empresas Comerciales. No entregamos ninguna unidad adicional.
e) En la fila 6 y fila 7 sale 0 por ser restricciones de igualdad.

5.- Dual Prices (Precios Duales):

a) Unidades de las Variables Duales

Unidad de la F . O. del Pr imal


yi 
Se obtiene como sigue: Unidad del Termino Derecho de la
i  esima restriccion del primal

3 $ de Utilidad 0 $ de Utilidad
y1  y2 
Lbs. de Materia Pr ima Pies 3 de Espacio

0 $ de Utilidad 14 $ de Utilidad


y3  y4 
Producto Comprado por Producto Comprado por
Empresas Industriales Empresas Comerciales

14 $ de Utilidad 21 $ de Utilidad
y5  y6 
Hrs. Planta 1 Hrs. Planta 2

27
Investigación de Operaciones 1

b) Variación del Valor Optimo :

Sea: bi : Término derecho de la i-ésima restricción del primal.


yi : Variable Dual asociada a la i-ésima restricción del primal.
M : Valor óptimo de la F.O. del primal.

Si variamos el término derecho (bi) de la i-ésima restricción primal, en una cantidad  i, si:
 i > 0 estamos incrementando,  i < 0 estamos disminuyendo
M +  i yi
El nuevo valor óptimo es:

i) ¿Si incrementamos 50 lbs. De materia prima cual será la nueva utilidad?


M = 54400
 1 = 50
y1 = 3
 M +  1 y1 = 54400 + 50(3) = 54550 $
ii) Se deterioran 80 lbs de materia prima, ¿cómo afecta esto a la utilidad?

 M+  1 y1 = 54 400 - 80(3) = 54 160 $


En conclusión: por cada libra adicional de materia prima la utilidad aumenta en $3, y por cada
libra de materia prima que se disminuye la utilidad baja en $3.

CONCLUSION:
F.O. maximizar utilidad: Precios duales indican utilidades marginales.
F.O. minimizar costos: Precios duales indican costos marginales.

CASO F.O. INGRESO POR VENTAS


Supongamos:
Max 20Q1 + 15Q2 + 12Q3 + 30Q4 + 16Q5 (Ingreso por ventas $)

Precios de venta

3 $ de Utilidad
y1 
Lbs. de Materia Prima

i) Si se compra 10 lbs. De materia prima, ¿cuál es el máximo precio que debemos pagar por cada
libra?

Sea P = el precio de materia por libra.

54400 + 10(3) - 10P  54400

P  3  Máximo precio que debemos pagar por cada libra.

ii) Si se vende 20 libras de materia prima, ¿cuál es el precio más barato al que debemos vender?

54400 - 20(3) + 20P  54400

P  3  Mínimo precio a cobrar por cada libra.

28
J. Ponce, G. Solís y L. Ulfe Sección E

Conviene Comprar 3 Conviene Vender


Precio de la materia prima
en el mercado

iii) Si la F.O. es nuevamente utilidad.


¿Cuánto es lo máximo que debemos pagar por cada libra de materia prima?

Estamos dispuestos a pagar:

x + 3  Precio Dual
Precio al que compramos cada libra de materia prima. (De los 6 000 disponibles)

iv) Si por cada hora normal se paga $35 en la planta 1, ¿hasta cuánto pagaremos por una hora extra?
35 + 14 = 49 $

6.- Rangos de Sensibilidad Rangos en los cuales la base no cambia.

Rangos para los coeficientes de la F.O.

OBJ COEFFICIENT RANGES


VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE Solución
Q1 20.000000 6.000000 INFINITY Primal
Q2 15.000000 11.000000 INFINITY
Q3 12.000000 INFINITY 6.000000 No
Q4 30.000000 INFINITY 6.000000 Cambia
Q5 16.000000 6.000000 INFINITY

Rangos para los Términos Derechos

RIGHTHAND SIDE RANGES


ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 6000.000000 400.000000 200.000000 Solución
3 4000.000000 INFINITY 300.000000 Dual
4 200.000000 1900.000000 INFINITY
5 300.000000 300.000000 200.000000 No
6 1400.000000 100.000000 200.000000 Cambia
7 1000.000000 66.666660 133.333300

i) Rango de sensibilidad para el coeficiente de Q1 en la F.O.


<20 -  
, 20 + 6 ] = < - , 26] Rango de Sensibilidad

Mientras la utilidad del producto 1, sea menor o igual que 26, el plan de producción óptimo
(solución primal) no cambia.

ii) Rango de sensibilidad para el coeficiente de Q2 en la F.O.


<15 -  
, 15 + 11] = < - , 26] Rango de Sensibilidad

Mientras la utilidad del producto 2, sea menor o igual que 26, el plan de producción óptimo
(solución primal) no cambia.

iii) Rango de sensibilidad para la Materia Prima


[ 6 000 - 200 , 6 000 + 400 ] = [ 5 800 , 6 400 ]

29
Investigación de Operaciones 1

Mientras la cantidad disponible de materia prima este entre 5 800 y 6 400 lbs., los precios duales
no cambian. Podemos comprar hasta 400 lbs. De materia prima o vender hasta 200 lbs. sin
alterar su precio dual.

30

You might also like