Anda di halaman 1dari 33

PROGRAMACIN MATEMTICA

APUNTES DEL PROGRAMA LINGO

CURSO 2006/2007

DEPARTAMENT DE MATEMTIQUES PER A LECONOMIA I


LEMPRESA

Prcticas de Programacin Matemtica con LINGO

1.- INTRODUCCIN A LINGO

1.1.- Introduccin
El programa Lingo ha sido desarrollado por LINDO SYSTEMS INC. Es un programa diseado
para resolver sistemas de ecuaciones e inecuaciones y problemas de optimizacin tanto lineales como
no lineales. En un nivel ms avanzado, LINGO admite un lenguaje de modelizacin por medio del
cual se pueden generar modelos de optimizacin de gran dimensin en unas pocas lneas.
La resolucin de los modelos se hace a travs de cuatro solvers; sin embargo, el usuario no tiene
que preocuparse de elegirlos ya que el programa analiza el problema y elige el ms adecuado
automticamente:
Un solver directo: Calcula el valor de tantas variables como pueda utilizando las igualdades
del modelo. Si quedan variables por calcular finaliza este solver. Si se han podido calcular
todas las variables se muestra el informe de solucin.
Un solver lineal: Si tras actuar el solver directo el modelo que queda es lineal acta este
solver. El solver bsico es el simplex revisado. Como opcin aparecen mtodos de punto
interior o de barrera.
Un solver no lineal: Si el modelo que queda es no lineal acta el solver no lineal que puede
ser un algoritmo de Programacin lineal secuencial (SLP) o uno de gradiente reducido
generalizado (GRG2), segn la estructura del problema.
Un solver para problemas enteros: Cuando hay variables enteras o binarias se usa el mtodo
de ramificacin y acotacin. Si el problema es lineal se aplican tcnicas de
preprocesamiento y se aaden restricciones de corte.
1.2.- Instalacin de la versin libre
Para obtener la versin libre del programa Lingo 9.0 hay que conectar con la siguiente
direccin:
http://www.lindo.com
Esta es la pgina principal de la empresa que comercializa ste y otro tipo de software, a la que
hay que acudir para estar permanentemente informado de las nuevas actualizaciones de los
programas. Para continuar la instalacin hay que seguir con los enlaces Downloads en la parte
izquierda de la pgina, luego Download LINGO y elegir la versin Lingo 10.0 for Windows 32-bit,
x86 (18.1 MB). Tras rellenar un formulario, en el que se requiere una direccin de correo electrnico,
se hace clic sobre el botn I Agree. Ms tarde se recibe un correo electrnico con un enlace para ir a
la pgina de descarga del programa.
Las limitaciones del problema para ser resuelto con esta versin libre son:
150 restricciones
300 variables
30 variables enteras
30 expresiones no lineales
El archivo que se descarga se descomprime ejecutndolo, tras lo cual se crea una carpeta
llamada Lingo10 con el programa y con ficheros de apoyo que incluyen un conjunto de ejemplos
(carpeta Samples). Para ejecutar el programa hay que hacer doble clic sobre Lingo.exe.
1.3.- Lingo y modelizacin matemtica
La resolucin de problemas de optimizacin y, especialmente, en el caso no lineal, puede ser
muy compleja por lo que es conveniente dedicar un tiempo a formular el problema de una manera
eficiente para lograr posteriormente que la solucin se obtenga de manera ms rpida y exacta.
Existen algunos recursos de modelizacin del problema para lograr enunciados ms eficientes, entre
los que destacan:
Introduccin de valores iniciales para las variables (ver tambin la seccin INIT ms
adelante): si se intuye que hay una solucin global mejor a la proporcionada por Lingo (slo
local) es conveniente proporcionar valores iniciales para las variables con el objetivo de
ayudar al solver a llegar a la solucin global. Tambin es til proporcionar valores iniciales
1

La versin actual (Mayo 2006) es la 10.0. No obstante, teniendo en cuenta el tipo de problemas que
vamos a resolver, es casi indiferente trabajar con cualquier versin posterior a la 4.0.
2

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

para aumentar la rapidez en la bsqueda siempre que se conozca el valor aproximado de la


solucin.
Introduccin de cotas para las variables: en problemas de gran dimensin, la introduccin
de cotas para las variables permite eliminar regiones donde no se va a encontrar la solucin
y as disminuir el tiempo de bsqueda. Un segundo objetivo es prevenir operaciones no
definidas, por ejemplo el trmino 1/x requiere una cota inferior suficientemente pequea
para que el valor de la variable x no se acerque a cero.
Escalado del problema: hay que procurar que el orden de magnitud entre el nmero mayor y
el menor no supere 10 3 unidades, ya que ello puede provocar errores de redondeo. Para
escalar el problema puede ser necesario cambiar la unidad de medida, por ejemplo pasando
de euros a millones de euros, de individuos a miles de individuos, etc.
Simplificacin de expresiones: siempre es mejor que las expresiones sean lineales que no
lineales y que sean diferenciables a no diferenciables. Existen algunas transformaciones para
conseguir estos cambios y as reducir el nmero de expresiones no lineales y/o no
diferenciables. De esta manera, el problema se resolver de una manera ms fcil y rpida.
Reduccin del nmero de variables enteras: eliminar la condicin de integridad de las
variables reduce enormemente el tiempo de clculo. Prescindir de la condicin de integridad
para una variable y redondear el valor obtenido a un nmero entero puede ser una buena
alternativa en el caso de que el valor de la variable sea relativamente grande. Hay que tener
en cuenta que la solucin puede no ser factible o no ser ptima y evaluar correctamente las
ventajas e inconvenientes en cada caso.
1.4.- Uso bsico de Lingo
El programa Lingo funciona en entorno Windows, lo que permite aprovechar las ventajas de
este sistema operativo. La sintaxis bsica de Lingo es extremadamente sencilla, ya que la mayora de
la notacin matemtica que se utiliza cuando se escribe en papel se puede incorporar directamente
sobre un problema en Lingo.
Ejemplo 1.- El siguiente problema de optimizacin
Min x2+2y2-0,5xy
s.a

2x+5y 4
x+y = 1
x0, y0

origina una pantalla con el siguiente aspecto:

Las observaciones a tener en cuenta son:


Smbolos asociados a las operaciones matemticas bsicas: +, -, *, /, ^.
Igualdades y desigualdades: =, >, <.
Direccin de optimizacin: Max=, Min=.
Los parntesis se deben utilizar para alterar el orden natural de las operaciones matemticas.
El smbolo ! dar inicio a un comentario.
Todas las lneas del modelo y la ltima dentro de un comentario, acaban con el smbolo;.
Las variables por defecto se entienden no negativas en signo.
3

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Las lneas del modelo, funcin objetivo y restricciones, se pueden nombrar al inicio de la
lnea entre corchetes, [nombre], o no. A medida que aumenta el nmero de lneas se evitan
confusiones si se nombran, sobre todo al realizar la interpretacin econmica.
Cada parte del modelo se visualiza con un color distinto para entender mejor lo que son
comentarios, palabras clave o lneas normales.
Los modelos se resuelven con la opcin de men Lingo-Solve o con el icono:

A continuacin aparece la ventana Lingo Solver Status. Esta ventana muestra informacin sobre
el progreso en la bsqueda de la solucin. Al terminar el algoritmo indica el tipo de solucin
obtenida (local, global, infactible o no acotada), el valor de la funcin objetivo, tiempo de bsqueda,
nmero de iteraciones, etc. En el ejemplo 1, es la siguiente:

Y, por tanto, la solucin obtenida es ptimo local.


Cuando se cierra esta ventana con el botn Close, aparece la solucin del problema en la
ventana Solution Report. En este caso, tenemos:

La interpretacin matemtica es la siguiente:


La solucin proporcionada es x=1/3, y=2/3, valor de la funcin objetivo=0,8888889.
Variables de holgura (filas 2 y 3) = 0, ya que la fila 1 corresponde a la primera lnea del
modelo (la funcin objetivo).
Ms explicaciones requiere la interpretacin de la ltima columna.
4

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Reduced cost (slo en problemas lineales): indica la cuanta en que debera mejorar
el coeficiente de esa variable en la funcin objetivo para que apareciera en la
solucin ptima con un valor (columna value) no nulo. Si esa variable ya tiene un
valor no nulo el valor de reduced cost es cero. Alternativamente se puede
interpretar como la penalizacin que habra que pagar para que esa variable pasara
a tomar un valor no nulo. En trminos del mtodo smplex, dicho valor es el
rendimiento marginal de las variables principales cambiado de signo. En el ejemplo
no cabra interpretar esta columna por no ser un problema lineal.

Dual price: este valor est asociado a cada una de las restricciones y representa el
multiplicador de Kuhn y Tucker o variable dual segn el tipo de problema. Hay que
observar su valor absoluto ya que el signo depender de cmo est enunciado el
problema y habr que aplicar algunos conocimientos tericos para llegar a la
interpretacin econmica correcta de ese valor:

Programacin no lineal: el multiplicador es no negativo si el enunciado es


estndar (Max. con o Min. con ), no positivo en caso contrario o puede ser
positivo o negativo en el caso de restricciones de igualdad. El valor absoluto de
la columna Dual Price lo tenemos que poner en positivo o negativo segn la
forma del enunciado y luego interpretarlo econmicamente como antes. En el
ejemplo, Dual Price=-07222 pero como el enunciado es estndar (Min. con )
implica que 1=07222 y significa que un aumento en una unidad marginal del
trmino independiente de la primera restriccin provocara un aumento de la
funcin objetivo de 0,7222 unidades marginales.
En el caso de restricciones de igualdad, el valor de la columna Dual Price es el
multiplicador que se obtiene habitualmente pero cambiado de signo. Por tanto,
el valor que proporcione Lingo con signo cambiado se interpreta como la
variacin que se produce en el valor ptimo de la funcin objetivo al cambiar
en una unidad marginal el trmino independiente de la restriccin
correspondiente. En el ejemplo 1 el segundo multiplicador es 1111 (valor
Dual Price cambiado de signo) y un aumento infinitesimal del trmino
independiente de la segunda restriccin provocara una disminucin en el valor
ptimo de la funcin objetivo.

Programacin lineal: el valor Dual Price equivale a la variable dual asociada a


esa restriccin. En consecuencia, tambin se puede interpretar dicho valor
como el rendimiento marginal de la variable de holgura cambiado de signo. El
signo de la variable dual hay que deducirlo de las relaciones primal dual y
depende, igual que antes, de si el enunciado es estndar o no. La interpretacin
econmica vuelve a ser la misma: variacin que se produce sobre el valor
ptimo de la funcin objetivo al variar el trmino independiente de la
restriccin en una unidad marginal.

Tanto el modelo como la solucin aparecen en una ventana por lo que es fcil pasar de una a
otra con el ratn. Tambin se pueden organizar con las distintas opciones del men Window.
En caso de errores de sintaxis, Lingo muestra una ventana de advertencia con indicacin de la
lnea donde se ha detectado el error y la posicin exacta en la que se encuentra. En el ejemplo
anterior, si introducimos la primera restriccin sin asteriscos, se genera el siguiente mensaje de error:

El ltimo concepto para utilizar Lingo de una forma bsica es el manejo de archivos. Las
principales opciones de men son:
Guardar un modelo nuevo: File, Save as. Hay que especificar en la ventana el
nombre de archivo y la direccin de disco. La extensin propia de los modelos es .lg4
y la de los informes de solucin .lgr.
5

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Abrir un modelo existente en disco: File, Open. A continuacin se selecciona el


archivo.
Guardar un modelo ya existente con el mismo nombre: File, Save.
Lingo puede tener abiertos varios modelos al mismo tiempo. Para activar uno de ellos basta con
hacer clic sobre su ventana. Los mandatos que se ejecuten a continuacin se referirn al modelo
activo.
1.5.- Opciones de Lingo para la modelizacin y resolucin de problemas
Dominio de definicin de las variables
Por defecto, las variables en Lingo se entienden no negativas en signo y reales, lo que suele ser
adecuado en la mayora de las aplicaciones econmicas. No obstante, existe la posibilidad de cambiar
su dominio de definicin utilizando las funciones @. Las funciones disponibles son:
@FREE(nombre de variable): variable libre o no restringida en signo.
@BND(cota inferior, nombre de variable, cota superior): variable acotada.
@GIN(nombre de variable): variable entera.
@BIN(nombre de variable): variable binaria.
Valores iniciales de las variables
Como se ha dicho anteriormente, en ocasiones es conveniente proporcionar valores iniciales
para las variables a partir de los cuales el solver correspondiente empieza a buscar la solucin. Esto
es especialmente importante en problemas no lineales en los que puede haber ptimos locales pero no
globales ya que cambiando los valores iniciales tendremos ms posibilidades de encontrar el ptimo
global.
Para cambiar los valores iniciales se utiliza la seccin INIT dentro del fichero, siguiendo la
siguiente sintaxis:
INIT:
Nombre de la variable = valor inicial;
ENDINIT
Ejemplo 2.- Si en el ejemplo 1 se desea que el valor inicial de las variables sea (3,4), hay que
modificar el problema de la siguiente manera:

La solucin obtenida es la misma que sin dar valores iniciales a las variables. Cambiando
distintas veces el punto de partida se llega siempre al mismo ptimo. Esto aumenta las posibilidades
de que el ptimo sea global pero nunca lo garantiza.
Lo nico que asegura la globalidad del ptimo, si existe, es el cumplimiento de
las hiptesis del teorema local-global. En programacin lineal siempre se cumplen,
mientras que en programacin no lineal se requiere un anlisis de la convexidad (para
minimizar) o concavidad (para maximizar) de la funcin objetivo y de la convexidad
del conjunto de oportunidades. Si las hiptesis del teorema local-global no se satisfacen
el cambio en el punto de partida puede provocar la aparicin de varios ptimos locales
por lo que, evaluando la funcin objetivo en cada uno de ellos, se pueden descartar
algunos como ptimos globales, quedndose con el mejor de los locales como posible
(aunque no seguro) ptimo global. Si cambiando el punto de partida el ptimo local es
siempre el mismo, igualmente tendremos un posible (pero no seguro) ptimo local.
6

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Opciones para el anlisis de post-optimizacin y de sensibilidad en programacin lineal


El anlisis de post-optimizacin puede realizarse de forma cmoda utilizando la seccin DATA
y asignando el carcter para un parmetro cambiante en el problema. Cada vez que se ejecute el
modelo, Lingo preguntar el valor que queremos asignar a ese parmetro. Este tipo de estudio puede
hacerse tambin en problemas no lineales.
Ejemplo 3.- Problema lineal con postoptimizacin para el primer trmino independiente:

Por otra parte, el anlisis de sensibilidad se realiza con la opcin de men Lingo, Range. Si no
est activada est posibilidad hay que activarla previamente con Lingo, Options, General Solver,
Dual Computations, Prices & Ranges. En todo caso, este tipo de anlisis estar disponible tras
resolver el modelo y no antes y desde la ventana del modelo, no desde la ventana de la solucin.
El anlisis de sensibilidad se muestra en la ventana Range Report. Afecta a los trminos
independientes de las restricciones y a los coeficientes de la funcin objetivo. La forma de construir
el intervalo de sensibilidad es aplicando los aumentos y disminuciones permitidas sobre el valor
original del coeficiente o del trmino independiente. En el ejemplo 3 con un valor b 1=14, la solucin
del anlisis de sensibilidad es:

Aplicando los aumentos y disminuciones permitidas se deduce, por ejemplo, que el intervalo de
sensibilidad del primer coeficiente de la funcin objetivo es [2-05, 2+[=[15, +[ y el del trmino
independiente de la primera restriccin es [14-14, 14+2] = [0, 16]. Lo mismo con el resto de
parmetros. La interpretacin matemtica es, en general, que si los cambios en los parmetros
quedan dentro de los intervalos no provocarn alteraciones en la composicin de la base: las
variables bsicas y no bsicas seguirn siendo las mismas.
7

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Recuerda que para obtener la tabla del anlisis de sensibilidad debe estar activado
el clculo de los rangos de sensibilidad con Lingo, Options, General Solver, Dual
Computations, Prices & Ranges. Luego debe resolverse el problema, luego volver a la
ventana del modelo y, por ltimo, obtenerla con Lingo, Range
1.6.- Un breve repaso al resto de opciones de men en Lingo
Men fichero (File)
Abre un modelo nuevo (New), uno ya existente (Open), guarda el modelo con el mismo nombre
(Save), con otro nombre o en otra direccin de disco (Save as), cierra una ventana (Close), la
imprime (Print), enva las prximas ventanas de informe a un fichero de texto (Log output), importa
o exporta un fichero en formato MPS (MPS file), sale de Lingo (Exit).
Men de edicin (Edit)
Deshace la ltima accin (Undo), la repite (Redo), prepara la seleccin para moverla (Cut) o
copiarla (Copy), la mueve o copia en el destino (Paste), selecciona todo el contenido de la ventana
activa (Select All), busca o reemplaza un texto (Find/Replace), va a una lnea (Go to line), encuentra
el parntesis que cierra el abierto que se ha seleccionado (Match Parenthesis), pega una funcin de
Lingo (Paste Function), cambia la fuente del texto (Select Font).
Las funciones de Lingo o funciones @ que se incorporan con Paste Function estn agrupadas
por categoras. A continuacin hacemos un repaso destacando las ms importantes.
Dominio de las variables
@FREE(nombre de la variable): variable no restringida en signo.
@GIN(nombre de la variable): variable entera.
@BIN(nombre de la variable): variable binaria.
@BND(cota inferior, nombre de la variable, cota superior): variable acotada.
Clculos financieros
@FPA(I,N): Calcula el valor presente de una corriente de pagos de 1 unidad monetaria
capitalizando a un tipo periodal de I (en tanto por uno) durante N periodos.
@FPL(I,N): Calcula el valor presente de una unidad monetaria recibida dentro de N
periodos utilizando un tipo de inters periodal igual a I (en tanto por uno).
Clculos matemticos
@ABS(X), @COS(X), @SIN(X), @TAN(X), @EXP(X): ex, @LOG(X): Ln x
Clculos de probabilidades
@PSN(X): Probabilidad de obtener un valor menor o igual que X en una N(0,1).
@PPS(A,X): Idem para una Poisson con media A.
Funciones para trabajo con conjuntos (ver en Lingo avanzado)
@FOR(nombre del conjunto|condicin:expresin): aplica la expresin indicada para cada
elemento del conjunto que cumpla la condicin. Si no se especifica condicin se ejecuta
para todos los elementos del conjunto y equivale al smbolo .
@IN(nombre del elemento, nombre del conjunto): devuelve verdadero si el elemento est
dentro del conjunto.
@MAX(nombre del conjunto|condicin:expresin): proporciona el valor mximo de la
expresin para los elementos del conjunto que cumplan la condicin.
@MIN(nombre del conjunto|condicin:expresin): proporciona el valor mnimo de la
expresin para los elementos del conjunto que cumplan la condicin.
@SIZE(nombre del conjunto): devuelve el nmero de elementos del conjunto.
@SUM(nombre del conjunto|condicin:expresin): realiza el sumatorio de la expresin
indicada para cada elemento del conjunto que cumpla la condicin. Equivale al smbolo .
Men Lingo
o Solve: ejecuta el modelo activo.
8

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

o Solution: se utiliza para determinar la forma en que queremos mostrar la solucin de un


modelo ya ejecutado con Solve.
o Range: muestra el anlisis de sensibilidad de los coeficientes de la funcin objetivo y de
los trminos independientes de las restricciones. Es una opcin disponible slo en
problemas lineales.
o Options: Controla distintos parmetros que afectan a la forma en que se resuelve el
modelo. La ventana Lingo Options es:

Desde la ficha Interface se controla algunos aspectos de las pginas de Lingo como los lmites
en el nmero de lneas y en la longitud de cada lnea, el lmite para asignar el valor cero a una
variable (Solution Cutoff), etc.
La ficha General Solver controla aspectos que afectan a cualquier tipo de problema como los
lmites (de memoria, de nmero de iteraciones o de tiempo) hasta encontrar una solucin. Aqu se
puede elegir entre varios mtodos numricos de resolucin, aunque tambin se puede dejar esta
eleccin al programa (Solver decides). En Dual Computations es donde hay que seleccionar si se van
a calcular los intervalos de sensibilidad, los valores duales o multiplicadores o slo los valores de las
variables. Tambin existe una casilla de verificacin para trabajar por defecto con variables no
negativas o no.
En las fichas Nonlinear Solver y Linear Solver se puede elegir el mtodo numrico para
resolver el problema segn sea no lineal o lineal. Tambin se controlan algunos parmetros. Los de
tolerancia a la factibilidad inicial o final indican la cuanta permitida para que una restriccin no se
satisfaga y pese a ello se acepte como factible en las iteraciones iniciales o finales del algoritmo. Este
parmetro es distinto en restricciones lineales y no lineales. La tolerancia a la optimalidad no lineal
indica el nivel mnimo para un indicador (basado en el gradiente) de la tasa de mejora de la funcin
objetivo al cambiar una variable. Por debajo de ese valor no habr cambios en esa variable. El
cambio en los distintos parmetros por defecto no es recomendable si no se es experto en el
funcionamiento de los mtodos numricos de optimizacin. Su modificacin permite alterar la
relacin entre exactitud de la solucin y rapidez de obtencin, lo cual es importante sobre todo en
problemas de gran dimensin.
En problemas con variables enteras hay otros parmetros controlables dentro de la ficha Integer
Solver. El parmetro de tolerancia a la integridad relativa indica la diferencia relativa de una
variable al valor entero ms prximo y sirve para aceptar como entero el valor de una variable. El
parmetro Hurdle es el valor de la funcin objetivo de alguna solucin factible conocida de
antemano, de esa manera para llegar a una solucin entera inicial, se eliminarn las ramas con un
peor valor para la funcin objetivo. Una vez obtenida una solucin entera, este parmetro ya no se
utiliza. El parmetro de optimalidad indica que slo se investigarn las ramas cuya solucin sea
mejor que una ya conocida en al menos 100 veces dicho parmetro.
o Generate: con la opcin Display model se incorpora el enunciado del problema en un
formato extendido (slo en el caso lineal).
o Picture: representa la matriz de coeficientes del modelo (slo en el caso lineal).
o Look: visualiza las lneas seleccionadas del modelo.
9

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Men Window
Se ocupa de la gestin de las ventanas. Destaca la opcin de pasar a modo comando (Command
Window) para los que estn familiarizados con versiones de Lingo en modo D.O.S.. Muy til resulta
tambin la opcin Send to Back para intercambiar las ventanas abiertas, por ejemplo la del modelo y
la de la solucin.
Men de ayuda (Help)
Permite visualizar el contenido de la ayuda, bien por captulos o bien por contenidos
alfabticamente, introduciendo en la casilla correspondiente la opcin a buscar.

10

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

2.- CMO USAR


OPTIMIZACIN

LINGO

EN

CADA TIPO

DE PROBLEMA DE

2.1.- Programacin no lineal


La programacin no lineal se caracteriza por tener funciones generales (lineales o no lineales)
tanto en la funcin objetivo como en las restricciones. Tambin puede haber condiciones de dominio
(variables acotadas o no negativas) o no (variables libres). Puede haber restricciones de igualdad, de
desigualdad o no haber restricciones. No obstante, para distinguir este caso de otros tipos de
Programacin Matemtica, existir alguna funcin no lineal. Por ltimo, aunque Lingo lo permite,
no se tratar el caso de variables enteras o binarias.
En estos problemas se especificar normalmente si se desea maximizar o minimizar la funcin
objetivo aunque puede pedirse optimizar en las dos direcciones. El ptimo que muestra Lingo es
local (salvo en el caso lineal) y el anlisis de la globalidad o la bsqueda de otros ptimos locales se
debe hacer de forma terica: teorema local-global. Slo en el caso en que no se satisfaga alguna de
las hiptesis de este teorema se proceder cambiando el punto inicial (seccin INIT) para aumentar
las posibilidades de que el ptimo sea global.
En resumen, las consideraciones a tener en cuenta son:
Incluir la condicin de dominio apropiada para cada problema: @FREE(X) para variables
libres, @BND(cota_inferior, X, cota_superior) para variables acotadas y no poner nada si la
variable es no negativa.
Utilizar Max= o Min= segn el objetivo de optimizacin.
Analizar el teorema local global: funcin objetivo cncava (si se maximiza) o convexa (si se
minimiza) y conjunto de oportunidades convexo, lo que en la prctica queda garantizado si
las restricciones de mayor o igual son cncavas, las de menor o igual son convexas y las de
igualdad son lineales.
En caso de no cumplirse las hiptesis del teorema local global, cambiar el punto inicial para
realizar un anlisis alternativo, aunque aproximado, de la globalidad.
Los multiplicadores de Kuhn y Tucker aparecen en la columna Dual Price de cada
restriccin (Row) en valor absoluto. El signo depende del enunciado: si es estndar son no
negativos y si no lo es son no positivos. Si la restriccin es de igualdad se cambia el signo a
la columna Dual Price. Su interpretacin econmica es la influencia sobre el valor ptimo
de la funcin objetivo ante cambios en el trmino independiente de las restricciones.
Las variables de holgura se obtienen en la columna Slack or Surplus de la ventana Solution
Report e indican la diferencia entre ambos miembros de la restriccin.
Problema PNL1.- Resolver:
Min. x2+y2
s.a: x+y 1, x-y 0, x 0
El problema en Lingo da como resultado:
Variable
X
Y

Value
0.5000000
0.5000000

Row
Slack or Surplus
[OBJ]
0.5000000
[R1]
0.0000000
[R2]
0.0000000

Reduced Cost
0.0000000
0.0000000
Dual Price
1.000000
-1.000000
0.0000000

La solucin es el punto (05, 05). El problema cumple el teorema local global porque la
funcin objetivo es estrictamente convexa (la hessiana tiene como menores conducentes valores
estrictamente positivos: es definida positiva) y porque las dos restricciones son lineales, cncavas y
convexas a la vez, tomndose la primera como cncava (es ) y la segunda como convexa (es ). En
consecuencia, el punto (05, 05) es mnimo global y no hay que buscar otros mnimos locales.
El multiplicador de Kuhn y Tucker es el de la columna Dual Price en valor absoluto, siendo
positivo o negativo segn la forma del enunciado. Como la primera restriccin est en forma
estndar, 1=1 y significa que un aumento marginal del trmino independiente de la primera
restriccin implica un aumento en la funcin objetivo de la misma cuanta aproximadamente. En
cambio, la segunda restriccin no est en forma estndar y el multiplicador debe ser no positivo
11

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

aunque en este caso 2=0 y una variacin marginal en el trmino independiente de la segunda
restriccin no afectar a la funcin objetivo.
Ambas variables de holgura son cero y, por tanto, las restricciones se cumplen con igualdad o
estn saturadas en el ptimo.
Problema PNL2.- Resolver:
Max. x
s.a: x+2y 8, (x-2)2+y 4, x 0, y 0
La solucin en Lingo es:
Variable
X
Y

Value
8.000000
0.0000000

Row
Slack or Surplus
[OBJ]
8.000000
[R1]
0.0000000
[R2]
32.00000

Reduced Cost
0.0000000
-2.000000
Dual Price
1.000000
-1.000000
0.000000

El punto (8, 0) es mximo local pero no necesariamente global ya que no se cumple el teorema
local global al ser la segunda restriccin convexa (hessiana semidefinida positiva) y no cncava y ser
de mayor o igual. Los multiplicadores de Kuhn y Tucker son 1=1 y 2=0, lo que significa que un
aumento marginal en el trmino independiente de la primera restriccin provocar un aumento en el
valor ptimo de la funcin objetivo (una mejora), mientras que las variaciones en el segundo trmino
independiente no afectarn a dicho valor. Obsrvese que la segunda restriccin no est saturada por
lo que el multiplicador vale cero (condicin de holgura complementaria).
El cambio en el punto de partida, en este caso, es relevante para determinar otros mximos
locales y para estudiar la globalidad de los obtenidos. Sin embargo, cualquier cambio en dicho punto
lleva siempre al (8, 0) por lo que probablemente no existan otros mximos locales y ese sea, adems,
global. No obstante, un estudio grfico del problema s que muestra otro mximo local
aproximadamente en el punto (122, 339) aunque el valor de la funcin objetivo es inferior a la que
se obtiene en (8,0). Este problema demuestra la limitacin de los programas informticos de
optimizacin en problemas no lineales sin las condiciones apropiadas de convexidad/concavidad.
Problema PNL3.- Encontrar los mximos y mnimos locales y globales del problema:
Opt. x2+2y2+4z2
s.a: x+y+z=35
La solucin para maximizar es no acotada mientras que para minimizar se obtiene:
Variable
X
Y
Z
Row
[OBJ]
[R1]

Value
2.000000
1.000000
0.5000000
Slack or Surplus
7.000000
-0.3214904E-08

Reduced Cost
0.0000000
-0.1228276E-06
-0.2049930E-07
Dual Price
1.000000
-4.000001

El punto (2, 1, 05) es mnimo local con multiplicador asociado =4. Adems tambin es global
porque se satisface el teorema local global ya que:
1) La funcin objetivo es estrictamente convexa por tener su hessiana menores conducentes
estrictamente positivos y ser, por tanto, definida positiva.
2) El conjunto de oportunidades es convexo por estar definido mediante un hiperplano
(restriccin lineal de igualdad).
En consecuencia, no tiene sentido buscar otros mnimos locales.
El multiplicador de Lagrange es 4 y significa que un aumento de una unidad marginal en el
trmino independiente de la restriccin supondr un aumento del valor ptimo de la funcin objetivo
(empeora) de 4 unidades marginales aproximadamente. Por ejemplo, si el trmino independiente
pasa a valer 36 (aumenta 01) la funcin objetivo aumentar en 04 y, aproximadamente, pasar a
valer 7+04=74. Efectivamente, si se resuelve el problema con este cambio, el valor ptimo real es
de 74057.
12

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Problema PNL4.- Encontrar los mximos y mnimos locales y globales del problema:
Opt. x2+y2
s.a: x2+y=45
Intentando, en primer lugar, mnimos locales se llega a:
Variable
X
Y

Value
2.000000
0.4999999

Row
Slack or Surplus
[OBJ]
4.250001
[R1]
-0.5513123E-06

Reduced Cost
0.1410101E-07
0.0000000
Dual Price
1.000000
-1.000000

El punto (2, 05) es mnimo local con =1. Sin embargo, no se puede asegurar su globalidad ya
que el conjunto de oportunidades no es convexo al estar definido mediante una igualdad no lineal.
Para aumentar las posibilidades de que sea global o encontrar otros mnimos locales se procede a
cambiar el punto inicial.
Con el punto inicial (-10, -10) se llega a un nuevo mnimo local en el punto (-2, 05). El valor
de la funcin objetivo en ambos es el mismo e igual a 425 por lo que no se puede descartar a
ninguno como mnimo global. Cambiando repetidamente el punto inicial se llega siempre a uno de
los dos anteriores por lo que se concluye casi con total seguridad que ambos puntos son mnimos
globales.
Si buscamos mximos locales, aparece solucin no acotada por lo que no hay mximo global.
Sin embargo, en este caso, es posible encontrar un mximo local (esto no ocurrira si se cumpliese el
teorema local global), pero slo se podr detectar si establecemos un punto inicial muy prximo a
dicho mximo local. En este caso estableciendo el punto (0, 4) se llega a:
Variable
X
Y

Value
-0.3028411E-07
4.500000

Row
[OBJ]
[R1]

Slack or Surplus
20.25000
0.0000000

Reduced Cost
0.1598722E-06
0.0000000
Dual Price
1.000000
-9.000002

Se deduce que (0, 45) con =9 es un mximo local pero no global.


Aplicaciones econmicas
Problema PNL5 (Problema del consumidor).- Un individuo tiene una funcin de utilidad que
depende del consumo de dos bienes (en cantidades x e y): U(x, y) = 10x 03y07. Los precios unitarios
de los bienes son 14 y 1 unidad monetaria respectivamente y la renta presupuestaria es de 140 u.m.
Se pide:
a)

Determine el vector ptimo de consumo de este individuo si quiere maximizar su utilidad.

b) Obtenga la utilidad ptima, el valor del multiplicador, de la variable de holgura y razone el


efecto que tendra sobre la utilidad el aumento en la renta presupuestaria.
Respuesta a):
Modelizacin: Siendo x e y las cantidades a consumir de ambos bienes, la restriccin indica que
el gasto del consumidor, obtenido al multiplicar precios de los bienes por las cantidades, no puede
exceder la renta presupuestaria. Como la funcin objetivo viene dada por el problema, el
planteamiento matemtico es:
Max. 10x03y07
s.a: 14x+y 140, x 0, y 0

13

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Solucin:
!Problema PNL5: Problema del consumidor;
[OBJ] Max=10*x^0.3*y^0.7;
[PPTO] 1.4*x+y<140;
Solucin:
Variable
X
Y

Value
30.00000
98.00000

Row
Slack or Surplus
[OBJ]
687.0599
[PPTO]
0.0000000

Reduced Cost
0.0000000
0.1450048E-06
Dual Price
1.000000
-4.907570

Interpretacin y anlisis: El vector ptimo de consumo es (30, 98). Consumir 30 unidades del
primer bien y 98 del segundo. El mximo local que se muestra es tambin global porque la funcin
objetivo es cncava, al ser del tipo Cobb-Douglass con suma de exponentes menor o igual a uno, y la
restriccin define un conjunto convexo por ser un semiespacio (se satisface el teorema local global).
Respuesta b):
La utilidad ptima alcanzada es de 6870599 unidades y el multiplicador vale 490757,
gastndose el consumidor toda su renta. Esto significa que una unidad monetaria adicional de
presupuesto disponible supondr una mejora (aumento) en la utilidad de esa cuanta, pasando a valer
aproximadamente 6870599+490757 = 69196747.
Problema PNL6 (Problema de la empresa).- Una empresa tiene una funcin de produccin
que depende de la cantidad utilizada de dos factores productivos, capital y trabajo: F(K, L) =
25x04y06. Los costes unitarios de los factores son de 1 y 3 unidades monetarias respectivamente y la
produccin mnima que debe alcanzar la empresa es de 198 unidades. Se pide:
a)

Determine el vector ptimo de utilizacin de factores productivos de esta empresa si quiere


minimizar los costes.

b) Obtenga la produccin ptima, el valor del multiplicador, de la variable de holgura y


razone el efecto que tendra sobre los costes el aumento en la produccin mnima requerida.
Respuesta a):
Modelizacin: La funcin objetivo es de costes y se obtiene multiplicando costes unitarios por
unidades utilizadas de cada factor. La restriccin es de produccin mnima y exige que la funcin de
produccin de la empresa, dada en el enunciado, sea mayor o igual que el mnimo requerido. El
planteamiento matemtico es:
Min. K+3L
s.a: 25K04L06 198 , K 0, L 0
Solucin:
!Problema PNL6: Problema de la empresa;
!Funcin objetivo;
[OBJ] Min=K+3*L;
!Restriccin de produccin mnima;
[PRMIN] 25*K^0.4*L^0.6>198;
Solucin:
Variable
K
L

Value
12.00447
6.002238

Row
Slack or Surplus
[OBJ]
30.01119
[PRMIN]
0.0000000

Reduced Cost
0.0000000
0.0000000
Dual Price
1.000000
-0.1515717

Interpretacin y anlisis: El vector de utilizacin de factores es aproximadamente (12, 6). Se


emplearn 12 unidades de capital y 6 de trabajo. El mnimo local que se muestra es tambin global
porque la funcin objetivo es convexa, al ser lineal, y la restriccin define un conjunto convexo por
14

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

ser un conjunto de nivel superior con funcin cncava (Cobb-Douglass de nuevo), cumplindose por
tanto el teorema local global.
Respuesta b)
El coste mnimo alcanzado es de 3001 unidades y el multiplicador vale 015157,
producindose exactamente el mnimo requerido. Si la produccin mnima que se exige aumentara
en una unidad marginal los costes aumentaran en 015157 unidades, pasando a valer
aproximadamente 3001119+015157 = 3016276.
Problema PNL7 (Problema de seleccin de cartera).- Un inversor dispone de un presupuesto
mximo de 1 (de esta manera los resultados vendrn dados en tanto por uno) para invertir en dos
tipos de activos, renta fija (x) y renta variable (y). Las rentabilidades esperadas son del 22% y del
6% respectivamente y el inversor exige una rentabilidad mnima esperada del 35% para su
inversin. La funcin del riesgo en el modelo bsico de seleccin de cartera es una forma cuadrtica
donde la matriz asociada es la de varianzas y covarianzas de las rentabilidades segn datos
histricos. En este caso, dicha funcin es: 0005x 2+008y2-001xy. Se pide:
a)

Determine la parte del presupuesto a invertir en cada activo si se desea minimizar la


funcin de riesgo.

b) Calcule el riesgo ptimo, el multiplicador de Kuhn y Tucker, la variable de holgura y


razone cmo afecta la exigencia de una mayor rentabilidad mnima sobre el riesgo.
Respuesta a)
Modelizacin: La funcin a minimizar es de riesgo y viene dada en el enunciado. El problema
tiene dos restricciones. Primero se exige una rentabilidad mnima mediante una desigualdad en la
que la rentabilidad de la cartera, obtenida como combinacin lineal de las rentabilidades de ambos
activos, es mayor o igual que la mnima exigida en el enunicado. La segunda indica que la suma
invertida no exceda el presupuesto (no podemos endeudarnos). El modelo es:
Min. 0005x2+008y2-001xy
s.a: 0022x+006y 0035 , x + y 1 , x 0, y 0
Solucin:
!Problema PNL7: Problema de seleccin de cartera;
!Funcin objetivo;
[OBJ] Min=0.005*x^2+0.08*y^2-0.01*x*y;
!Restriccin de rentabilidad mnima;
[RMIN] 0.022*x+0.06*y>0.035;
!Restriccin presupuestaria;
[PPTO] x+y<1;
Solucin:
Variable
X
Y

Value
0.6578947
0.3421053

Row
[OBJ]
[RMIN]
[PPTO]

Slack or Surplus
0.9276316E-02
0.0000000
0.0000000

Reduced Cost
0.0000000
0.0000000
Dual Price
1.000000
-1.184211
0.2289474E-01

Interpretacin y anlisis: Se invertir 06579 (un 6579%) en el primer activo y 03421 (un
3421%) en el segundo activo. El mnimo local obtenido es global porque la funcin objetivo es
convexa, dado que la hessiana es el doble de la matriz de varianzas y covarianzas y sta es siempre
una matriz semidefinida positiva, y porque el conjunto de oportunidades es convexo al ser
interseccin de semiespacios (desigualdades lineales).
Apartado b)
La variable de holgura es cero con lo que quedar invertido el presupuesto total entre ambos
activos. El riesgo mnimo es 0009276, algo menos del 1%. El multiplicador de Kuhn y Tucker de la
restriccin de rentabilidad mnima es 11842, lo que significa que si el inversor desea una
rentabilidad mnima esperada ms alta ser a costa de aumentar el riesgo que deber asumir ese
inversor: un 1% ms de rentabilidad esperada implica un riesgo de 11842% ms.

15

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

2.2.- Programacin lineal


La programacin lineal se caracteriza por tener funciones lineales tanto en la funcin objetivo
como en las restricciones. Tambin puede haber condiciones de dominio (variables acotadas o no
negativas) o no (variables libres). Las restricciones pueden adoptar cualquier sentido, aunque en el
caso de que sean todas de igualdad exigiremos que haya menos restricciones que variables. Por
ltimo, el caso lineal con variables enteras o binarias se tratar ms adelante bajo el ttulo de
Programacin lineal entera.
En Programacin lineal, al igual que en Programacin no lineal, se especificar si se desea
maximizar o minimizar la funcin objetivo por lo que slo se buscar en una direccin de
optimizacin. El ptimo que muestra Lingo, si existe, es siempre global (Global Optimum) dado que
la linealidad de todas las funciones garantiza el cumplimiento del teorema local global. Sin embargo,
la unicidad de dicha solucin hay que razonarla a partir del informe de la solucin que se muestra.
En caso de que no exista solucin el mensaje ser Unbounded para solucin no acotada o Infeasible
para solucin infactible.
En resumen, las consideraciones a tener en cuenta son:
Incluir la condicin de dominio apropiada para cada problema: @FREE(X) para variables
libres, @BND(cota_inferior, X, cota_superior) para variables acotadas y no poner nada si la
variable es no negativa.
Utilizar Max= o Min= segn el objetivo de optimizacin.
Analizar el tipo de solucin del problema. En el caso de que se muestre solucin hay que
analizar si es de vrtice o arista. Para ello se debe seguir la siguiente metodologa:

Deducir cules son las variables bsicas (tantas como restricciones) y no bsicas.

Observar las columnas Reduced Cost y Dual Price de las variables no bsicas.

Si algn valor es cero, la solucin es de arista y esa variable no bsica podra entrar
en la base. Si todos son distintos de cero, la solucin es de vrtice.

Los rendimientos marginales de las variables aparecen en la columna Reduced Cost y Dual
Price, cambiados de signo. La columna Dual Price indica tambin las variables duales o
multiplicadores de Kuhn y Tucker, teniendo en cuenta el signo apropiado segn las
relaciones primal dual.
Las variables de holgura se obtienen en la columna Slack or Surplus de la ventana Solution
Report e indican la diferencia entre ambos miembros de la restriccin.
El anlisis de sensibilidad de los coeficientes de la funcin objetivo y de los trminos
independientes de las restricciones se obtiene con Lingo, Range.
A continuacin se muestran varios problemas que abarcan gran parte de la casustica que se
puede plantear en Programacin Lineal.
Problema PL1 (solucin de vrtice).- Resolver:
Max. F(x1, x2) = x1 + 2x2
s.a:

x1 + x2 4, 2x1 + x2 6, x1 0, x2 0

El enunciado y la solucin en Lingo es:


!Problema PL1: Poliedro - vrtice;
!Funcin objetivo;
[OBJ] Max=x1+2*x2;
!Restricciones;
[R1] x1+x2<4;
[R2] 2*x1+x2<6;
Solucin:
Variable
Value
X1
0.000000
X2
4.000000
Row
Slack or Surplus
[OBJ]
8.000000
[R1]
0.000000
[R2]
2.000000
16

Reduced Cost
1.000000
0.0000000
Dual Price
1.000000
2.000000
0.000000
Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Tipo de solucin: el problema tiene dos restricciones que implica dos variables bsicas. Como
hay dos variables distintas de cero (x 2 y s2) esas son las bsicas. Observando la ltima columna de las
no bsicas (x1 y s1), se detectan valores 1 y 2, que al ser distintos de cero llevan a la conclusin de
que la solucin es de vrtice.
Problema PL2 (solucin de arista).- Resolver:
Max. F(x1, x2) = 2x1 + 2x2
x1 + x2 4, 2x1 + x2 6, x1 0, x2 0

s.a:

El enunciado y la solucin en Lingo es:


!Problema PL2: Poliedro - arista;
!Funcin objetivo;
[OBJ] Max=2*x1+2*x2;
!Restricciones;
[R1] x1+x2<4;
[R2] 2*x1+x2<6;
Solucin:
Variable
X1
X2
Row
[OBJ]
[R1]
[R2]

Value
0.000000
4.000000

Slack or Surplus
8.000000
0.000000
2.000000

Reduced Cost
0.0000000
0.0000000
Dual Price
1.000000
2.000000
0.000000

Tipo de solucin: Las variables bsicas son dos, x 2 y s2, por ser no nulas. Observando la ltima
columna de las no bsicas (x 1 y s1), se detecta un valor nulo en x 1, por lo que la solucin es de arista y
la solucin mostrada es uno de sus extremos. El clculo del otro extremo requerira hacer una
iteracin sabiendo que entra x1. La obtencin de la variable de salida exige cierto razonamiento. En
este caso, la opcin de que salga x2 se descarta porque las variables bsicas (x 1, s2) dan lugar a una
solucin infactible, siendo la nica opcin posible la de que salga s 2, llegando a la solucin (x 1, x2) =
(2, 2) como el otro extremo de la arista.
Problema PL3 (solucin de arista infinita).- Resolver:
Max. F(x1, x2) = x2
-x1 + x2 4, x2 6, x1 0, x2 0

s.a:

En este caso, el conjunto de oportunidades es un poltopo, que es no acotado. En estos casos


adems de solucin de vrtice y de arista puede aparecer solucin de arista infinita (Problema PL3) o
no acotada (PL4). En este problema, el enunciado y la solucin en Lingo es:
!Problema PL3: Poltopo - arista infinita;
!Funcin objetivo;
[OBJ] Max=x2;
!Restricciones;
[R1] -x1+x2<4;
[R2] x2<6;
Solucin:
Variable
X2
X1
Row
[OBJ]
[R1]
[R2]

Value
6.000000
2.000000

Slack or Surplus
6.000000
0.000000
0.000000

Reduced Cost
0.0000000
0.0000000
Dual Price
1.000000
0.000000
1.000000

Tipo de solucin: Las variables bsicas son dos, x 2=6 y x1=2, por ser no nulas. Observando la
ltima columna de las no bsicas (s 1 y s2), se detecta un valor nulo en s 1, por lo que la solucin es de
arista y esta variable puede entrar. Saber si es arista o arista infinita no es evidente y se necesita
continuar el razonamiento. En este caso, la variable que entra, s 1, no puede sustituir a x 2 porque en la
17

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

segunda restriccin s2 debe seguir valiendo 0. Pero si sustituye a x 1 se llega a una solucin infactible
en la primera restriccin, por lo que no hay criterio de salida y ello indica solucin de arista infinita.
Como el valor de la funcin objetivo debe ser el mismo en cualquier punto de esa arista, se tiene que
x2=6 es el valor ptimo de esa variable, mientras x 1 tomar cualquier valor factible, es decir, x 1 2,
observando la primera restriccin.
Problema PL4 (solucin no acotada).- Resolver:
Max. F(x1, x2) = x1 + x2
-x1 + x2 4, x2 6, x1 0, x2 0

s.a:

El mensaje que se muestra al resolver es Unbounded Solution, es decir, solucin no acotada.


Ello significa que el ptimo del problema se puede mejorar de forma infinita. Este caso slo puede
darse ante poltopos y no ante poliedros porque en este ltimo caso se cumple el teorema de
existencia de Weierstrass.
Problema PL5 (solucin infactible).- Resolver:
Max. F(x1, x2) = x1 + x2
-x1 + x2 4, -x1 + x2 2, x1 0, x2 0

s.a:

El mensaje que se muestra al resolver es No feasible Solution found, es decir, solucin


infactible. Ello se debe a que las restricciones son incompatibles y, por tanto, definen el conjunto
vaco.
Problema PL6 (variables acotadas).- Resolver:
Max. F(x1, x2) = x1 + 2x2
-x1 + x2 2, 0 x1 5, 1 x2 4

s.a:

El enunciado y la solucin en Lingo es:


!Problema PL6: variables acotadas;
!Funcin objetivo;
[OBJ] Max=x1+2*x2;
!Restricciones;
[R1] -x1+x2<2;
@bnd(0,x1,5);
@bnd(1,x2,4);
Solucin:
Variable
X1
X2
Row
[OBJ]
[R1]

Value
5.000000
4.000000

Slack or Surplus
13.00000
3.000000

Reduced Cost
-1.000000
-2.000000
Dual Price
1.000000
0.000000

En el caso de variables acotadas no se establece la equivalencia entre variables no bsicas y


variables con valor nulo. En su lugar, las variables no bsicas tambin pueden ser aquellas cuyo valor
est en alguna de sus cotas. En este problema, slo hay una variable bsica (slo hay una restriccin)
mientras que las tres variables son no nulas x 1=5, x2=4 y s1=3, sin embargo las dos variables
principales estn en alguna de sus cotas y, en consecuencia, son no bsicas siendo s 1 la nica variable
bsica. Como las dos variables no bsicas tienen un valor no nulo en la ltima columna, la solucin
es de vrtice.
Problema PL7 (Otras condiciones de dominio).- Resolver:
Max. F(x1, x2) = x1 + 2x2 + 3x3
s.a:

-x1 + x2 + 2x3 12, 2x1 + x2 + 3x3 18 , x1 0, 1 x2 4, x3 libre

El enunciado del problema se puede pasar a Lingo sin necesidad de hacer ninguna
transformacin de variables. El caso de variable no positiva se trata como variable acotada entre - y
0, siendo 1E+20 un nmero suficientemente negativo que se utiliza como aproximacin a - . El
enunciado y solucin es:
18

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

!Problema PL7: otras condiciones de dominio;


!Funcin objetivo;
[OBJ] Max=x1+2*x2+3*x3;
!Restricciones;
[R1] -x1+x2+2*x3<12;
[R2] 2*x1+x2+3*x3<18;
@bnd(-1E+20,x1,0);
@bnd(1,x2,4);
@free(x3);
Solucin:
Variable
X1
X2
X3
Row
[OBJ]
[R1]
[R2]

Value
0.000000
4.000000
4.000000

Reduced Cost
-2.500000
-0.500000
0.000000

Slack or Surplus
20.00000
0.000000
2.000000

Dual Price
1.000000
1.500000
0.000000

El problema tiene dos variables bsicas (dos restricciones) y hay tres variables no nulas, aunque
una de ellas (x2=4) corresponde a la cota superior, por tanto esta se descarta como bsica quedando
como variables bsicas x3=4 y s2=2. Observando la ltima columna en las variables no bsicas (x 1, x2,
s1) se observan valores no nulos y la solucin es de vrtice.
Aplicaciones econmicas
Problema de mezclas.- Se desea mezclar, con un coste mnimo o con un beneficio mximo,
varias materias primas para obtener distintos productos finales que cumplan ciertas caractersticas.
Cada materia prima contribuye a cada caracterstica de cada producto final en una determinada
cuanta o proporcin. Adems se deben satisfacer las limitaciones de existencia de las materias
primas y los requisitos de demanda de los productos finales. A su vez, la mezcla puede estar sometida
a prdidas por la aparicin de productos residuales sin ningn valor.
Problema PL8.- Una empresa de cosmtica utiliza 4 componentes para producir dos tipos de
crema hidratante (para hombre y para mujer). Ambas deben satisfacer unos requisitos mximos de
acidez (pH) y unos mnimos de viscosidad. En la siguiente tabla se muestra la aportacin de cada
componente a cada caracterstica y el coste unitario de los componentes.
Aportacin por componente
pH

Viscosidad

Coste unitario

Componente 1

1,45

Componente 2

3,24

Componente 3

7,32

Componente 4

0,12

Los requerimientos para acidez y viscosidad son de 3 y 35 para la crema de hombre y de 2 y


25 para la de mujer. Se supone tambin que el componente 2 est limitado ya que para producir una
unidad de cada producto no se puede utilizar ms de 15 unidades de dicho componente 2. Sabiendo
que no se producen prdidas en la mezcla hay que determinar la mezcla ms barata por unidad de
producto e interpretar econmicamente los valores duales.
Modelizacin: se plantea el problema de la mezcla para obtener una unidad de cada producto
final. Las variables son:
xih: cantidad de componente i para la produccin de una unidad de crema para hombre.
xim: cantidad de componente i para la produccin de una unidad de crema de mujer.
La funcin objetivo es de coste y se forma sumando trminos formados por el producto de costes
unitarios por nmero de unidades utilizadas de cada componente, tanto en la produccin de una
unidad de crema de hombre como de crema de mujer. Las restricciones indican, por una parte, los
requerimientos para acidez y viscosidad de cada tipo de crema y se construyen exigiendo que el nivel
de ambas caractersticas para cada tipo de crema, obtenido mediante la combinacin lineal
correspondiente, sea menor o igual (pH) o mayor o igual (viscosidad) que lo requerido. Por otra
parte, el componente 2 est limitado y la suma de lo utilizado en ambas cremas es menor o igual que
19

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

1,5. Por ltimo, dado que no hay prdidas en la mezcla, la suma de las cantidades utilizadas de los
componentes deben ser iguales a una unidad de producto final. El enunciado matemtico es:
Min. 145(x1h+x1m)+324(x2h+x2m)+732(x3h+x3m)+012(x4h+x4m)
s.a:

4x1h+2x2h+5x3h 3, x1h+3x2h+6x3h 35

Requisitos crema de hombre

4x1m+2x2m+5x3m 2, x1m+3x2m+6x3m 25

Requisitos crema de mujer

x2h+x2m 15

Limitacin componente 2

x1h+x2h+x3h+x4h = 1, x1m+x2m+x3m+x4m = 1

No hay prdidas en la mezcla

xim, xih 0, i=1,2,3,4.


Solucin:
Variable
X1H
X1M
X2H
X2M
X3H
X3M
X4H
X4M
Row
OBJ
PH_H
VIS_H
PH_M
VIS_M
LIM_2
7
8

Value
0.0000000
0.0000000
0.8333333
0.6666667
0.1666667
0.3333333E-01
0.0000000
0.3000000

Reduced Cost
0.1300000
0.1300000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000

Slack or Surplus
6.360000
0.500000
0.000000
0.500000
0.000000
0.000000
0.000000
0.000000

Dual Price
1.000000
0.000000
-1.200000
0.000000
-1.200000
0.480000
-0.120000
-0.120000

Interpretacin y anlisis: As pues, la crema de hombre se obtiene mezclando los componentes 2


y 3 en una proporcin 833% y 167%, mientras que la crema para mujer se obtiene con un 667% de
componente 2, un 33% de componente 3 y un 30% de componente 4. El coste de una unidad de cada
crema es 636 u.m. La variable x 4h es no bsica y su rendimiento marginal es nulo por lo que la
mezcla anterior no es la nica ptima y se podra encontrar otra forma de obtener las cremas con el
mismo coste ptimo en donde el componente 4 se utilizara en alguna proporcin para obtener la
crema de hombre.
Las variables duales son positivas para las restricciones de viscosidad (Min. con ) por tanto
valen 2=4=12. Significa que aumentos marginales del requerimiento mnimo de viscosidad
suponen aumentos de coste de 12 unidades marginales. En cambio, son negativas para las
restricciones de acidez y de limitacin del componente 2 (Min. con ), 1=3=0 y 5=-048. Significa
que variaciones marginales en el pH mximo permitido no afectarn al coste y que aumentos en el
lmite mximo del componente 2 supondrn una disminucin del coste. Las variables duales
asociadas a las restricciones de igualdad no deben interpretarse porque no tiene sentido proceder a
cambiar esos trminos independientes.
Problema de transporte.- Se trata, en su versin ms bsica, de determinar las cantidades a
transportar de un producto desde unos centros de produccin a unos centros de demanda. Para ello,
existen unas limitaciones de produccin mxima en los orgenes y unas demandas mnimas en los
destinos. La funcin objetivo a minimizar es la de coste total del transporte, dados los costes
unitarios desde cada centro de produccin a cada centro de demanda.
Problema PL9.- Una cooperativa agrcola dispone de dos almacenes en Pego y Vinars donde
confecciona la naranja que debe transportar a tres capitales de provincia, Madrid, Barcelona y
Zaragoza. Los costes unitarios de transporte, euros por tonelada, la demanda semanal de cada ciudad
y la produccin mxima semanal de cada almacn estn en la siguiente tabla:
Madrid

Barcelona

Zaragoza

Produccin (Tm.)

Pego

40

60

70

550

Vinars

90

40

50

350

Demanda (Tm.)

400

300

100

20

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Determine cunto hay que transportar de cada almacn a cada ciudad para minimizar costes de
transporte semanales, as como el coste total. Interprete las variables duales.
Modelizacin: se denotarn a las cantidades a transportar con x ij, donde el primer subndice
indica el almacn y el segundo el destino. La funcin objetivo es de costes y se forma sumando los
costes unitarios por el nmero de unidades transportadas desde cada almacn a cada destino. Las
restricciones indican las limitaciones de capacidad productiva de cada almacn y los requerimientos
de demanda mnima de cada ciudad. El planteamiento matemtico es:
Min. 40xPM+60xPB+70xPZ+90xVM+40xVB+50xVZ
s.a:

xPM+xPB+xPZ 550

Capacidad mxima almacn Pego

xVM+xVB+xVZ 350

Capacidad mxima almacn Vinars

xPM+xVM 400

Demanda mnima Madrid

xPB+xVB 300

Demanda mnima Barcelona

xPZ+xVZ 100

Demanda mnima Zaragoza

xij 0, i = P, V , j = M, B, Z
Solucin:
Variable
XPM
XPB
XPZ
XVM
XVB
XVZ

Value
400.0000
0.0000000
50.00000
0.0000000
300.0000
50.00000

Row
Slack or Surplus
[OBJ]
34000.00
[PRPEGO]
100.0000
[PRVIN]
0.0000000
[DEMMAD]
0.0000000
[DEMBAR]
0.0000000
[DEMZAR]
0.0000000

Reduced Cost
0.0000000
0.0000000
0.0000000
70.00000
0.0000000
0.0000000
Dual Price
1.000000
0.0000000
20.00000
-40.00000
-60.00000
-70.00000

Interpretacin y anlisis: las 400 toneladas que van a Madrid proceden todas de Pego, las 300
de Barcelona son todas de Vinars y a Zaragoza se llevan 50 de Pego y 50 de Vinars. En el almacn
de Pego debern producirse 100 toneladas menos del mximo posible. El coste total del transporte es
de 34000 euros semanales. De nuevo, hay una variable no bsica con rendimiento marginal nulo
(xPB), lo que sugiere que existen otras alternativas de transporte con el mismo coste ptimo.
Las dos primeras variables duales son negativas (Min. con ) 1=0 y 2=-20: aumentos en la
capacidad del almacn de Pego no suponen variacin en los costes pero 1 Tm. adicional de capacidad
en el almacn de Vinars permitira reducir los costes en 20 euros. Los otros tres multiplicadores son
positivos (Min. con ), 3=40, 4=50 y 5=70 e indican, respectivamente, el aumento en los costes de
transporte que se producira ante el aumento de 1 Tm. de demanda en cada ciudad.
2.3.- Programacin lineal entera
La Programacin lineal entera se caracteriza por asumir todas las caractersticas de los
problemas de Programacin lineal y, adems, exigir la condicin de integridad para al menos una
variable del problema. Si todas las variables son enteras se habla de problemas enteros puros, si hay
variables enteras y no enteras se habla de problemas enteros mixtos. Como caso particular aparecen
las variables binarias (cuyo valor es 0 o 1) que dan lugar a los problemas binarios que tambin
pueden ser puros o mixtos.
En Programacin lineal entera, el ptimo que muestra Lingo, si existe, es siempre global
(Global Optimum) asumiendo los parmetros de tolerancia para considerar a una variable como
entera.
Las consideraciones a tener en cuenta son las mismas que en Programacin lineal y adems:
Incluir la condicin de integridad o de variable binaria: @GIN(X) para variables enteras y
@BIN(X) para variables binarias.
No cabe analizar si la solucin es de arista. En Programacin lineal entera puede haber
cualquier nmero de soluciones, no una o infinitas como en Programacin lineal.
21

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

No hay que analizar los valores que aparecen en la columna Dual Price. S que son vlidos,
en cambio, los valores de la columna Slack or Surplus que siguen representando las
variables de holgura.
No es posible obtener anlisis de sensibilidad de los coeficientes de la funcin objetivo ni de
los trminos independientes de las restricciones.
Combinacin ptima de recursos con variables enteras
Problema PLE1 Un agricultor se plantea qu tipo de abono y en qu cantidad debe utilizar en
sus tierras. Para ello lleva a analizar una muestra de su tierra y en el laboratorio le informan de las
necesidades mnimas de cada elemento qumico por hectrea. Tambin se informa en su distribuidor
de abonos de la composicin de cada saco de 50 Kg. de cada tipo de abono y su precio. Los
resultados aparecen en la siguiente tabla:
TIPO DE
ABONO

Mg

Zn

Ca

Precio
/saco

25

10

25

17,5

25

15

40

20

15

6
10

Necesidades
Kg./ha.

180

15

250

10

30

25

14
12,5

20

13

25
50

120

15

12,5
20

20

150

60

17,5

Obtener los sacos a utilizar por hectrea de cada tipo de abono para minimizar el coste total del
abonado y cumplir las necesidades mnimas, teniendo en cuenta que deben adquirirse sacos
completos.
El enunciado en Lingo, es:
!Problema PLE1: Problema lineal entero de combinacin ptima de
recursos;
!Funcin objetivo;
[OBJ] Min=17.5*x1+14*x2+15*x3+12.5*x4+13*x5+12.5*x6+17.5*x7;
!Restricciones;
10*x2+15*x5+10*x7>180;
25*x1+25*x2+20*x4+25*x6>250;
25*x1+15*x5>50;
30*x4+25*x6>120;
15*x2+40*x3+20*x5+20*x7>150;
10*x3+20*x7>60;
!Variables enteras para el nmero de sacos;
@GIN(x1);
@GIN(x2);
@GIN(x3);
@GIN(x4);
@GIN(x5);
@GIN(x6);
@GIN(x7);

22

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Y la solucin mostrada por Lingo es:


Variable
X( 1)
X( 2)
X( 3)
X( 4)
X( 5)
X( 6)
X( 7)
Row
[OBJ]
2
3
4
5
6
7

Value
0.0000000
5.000000
0.0000000
0.0000000
7.000000
5.000000
3.000000

Slack or Surplus
276.0000
5.000000
0.0000000
55.00000
5.000000
125.0000
0.0000000

Reduced Cost
5.000000
1.500000
15.00000
2.500000
13.00000
0.0000000
17.50000
Dual Price
0.0000000
0.0000000
-0.5000000
0.0000000
0.0000000
0.0000000
0.0000000

Problema de asignacin.- En este tipo de problemas existe un conjunto de candidatos para


ocupar una serie de puestos de trabajo y hay que determinar qu persona hay que asignar a cada
tarea, conociendo el coste o el beneficio de cada candidato en cada puesto de trabajo y teniendo en
cuenta, en el modelo bsico, que un trabajador slo puede realizar un trabajo y cada trabajo slo
puede estar ocupado por un trabajador. La asignacin o no est representada por una variable binaria
con un doble subndice que cuando vale 1 significa que esa persona realiza esa tarea y cuando vale 0
significa que no la realiza.
Problema PLE2.- El encargado de recursos humanos de una gran empresa debe asignar a los 3
trabajadores que se encargan de la parte contable a 3 tareas que hasta ahora realizaban
indistintamente, tesorera, financiacin y contabilidad. Tras realizarles un test de conocimientos en
los tres campos obtienen una calificacin en cada parte que le indica el rendimiento de cada
trabajador en cada puesto de trabajo. Los datos del test son:
Tesoreria

Financiacin

Contabilidad

Trabajador 1

75

86

84

Trabajador 2

53

72

61

Trabajador 3

67

79

75

El encargado debe decidir qu trabajador asigna a cada tarea para maximizar el rendimiento
total.
Modelizacin: xij representa la variable binaria que indica si el trabajador i se asigna al puesto
de trabajo j. La funcin objetivo es de rendimiento total, que es la suma de los resultados del test por
las variables binarias. Lgicamente slo los trminos con las variables que valgan 1 se sumarn en
esta funcin. Las restricciones indican que cada candidato slo puede realizar un trabajo y que cada
trabajo slo puede estar ocupado por una persona. El enunciado matemtico es:
Max. 75x11+86x12+84x13+53x21+72x22+61x23+67x31+79x32+75x33
s.a:

x11+x12+x13 = 1,

x21+x22+x23 = 1,

x31+x32+x33 = 1 Cada trabajador a un puesto

x11+x21+x31 = 1,

x12+x22+x32 = 1,

x13+x23+x33 = 1 Cada puesto a un trabajador

xij {0,1}, i = 1,2,3 , j = 1,2,3

23

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Solucin:
!Problema PLE2: asignacin;
!Funcin objetivo;
[OBJ]Max=7.5*x11+8.6*x12+8.4*x13+5.3*x21+7.2*x22+6.1*x23+6.7*x31
+7.9*x32+7.5*x33;
!Un trabajador ocupa un puesto de trabajo;
x11+x12+x13=1;
x21+x22+x23=1;
x31+x32+x33=1;
!Un puesto de trabajo es ocupado por un trabajador;
x11+x21+x31=1;
x12+x22+x32=1;
x13+x23+x33=1;
!Variables binarias;
@bin(x11);
@bin(x12);
@bin(x13);
@bin(x21);
@bin(x22);
@bin(x23);
@bin(x31);
@bin(x32);
@bin(x33);
Solucin:
Variable
X11
X12
X13
X21
X22
X23
X31
X32
X33
Row
[OBJ]
2
3
4
5
6
7

Value
0.0000000
0.0000000
1.000000
0.0000000
1.000000
0.0000000
1.000000
0.0000000
0.0000000

Slack or Surplus
22.30000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000

Reduced Cost
-7.500000
-8.600000
-8.400000
-5.300000
-7.200000
-6.100000
-6.700000
-7.900000
-7.500000
Dual Price
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000
0.0000000

Interpretacin y anlisis: el trabajador 1 se asignar a contabilidad, el trabajador 2 a


financiacin y el trabajador 3 a tesorera. La suma de los resultados del test como aproximacin al
ndice de rendimiento es 223.
Problema de mochila.- El nombre de esta aplicacin proviene del problema que se plantea al
decidir qu objetos hay que incluir en una mochila teniendo en cuenta la utilidad de cada uno de
ellos para un excursionista y el espacio que ocupan. Este tipo de problema tiene otras aplicaciones
como por ejemplo la seleccin de proyectos de inversin ajustndose a un presupuesto global, la
distribucin de un espacio fijo entre varios usos, etc. La decisin de incluir o no un objeto o un
proyecto est representada por una variable binaria que vale 1 si se incluye y 0 si no se incluye.
Problema PLE3.- El ministerio de Fomento quiere evaluar qu proyectos de infraestructuras
debe llevar a cabo en los prximos 4 aos de entre un conjunto que tiene estudiados y
presupuestados. Para ello dispone de un presupuesto total de 58.000 millones de euros. Cada
proyecto tiene un coste y un impacto sobre los votos que recibir el partido del gobierno en las
prximas elecciones, medido a travs del nmero de personas que se van a beneficiar directamente
de ese proyecto. Los datos se recogen en la siguiente tabla:

24

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Presupuesto (millones euros)

Impacto (miles usuarios)

Autova E-18

15.000

14.000

AVE Madrid-Valencia

18.000

21.000

Carretera M-60

800

2.000

Aeropuerto Barajas 2

3.000

3.000

Autova AT-9

24.000

16.000

Puerto de Huelva

1.500

800

Ferrocarril Transpirenaico

4.500

3.800

Pantano de la Alcarria

8.600

5.300

Se debe determinar qu proyectos hay que realizar para maximizar el nmero de usuarios y
respetar el presupuesto disponible.
Modelizacin: cada variable xi representa un proyecto y nicamente puede tomar el valor 1, si
se elige, y el valor 0 si no se elige. Para evitar nmeros de dimensin excesiva, la funcin objetivo se
medir en millones de usuarios y el presupuesto en miles de millones de euros. La funcin objetivo
mide el nmero de usuarios de los proyectos elegidos mediante la suma de productos de los usuarios
de cada proyecto por la variable binaria y la restriccin es de tipo presupuestario. El planteamiento
matemtico es:
Max. 14x1+21x2+2x3+3x4+16x5+08x6+38x7+53x8
s.a:

15x1+18x2+08x3+3x4+24x5+15x6+45x7+86x8 58
xi {0,1}, i=1,..,8

Solucin:
!Problema PLE3: mochila;
!Funcin objetivo;
[OBJ] Max=14*x1+21*x2+2*x3+3*x4+16*x5+0.8*x6+3.8*x7+5.3*x8;
!Restriccin presupuestaria;
[PPTO] 15*x1+18*x2+0.8*x3+3*x4+24*x5+1.5*x6+4.5*x7+8.6*x8<58;
!Variables binarias;
@bin(x1);
@bin(x2);
@bin(x3);
@bin(x4);
@bin(x5);
@bin(x6);
@bin(x7);
@bin(x8);
Solucin:
Variable
X1
X2
X3
X4
X5
X6
X7
X8

Value
1.000000
1.000000
1.000000
0.0000000
1.000000
0.0000000
0.0000000
0.0000000

Row
Slack or Surplus
[OBJ]
53.00000
[PPTO]
0.2000000

Reduced Cost
-14.00000
-21.00000
-2.000000
-3.000000
-16.00000
-0.8000000
-3.800000
-5.300000
Dual Price
0.0000000
0.0000000

Interpretacin y anlisis: se realizarn los proyectos 1, 2, 3 y 5, es decir, las dos autovas, el


AVE y la carretera M-60. Los usuarios sern 53 millones y quedarn 200 millones de euros sin
gastar.

25

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

ANEXO.- USO AVANZADO DE LINGO


Cuando se est ante problemas de optimizacin de gran dimensin, es habitual que las
expresiones matemticas que aparecen en la funcin objetivo y en las restricciones, as como la
propia forma de las restricciones tengan alguna estructura especial. En ese caso, el lenguaje de
modelizacin de Lingo permite construir el modelo de una manera rpida, abreviada y fcil de
entender. Esto se hace a travs de la definicin de conjuntos.
Los sumatorios, las formas cuadrticas, las expresiones que se repiten con distintos coeficientes,
etc. se pueden manejar de una forma ms eficiente mediante la definicin de conjuntos.
El lenguaje de Lingo permite definir conjuntos (de factores de produccin, de productos, de
activos, de periodos, de almacenes, de centros de demanda, etc.) y establecer expresiones
matemticas o restricciones para un elemento de ese conjunto. Luego esa misma expresin o
restriccin se aplica para cada elemento del conjunto, sin necesidad de repetirlas individualmente
para cada uno de ellos. De esta manera, modelos de gran dimensin se pueden escribir con este
lenguaje en unas pocas lneas.
El siguiente problema lineal servir de referencia para desarrollar los ejemplos necesarios para
entender la definicin de conjuntos y asignacin de valores.
Ejemplo 4 (Combinacin ptima de recursos).- Un agricultor se plantea qu tipo de abono y
en qu cantidad debe utilizar en sus tierras. Para ello lleva a analizar una muestra de su tierra y en el
laboratorio le informan de las necesidades mnimas de cada elemento qumico por hectrea. Tambin
se informa en su distribuidor de abonos de la composicin de cada tipo de abono y su precio. Los
resultados aparecen en la siguiente tabla:
TIPO DE
ABONO

Mg

Zn

Ca

Precio
Euros/kilo

0,5

0,2

0,5

0,35

0,5

0,3

0,8

0,4

0,3

6
0,2

Necesidades
Kg./ha.

180

0,3

250

0,2

0,6

0,5

0,28
0,25

0,4

0,26

0,5
50

120

0,3

0,25
0,4

0,4

150

60

0,35

Obtener las cantidades a utilizar por hectrea de cada tipo de abono para minimizar el coste
total del abonado y cumplir las necesidades mnimas.
Solucin: llamamos xj a las cantidades a utilizar de cada tipo de abono. La funcin objetivo es
de costes y se obtiene sumando los productos de coste unitario o precio de cada kilo de abono por la
cantidad utilizada. Las restricciones indican las necesidades mnimas de cada elemento qumico que
hay que cubrir y se generan una a una multiplicando la composicin por kilo de ese elemento por los
kilos de cada tipo de abono y sumando para los 7 abonos, exigiendo que el resultado sea mayor o
igual que la necesidad mnima. En resumen, el enunciado matemtico del ejemplo 4 admite la
siguiente estructura:
7
Min. p jx j
j 1
7
s.a :
a ji x j b i , i 1,...,6
j 1
xj 0,
j 1,...,7

O tambin en forma matricial:


Min. p T x
s.a :

Ax b
x 0
26

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

La definicin de conjuntos se realiza en la seccin SETS. Los conjuntos pueden tener una
dimensin (vectores), dos (matrices) o ms. Los conjuntos de dimensin mayor a uno se definen a
partir de conjuntos de dimensin uno.
Para definir un conjunto de dimensin uno hace falta:
el nombre del conjunto.
los elementos del mismo, que pueden ser nombres (separados por comas o un espacio en
blanco) o nmeros (inicial..final).
las caractersticas (variables, parmetros o constantes) que queramos asignar a cada
elemento (a veces, puede ser conveniente definir conjuntos sin ninguna caracterstica).
Para definir un conjunto de dimensin mayor a uno hace falta:
el nombre del conjunto.
los nombres de los conjuntos de dimensin uno en los que se basa.
las caractersticas (variables, parmetros o constantes) que queramos asignar a cada
elemento.
En el ejemplo 4 hay que definir un conjunto de tipos de abono con 7 elementos y un conjunto de
elementos qumicos con 6 elementos. A cada tipo de abono asignaremos como caracterstica el precio
y la cantidad a utilizar (x) por hectrea, mientras que a cada elemento qumico asignaremos la
necesidad mnima. Por otra parte, hay que crear un conjunto de dimensin 2 a partir de los anteriores
para especificar la composicin o cantidad de cada elemento qumico en cada tipo de abono. Los
subndices i y j utilizados en la expresin del problema sirven de gua para deducir qu tipo de
conjuntos hace falta crear y con qu caractersticas. En este caso hay que incluir en el fichero:
SETS:
ELEMQUIM/Mg,N,Zn,Ca,S,K/:NECMIN;
ABONO/1..7/:PRECIO,X;
COMPOSICION(ABONO,ELEMQUIM):A;
ENDSETS
Obsrvese que lo anterior ha definido un vector de necesidades mnimas de 6 elementos, dos
vectores de siete elementos de precios y cantidades a utilizar (X) y una matriz de dimensin 7x6 de
composiciones de cada elemento qumico en cada abono.
Los vectores y matrices creados en la seccin SETS pueden ser de variables o de datos del
problema. En este ltimo caso, hay que asignar a cada vector o matriz de datos sus valores. La
asignacin de valores o datos del problema se realiza en la seccin DATA del modelo de varias
maneras posibles:
directamente en la seccin DATA.
a medida que se optimiza el problema.
desde una hoja de clculo.
desde una base de datos.
desde un fichero de texto.
Si el parmetro se ha definido como una caracterstica de un conjunto deber tener tantos
valores como elementos del conjunto. Existe la posibilidad de no dar valor a algn elemento del
conjunto (con lo que pasara a ser una variable), para lo cual se deber dejar en blanco su hueco. Por
otra parte, si queremos que el valor de un parmetro sea variable e introducirlo aparte a medida que
se optimiza el problema, hay que poner un interrogante.
En el ejemplo 4, para dar valores a los vectores de necesidades mnimas y de precios y a la
matriz de composiciones, de forma directa en la seccin DATA hay que escribir:

27

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

DATA:
NECMIN=180,250,50,120,150,60;
PRECIO=0.35,0.28,0.3,0.25,0.26,0.25,0.35;
A=0,0.5,0.5,0,0,0
0.2,0.5,0,0,0.3,0
0,0,0,0,0.8,0.2
0,0.4,0,0.6,0,0
0.3,0,0.3,0,0.4,0
0,0.5,0,0.5,0,0
0.2,0,0,0,0.4,0.4;
ENDDATA
De esta manera, se da un valor a cada uno de los elementos de los conjuntos.
Existe la posibilidad de incorporar datos desde hojas de clculo, bases de datos o ficheros de
texto. Esto es de gran ayuda en el caso de problemas de gran dimensin en los que se dispone de los
datos en alguno de estos soportes.
Slo se especifica a continuacin la opcin de importar datos desde una hoja de clculo y, en
concreto, desde Microsoft Excel. Para ello, los datos deben introducirse en un rango de celdas de la
hoja de clculo y asignar un nombre a dicho rango (preferentemente igual al nombre del vector o
matriz utilizado en la seccin SETS). La lnea adecuada para incorporar esos datos a Lingo utiliza la
funcin @OLE como puede verse en el ejemplo 6.
La seccin DATA puede utilizarse tambin para exportar la solucin a hoja de clculo o base de
datos. En el caso de Excel se utiliza de nuevo la funcin @OLE.
En el ejemplo 4, para asignar valores a los conjuntos desde Excel, se podra utilizar la primera
lnea que se muestra a continuacin. A su vez, la segunda lnea sirve para que la solucin del vector
x se extraiga a la misma hoja de clculo.
DATA:
NECMIN,PRECIO,A=@OLE(C:\EJEMPLOS\EJEMPLO4.XLS);
@OLE(C:\EJEMPLOS\EJEMPLO4.XLS)=X;
ENDDATA
Ello supone que existe una hoja de clculo llamada EJEMPLO4.XLS en la carpeta EJEMPLOS
que tiene cuatro rangos cuyos nombres son NECMIN, PRECIO, A y X. Los tres primeros contienen
los datos de necesidades mnimas, precios y composiciones y el ltimo recoger la solucin para las
cantidades utilizadas por hectrea de cada tipo de abono.
Adems de las secciones SETS, DATA y, en su caso INIT, el resto de las lneas del modelo se
encargan de describir el problema de optimizacin. En ellas se puede utilizar el lenguaje bsico de
Lingo, tal y como se ha hecho hasta ahora, y tambin un lenguaje ms avanzado para aprovechar la
estructura especial que suelen presentar estos problemas.
En esta parte del modelo se describen las relaciones que se deben cumplir entre las variables del
problema en forma de una funcin objetivo y un conjunto de restricciones. Estas relaciones estn
formadas por nmeros, nombres de variables, operadores matemticos y las llamadas funciones @.
Dos de estas funciones son muy tiles en la construccin de modelos lineales y, por ello,
conviene ver con ms detalle su funcionamiento.
@SUM
Realiza el sumatorio de la expresin matemtica especificada para cada elemento de un
conjunto que, en su caso, cumpla una condicin. Su sintaxis general es:
@SUM(nombre del conjunto | condicin: expresin matemtica)
Para escribir la condicin se deben utilizar operadores lgicos. La lista de estos operadores es:
#NOT#, #EQ#, #NE#, #GT#, #GE#, #LT#, #LE#, #AND#, #OR#.
En el ejemplo 4, la funcin objetivo a minimizar representa el coste total del abonado y se
7

obtiene mediante un sumatorio de precios por cantidades utilizadas de cada abono: Min. p jx j
j 1

. Obsrvese que el sumatorio afecta a todos los elementos del conjunto llamado ABONO (no se
requiere ninguna condicin) y que la expresin matemtica es p jxj. Dado que no hay lugar a
confusin, el subndice se puede obviar. La funcin objetivo en lenguaje Lingo es:
Min=@SUM(ABONO:PRECIO*X);
28

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

A su vez, una restriccin cualquiera del problema indica que se ha de cumplir el requerimiento
mnimo de cada elemento qumico en el abonado. El miembro de la izquierda de la restriccin es la
cantidad de elemento qumico que se est utilizando, que se obtendr mediante un nuevo sumatorio,
y el miembro de la derecha es el mnimo necesario. La forma de la restriccin i-sima es:
7

a ji x j b . El sumatorio afecta, de nuevo, a los 7 elementos del conjunto ABONO y la expresin


i
j 1
matemtica es ajixj. Dado que ahora se mezclan vectores de distintos conjuntos, es obligatorio
especificar subndices. La restriccin queda con la siguiente sintaxis:
@SUM(ABONO(J): A(J,I)*X(J))>NECMIN(I);
@FOR
Esta funcin genera expresiones para cada elemento de un conjunto que cumpla la condicin
especificada. La sintaxis de la funcin @FOR es igual que la de @SUM, es decir:
@FOR(nombre del conjunto | condicin: expresin matemtica)
El resultado de una funcin @FOR es un conjunto de expresiones matemticas, mientras que el
de la funcin @SUM es un valor. Esta funcin sustituye al smbolo matemtico para todo (). Si
existen varias expresiones que se deben cumplir para todos los elementos de un conjunto se pueden
encadenar dentro de una nica funcin @FOR separndolas con punto y coma.
En el ejemplo 4, la restriccin i-sima se debe repetir 6 veces, una para cada elemento qumico,
7

es decir, el conjunto de restricciones es: a ji x j b i , i 1,...,6 . El nombre del conjunto para


j1
cuyos elementos hay que repetir la restriccin se ha llamado ELEMQUIM (no hace falta ninguna
condicin porque se debe aplicar a todos los elementos). La expresin matemtica a repetir es la
restriccin, cuya sintaxis es la lnea @SUM del recuadro anterior. En consecuencia, las 6
restricciones del problema se escriben de forma compacta con la siguiente lnea:
@FOR (ELEMQUIM(I): @SUM(ABONO(J): A(J,I)*X(J))>NECMIN(I));
As pues, la sintaxis completa del ejemplo 4 es:
!Ejemplo 4: Problema lineal con lenguaje de modelizacin;
!Se definen los siguientes conjuntos;
SETS:
ELEMQUIM/Mg,N,Zn,Ca,S,K/:NECMIN;
ABONO/1..7/:PRECIO,X;
COMPOSICION(ABONO,ELEMQUIM):A;
ENDSETS
!Los datos conocidos son;
DATA:
NECMIN=180,250,50,120,150,60;
PRECIO=0.35,0.28,0.3,0.25,0.26,0.25,0.35;
A=
0,0.5,0.5,0,0,0
0.2,0.5,0,0,0.3,0
0,0,0,0,0.8,0.2
0,0.4,0,0.6,0,0
0.3,0,0.3,0,0.4,0
0,0.5,0,0.5,0,0
0.2,0,0,0,0.4,0.4;
ENDDATA
!Funcin objetivo;
Min=@SUM(ABONO:PRECIO*X);
!Restricciones;
@FOR(ELEMQUIM(I):
@SUM(ABONO(J):A(J,I)*X(J)) > NECMIN(I));
La solucin del modelo en la ventana Solution Report muestra tanto el valor de las variables
como el de los datos. Estos ltimos se pueden eliminar para interpretar mejor la solucin:

29

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Global optimal solution found at step:


Objective value:
Variable
X( 1)
X( 2)
X( 3)
X( 4)
X( 5)
X( 6)
X( 7)
Row
1
2
3
4
5
6
7

8
268.7667

Value
0.0000000
340.0000
0.0000000
200.0000
273.3333
0.0000000
150.0000
Slack or Surplus
268.7667
0.0000000
0.0000000
32.00000
0.0000000
121.3333
0.0000000

Reduced Cost
0.2433333
0.0000000
0.2116667
0.0000000
0.0000000
0.6111111E-02
0.0000000
Dual Price
1.000000
-0.8666667
-0.2133333
0.0000000
-0.2744444
0.0000000
-0.4416667

As pues, se utilizarn 340 Kg/Ha. del abono 2, 200 Kg/Ha. del abono 4, 27333 Kg/Ha. del
abono 5 y 150 Kg/Ha. del abono 7. De esta manera, el abonado se realizar con coste mnimo por
hectrea y se satisfarn los requisitos mnimos de cada elemento mnimo, excediendo en 32 Kg/Ha.
las necesidades mnimas de Zn y en 12133 Kg/Ha. las de S. El coste ptimo por Ha. es de 268,7667
euros.
Ejemplo 5.- El uso de condiciones en las funciones @SUM y @FOR es necesario cuando se
quiera que las expresiones slo afecten a unos cuantos elementos de un conjunto. Si en el caso
anterior se desea utilizar unas cotas para los abonos 1 a 4 y otras para el 5 a 7, se podra poner:
@FOR ( ABONO(J) | J#LE#4: @BND(100, X(J),400) );
@FOR ( ABONO(J) | J#GE#5: @BND(0, X(J), 250) );
Esto es lo mismo que: 100 xj 400; j=1,2,3,4 y

0 xj 250; j=5,6,7.

El uso de ndices (J) o (J,I) es obligatorio cuando haya que introducir condiciones o cuando
haya que combinar en una misma expresin conjuntos de distintas dimensiones ya que de lo
contrario puede haber confusiones.
Aplicaciones econmicas
Problema PNL5-M: Problema del consumidor con mltiples bienes de consumo
En el caso de mltiples bienes y de una funcin de utilidad logartmica y aditiva, el problema
del consumidor se podra plantear utilizando el lenguaje de modelizacin. Por ejemplo, el siguiente
problema con 10 bienes y con la siguiente estructura:
10

Max.

ln(x )
i

i 1
10

s.a :

p x
i

1400,

x i 0, i 1,...,10

i 1

se escribe con lenguaje de modelizacin de la siguiente manera:

30

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

!Problema PNL5-M: Problema del consumidor con


modelizacin;
SETS:
BIENES/1..10/:PRECIO,X;
ENDSETS
DATA:
PRECIO=1.4,1,2,2.5,1.6,3,2.3,5,3,4;
PPTO=1400;
ENDDATA
!Funcin objetivo: utilidad logartmica y aditiva;
[OBJ] Max=@SUM(BIENES: @LOG(X));
!Restriccin presupuestaria;
[PPTO] @SUM(BIENES:PRECIO*X)<PPTO;

lenguaje

de

Problema PNL6-M: Problema de la empresa con mltiples factores productivos


En el caso de mltiples factores productivos y de una funcin de produccin logartmica y
aditiva, el problema de la empresa se podra plantear utilizando el lenguaje de modelizacin. Por
ejemplo, el siguiente problema con 10 factores productivos:
10

Min.

c x
i

i 1
10

s.a :

ln(x ) 1750,

x i 0, i 1,...,10

i 1

Tiene como sintaxis:


!Problema PNL6-M: Problema de la empresa con lenguaje de
modelizacin;
SETS:
FACTORES/1..10/:COSTE,X;
ENDSETS
DATA:
COSTE=1,3.5,6,5,2.5,3,2.5,5,3,4.5;
PRODMIN=1750;
ENDDATA
!Funcin objetivo;
[OBJ] Min=@SUM(FACTORES:COSTE*X);
!Restriccin de produccin mnima: funcin de produccin
logartmica y aditiva;
[PRMIN] @SUM(FACTORES: @LOG(X))>PRODMIN;
Problema PNL7-M: Problema de seleccin de cartera con mltiples alternativas de inversin
A medida que aumenta el nmero de activos, la matriz de varianzas y covarianzas aumenta de
dimensin con lo que la funcin de riesgo tiene cada vez ms trminos. Sin embargo, con el lenguaje
de modelizacin el modelo se escribe en pocas lneas. Por ejemplo, sea el siguiente problema con 10
activos:
10

10

Min.

Q ij x i x j

i 1 j 1

10

s.a :

r x

1,

0'08,

i 1
10

0'05 x i 0'2, i 1,...,10

i 1

31

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

Su sintaxis con lenguaje de modelizacin es:


!Problema PNL7-M: Problema de seleccin de cartera con lenguaje
de modelizacin;
SETS:
ACTIVOS/1..10/:R,X;
MATRIZCOV(ACTIVOS,ACTIVOS):Q;
ENDSETS
DATA:
R,Q=@OLE('A:\PNL5-DAT.XLS');
@OLE('A:\PNL5-DAT.XLS')=X;
RMIN=0.08;
ENDDATA
!Funcin objetivo;
[OBJ] Min=@SUM(MATRIZCOV(I,J):Q(I,J)*X(I)*X(J));
!Restriccin de rentabilidad mnima;
[RMIN] @SUM(ACTIVOS:R*X)>RMIN;
!Restriccin presupuestaria;
[PPTO] @SUM(ACTIVOS:X)<1;
!Restricciones de diversificacin;
@FOR(ACTIVOS:@BND(0.05,X,0.2));
Este modelo resuelve un problema de seleccin de cartera con 10 activos y cotas para los activos
con el objetivo de diversificar la cartera. Los datos y la solucin se vinculan a la hoja de clculo
PNL5-DAT.XLS, que debe estar preparada para ello.
Problema PL9-M: Problema de transporte con lenguaje de modelizacin
El lenguaje de modelizacin de Lingo encuentra en este tipo de problemas todo su sentido ya
que a medida que aumenta el nmero de centros de produccin y de demanda, las lneas necesarias
para describir el modelo crecen significativamente. En cambio, utilizando el lenguaje de
modelizacin, el modelo contiene siempre el mismo nmero de lneas y slo hay que aadir los
almacenes y ciudades adicionales y sus datos asociados. El problema PL9 se escribe tambin:
!Problema PL9-M: transporte;
!Definicin de conjuntos;
SETS:
ALMACEN/PEGO,VINAROS/:PRODMAX;
CIUDAD/MADRID,BARCELONA,ZARAGOZA/:DEMMIN;
COSTE(ALMACEN,CIUDAD):C,X;
ENDSETS
!Datos conocidos;
DATA:
PRODMAX=550,350;
DEMMIN=400,300,100;
C=40,60,70
90,40,50;
ENDDATA
!Funcin objetivo;
[OBJ] Min=@SUM(COSTE:C*X);
!Restricciones de produccin en almacenes;
@FOR(ALMACEN(I): @SUM(CIUDAD(J):X(I,J))<PRODMAX(I)

);

!Restricciones de demanda en ciudades;


@FOR(CIUDAD(J):
@SUM(ALMACEN(I):X(I,J))>DEMMIN(J)

);

Problema PLE1-M: Problema de combinacin ptima de recursos


El lenguaje de modelizacin de LINGO permite abreviar el nmero de lneas que ocupa el
modelo. Obsrvese a continuacin como en el problema PLE1, el conjunto de las 6 restricciones y de
las 7 condiciones de integridad de las variables ocupan una lnea cada uno:

32

Curso 2006/2007

Prcticas de Programacin Matemtica con LINGO

!Problema PLE1-M;
SETS:
ELEMQUIM/Mg,N,Zn,Ca,S,K/:NECMIN;
ABONO/1..7/:PRECIO,X;
COMPOSICION(ABONO,ELEMQUIM):A;
ENDSETS
!Los datos conocidos son;
DATA:
NECMIN=180,250,50,120,150,60;
PRECIO=17.5,14,15,12.5,13,12.5,17.5;
A=
0,25,25,0,0,0
10,25,0,0,15,0
0,0,0,0,40,10
0,20,0,30,0,0
15,0,15,0,20,0
0,25,0,25,0,0
10,0,0,0,20,20;
ENDDATA
!A continuacin se escribe el modelo;
!Funcin objetivo;
[OBJ] Min= @SUM(ABONO:PRECIO*X);
!Restricciones;
@FOR(ELEMQUIM(I): @SUM(ABONO(J):A(J,I)*X(J)) > NECMIN(I));
!Variables enteras para el nmero de sacos;
@FOR(ABONO:@GIN(X));
Si los datos que aparecen en la seccin DATA se organizaran en una hoja de clculo, esta
seccin podra abreviarse haciendo referencia a los rangos correspondientes de la hoja de clculo con
la funcin @OLE.
Problema PLE2-M: Problema de asignacin
El lenguaje de modelizacin es muy til a medida que aumenta el nmero de puestos de trabajo
y de candidatos en el problema de asignacin . El problema PLE2 admite la siguiente formulacin:
!Problema PLE2-M: asignacin con lenguaje de modelizacin;
!Definicin de conjuntos;
SETS:
CANDIDATO/1..3/:;
TAREA/TES,FIN,CON/:;
RENDIMIENTO(CANDIDATO,TAREA):R,X;
ENDSETS
!Datos conocidos;
DATA:
R=7.5,8.6,8.4
5.3,7.2,6.1
6.7,7.9,7.5;
ENDDATA
!Funcin objetivo;
[OBJ] Max=@SUM(RENDIMIENTO:R*X);
!Un trabajador ocupa un puesto de trabajo;
@FOR(CANDIDATO(I):
@SUM(TAREA(J):X(I,J))=1

);

!Un puesto de trabajo es ocupado por un trabajador ;


@FOR(TAREA(J):
@SUM(CANDIDATO(I):X(I,J))=1
);
!Variables binarias;
@FOR(RENDIMIENTO:
@bin(X) );

33

Curso 2006/2007