Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios de Programacion Lineal PDF
Ejercicios de Programacion Lineal PDF
Planificación de la Producción y
Optimización Lineal
Horst W. Hamacher1
Este proyecto ha sido desarrollado con ayuda parcial de la Unión Europea dentro del
marco del programa Sócrates. El contenido no refleja necesariamente la posición de
la Unión Europea ni implica ninguna responsabilidad por parte de la Unión Europea.
1
Technische Universität Kaiserslautern, Fachbereich Mathematik
2
Contenidos:
1.1 Discusión: Planificación de la producción en la compañía SchokoLeb........................................ 3
1.2 Método gráfico para problemas con solo dos productos.............................................................. 6
1.3 Determinar la mejor solución mediante sistemas de ecuaciones con dos variables ................. 16
1.4 Continuación de la discusión: Planificación de la producción con más de dos productos......... 18
1.5 Optimización lineal y matrices .................................................................................................... 19
1.6 Resolver problemas lineales mediante el método del Simplex .................................................. 24
1.7 Perspectivas futuras: Optimización lineal en economía ............................................................. 36
1.8 La solución del problema SchokoLeb......................................................................................... 37
Apéndice: Más información............................................................................................................... 42
Claves – Economía:
- Decisiones
- Nivel de producción
- Maximización de beneficios
- Restricciones de capacidad
Modelado algebraico:
- Conversión de problemas económicos en problemas de optimización lineal
Geometría
- Descripción y trazado de líneas rectas en un plano
- Líneas rectas y semiespacios
- Poliedros
- Cálculo de los puntos de intersección de líneas rectas
- Traslaciones paralelas
Álgebra Lineal
- Trabajar con inecuaciones
- Resolver sistemas de ecuaciones lineales
- Dependencia e independencia lineal de vectores
- Cálculos inversos
- Conversión de inecuaciones en ecuaciones
- Operaciones básicas con filas
- Operaciones de pivotaje
- Método del Simplex
3
Combinatoria
- Determinar el número de subconjuntos
- Números binomiales
Funciones
- Descripción de funciones lineales
- Transformación de maximización a minimización
Oliver: Sabes que no me gustan este tipo de cosas – fiestas en las que se supone que tienes
que hacer contactos de negocios. Aún así, la del Sábado fue, sorprendentemente, muy divertida.
Allí me encontré con un viejo amigo al que no veía desde...
Natalia: Disculpa Oliver, ¿nos contarás las historias de tus conquistas? Sabes que tuvimos que
trabajar mucho para que el alcalde nos diera invitaciones para esa fiesta, porque esperábamos
hacer algunos nuevos contactos para nuestro negocio.
4
Oliver: Si, pero espera un momento. Así que mi viejo amigo me presentó al señor Ritter el que,
quien sabe por qué, parecía muy deprimido. Surgió el tema de que él planifica la producción de
la compañía SchokoLeb, que produce chocolate y cacao. Este negocio no parece ir muy bien
últimamente y por eso la producción está siendo reorganizada. Después de un análisis de
mercado la compañía decidió retirar algunos productos, para incrementar la producción de otros,
e introdujo algunos nuevos. Él tenía que hacer el trabajo de crear un plan para decidir cuanto hay
que fabricar de cada producto para obtener el máximo beneficio posible. Estuvo todo el tiempo
hablando de que él simplemente quería dejarlo todo porque era demasiado complicado y, de
cualquier forma, nadie entendía realmente de que iba todo eso. Antes de que siguiese
revolcándose en su propia desesperación me las arreglé para conseguir su número de teléfono.
¿Qué pensáis chicos? ¿Podría ser un trabajo para nuestro grupo Clever Consulting?
Solina: Bueno, no sé, ¿tiene este señor suficiente dinero para pagar nuestros servicios?
Sebastián: Por Dios, Solina, al menos pensémoslo un poco, quizás es un problema que nos
puede interesar, y quizás nuestros métodos y experiencia pueden ser de utilidad para arreglar
algo.
Natalia: ¡Suena muy bien! ¡No deberíamos rechazarlo sin pensarlo!
Oliver: ¿Sabéis qué? Lo voy a llamar y preguntarle si quiere tener una reunión con nosotros.
Estoy seguro que nos será rentable invertir unas pocas horas en esto.
Tres llamadas de teléfono más tarde, Oliver consiguió concertar una reunión con el gerente de la
compañía SchokoLeb para la siguiente semana. El grupo Clever Consulting decidió enviar a
Oliver, Natalia y Sebastián a la reunión. Después de todo, uno siempre puede decidir si
involucrarse en el proyecto o no.
Una semana más tarde aparece un documento interno, redactado por Natalia y Sebastián
después de la primera reunión.
Situación:
Se manufacturaban a gran escala más de 20 diferentes productos (tipos de chocolate y cacao). De
acuerdo con el análisis de mercado, diez productos más podrían ser vendidos aumentando los
beneficios.
Mr. Werkstoll nos presentó un diagrama detallado que mostraba como se dirigirá la planificación de
la producción (la empresa SchokoLeb no se encuentra preparada para dejarnos el diagrama de flujo
durante la reunión de contacto). El diagrama muestra claramente como los productos pasan a través de
las instalaciones de la compañía. Además existen datos sobre la capacidad que se requiere para cada
unidad de producción, (por ejemplo: 100 gr de chocolate, 50 gr de cacao, etc.) en cada fábrica. Se nos
proporcionaron los datos de capacidad de cada planta.
5
Transcurso de la reunión:
La señora Sorrati quería saber si teníamos experiencia trabajando con problemas como los
anteriormente descritos. Mencionamos algunos métodos que se podían usar para afrontar el problema,
y casualmente Natalia sacó el tema de la “Optimización Lineal”, cosa que impresionó mucho a la
gente de SchokoLeb. Después de eso Mr. Werkstoll nos enseñó las instalaciones de la compañía.
Resultado de la reunión:
Pospusimos nuestra decisión hasta componer un memorando sobre como queremos afrontar el
problema. Por lo tanto Mr. Ritter hizo hincapié en que a él le gustaría ser capaz de entender lo que
íbamos a hacer, es decir, que una persona con conocimientos elementales de matemáticas también
debería ser capaz de comprender nuestros métodos. Como ejemplo Ms. Sorrati nos dio los datos para
un pequeño número de productos y plantas (ver Tabla 1). Éstos, como ella dijo, no revelarían los
secretos de la compañía, pero son lo suficientemente realistas para que nos hagamos una idea de si
podemos ayudar a la compañía o no.
Próxima cita:
Tenemos una semana para presentar los resultados. Si nos las arreglamos para convencer a los
representantes de SchokoLeb de que somos expertos en el tema, es bastante probable que consigamos
un contrato con la compañía SchokoLeb. De todas formas, por el trabajo preparatorio que estamos
realizando, ¡no nos van a pagar nada!
P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
Beneficio 1 3 2 5 2 7 1 2 -1 2 en 100€
Ventas 20 15 30 35 10 11 25 13 100 30 en unidades
Capacidad
disponible en
%↓
A1 2 0 3 0 3 8 1 2 4 1 80
A2 1 3 5 3 6 3 2 1 0 1 75
A3 0 2 0 1 4 2 1 0 0 0 45
A4 2 0 0 2 0 0 2 4 2 4 50
A5 0 0 0 0 2 3 0 0 0 0 45
Tabla 1.1 Tabla de muestra de la compañía SchokoLeb con diez productos, cinco plantas,
información sobre los beneficios, mercado, capacidad de carga por unidad de producción y
capacidad disponible en cada planta.
Oliver: Ahora entiendo por qué el señor Ritter estaba tan deprimido esa noche. ¿Pilláis de que va
todo esto?
6
Solina desarrolló el siguiente ejemplo reducido (a partir de ahora nos referiremos a él como
pequeño problema SchokoLeb para distinguirlo del resto de los problemas, que deberían ser
analizados para la compañía):
Capacidad disponible
Cacao en polvo Chocolate (en % de la capacidad
general diaria)
Beneficio 30 50
Planta 1 3 2 18
Planta 2 1 0 4
Planta 3 0 2 12
Tabla 1.2 Capacidad y beneficio para el pequeño problema SchokoLeb
En principio éste es el mismo problema que presentamos para la compañía SchokoLeb. Aún así,
en este caso sólo hay dos productos; cacao en polvo y chocolate tierno amargo. Las plantas que
7
Hasta ahora hemos ignorado la parte de la tabla que apunta a las restricciones de capacidad. Sin
esas restricciones uno podría producir tanto como sea posible y obtener un beneficio infinito.
Desafortunadamente esto no funciona así. Interpretamos la tabla con información de capacidad
como sigue:
La fila de la Planta 1 dice que: cada unidad de cacao en polvo (=50 Kg) y chocolate (=100 Kg)
necesita respectivamente 3% y 2% de la capacidad de la Planta 1. Si producimos sólo una
unidad por producto, necesitaremos 3% + 2% = 5% de la capacidad de la planta. Esto sería
posible, ya que tenemos el 18% de la capacidad de dicha planta a nuestra disposición. Aún así,
si quisiéramos, como se muestra en el ejemplo, producir x1 = 5 y x2 = 3 unidades,
necesitaríamos
3% · x1 + 2% · x2 = 3% · 5 + 2% · 3 = 21%
de la capacidad de la Planta 1. Debido al hecho de que solo disponemos del 18%, esta
producción no es posible. En este caso se dice que la combinación x1 = 5 y x2 = 3 o (x1 | x2) = (5
| 3) es no factible.
Las filas de las otras dos plantas se interpretan de la misma forma. Por tanto (x1 | x2)=(5 | 3)
tampoco es factible para la Planta 2, porque 1% · 5 + 0% · 3 = 5% es mayor que la capacidad de
la Planta 2, 4%. Por otro lado esa planificación sería factible para la Planta 3.
3 · x1 + 2 · x2 ≤ 18,
1 · x1 + 0 · x2 ≤ 4,
0 · x1 + 2 · x2 ≤ 12.
8
Ejemplo:
Como se vio antes, el plan (x1 | x2) = (5 | 3) no es factible, ya que no cumple las dos primeras
inecuaciones:
3 · x1 + 2 · x2 = 3·5+2·3 = 21 > 18,
1 · x1 + 0 · x2 = 1·5+0·3 = 5 > 4,
0 · x1 + 2 · x2 = 0·5+2·3 = 6 ≤ 12.
Por tanto, echemos un vistazo al plan (x1 | x2) = (4 | 3). Si hacemos x1 = 4 y x2 = 3 en las
restricciones, obtenemos
3 · x1 + 2 · x2 = 3·4+2·3 = 18 ≤ 18,
1 · x1 + 0 · x2 = 1·4+0·3 = 4 ≤ 4,
0 · x1 + 2 · x2 = 0·4+2·3 = 6 ≤ 12.
De esta forma se cumplen todas las restricciones. Por lo tanto, (x1 | x2) = (4 | 3) es un plan
factible. Obtendremos el beneficio generado calculando el valor de la función objetivo
30 · x1 + 50 · x2 = 30 · 4 + 50 · 3 = 120 + 150 = 270.
(→Ej.1.2 y Ejercicios adicionales (ver CD) 1.22).
El número 270 representa el beneficio en euros. También tenemos que vigilar que nuestras
unidades de producción sean no negativas, simplemente porque: ¿qué significa una producción
de –2 unidades de cacao en polvo? Ok, por lo tanto rechacemos – en este caso sin preguntar a
SchokoLeb – todos los planes de producción en los que las variables de decisión sean
negativas. Esto es muy simple, todo lo que tenemos que hacer es introducir restricciones de
signo:
x1 ≥ 0,
x2 ≥ 0.
Ahora está completo nuestro modelo algebraico para la solución del problema de producción. Es
el primer ejemplo del llamado problema de optimización lineal, también conocido como
Problema Lineal:
s.a.
3 · x1 + 2 · x2 ≤ 18,
1 · x1 + 0 · x2 ≤ 4,
0 · x1 + 2 · x2 ≤ 12
y
Restricciones de signo
x1 ≥ 0,
x2 ≥ 0.
Las variables de decisión pueden ser interpretadas como coordenadas en el plano euclídeo. En
consecuencia, las restricciones de signo x1 ≥ 0 y x2 ≥ 0 se interpretan fácilmente: es el conjunto
de puntos del primer cuadrante (ver Figura 1.1). Las restricciones
1 · x1 + 0 · x2 ≤ 4,
0 ·x1 + 2 · x2 ≤ 12,
x1 ≤ 4,
2 · x2 ≤ 12, i.e. x2 ≤ 6 .
x2
x1>0 x1 = 4
6 x2 = 6
x1 < 4 x2 < 6
5
1
x2>0
x1
x2 < -3/2 x1 + 9
1 2 3 4
x2 = -3/2 x1 +9
10
Aún nos queda la tercera restricción 3 · x1 + 2 · x2 ≤ 18, la cual tenemos que representar
gráficamente. Para ello es necesario dibujar una línea recta, que es la ecuación
3 · x1 + 2 · x2 = 18 o x2 = -3/2 · x1 + 9
(ver Figura 1.1). El conjunto de todos los puntos que cumplen 3 · x1 + 2 · x2 ≤ 18 es, por tanto, el
conjunto de los puntos (x1 | x2) para los cuales se cumple que x2 ≤ -3/2 · x1 + 9.
Al final, lo que se obtiene como área de planes factibles (x1 | x2) es el llamado poliedro P o
región factible (el área amarilla en la Figura 1.1). Cada punto de este poliedro está relacionado
con un plan de producción factible y viceversa (→Ej.1.3-4 y Ejercicios Adicionales (ver CD) 1.23).
Aún así la compañía SchokoLeb quiere saber que combinación de productos debería ser
producida para conseguir el mayor beneficio. ¿Cómo podríamos determinar esto? Primero
estableceremos un valor z que represente el beneficio, y veremos todas las combinaciones de
productos con las que se puede obtener ese beneficio a partir de la función objetivo:
z = 30 · x1 + 50 · x2 .
x2
x1>0
6
2
z = 250
1
x2>0
x1
1 2 3 4 z = 150
z = 90
Figura 1.2 Combinación de productos (x1 | x2) sabiendo el valor de z = 30 · x1 + 50 · x2
Por ejemplo, el conjunto de combinaciones de productos (x1 | x2) con las que se obtiene el mismo
beneficio z = 90, está representado por el conjunto de puntos (x1 | x2) sobre la línea recta 90 = 30
11
son paralelas a la primera. Debido a que la intersección de esas rectas y la región factible es no
vacía, sabemos que existen combinaciones de productos con las que se obtienen los beneficios
z = 150 y z = 250. De esta forma se pueden producir, por ejemplo, nada de cacao en polvo y 3
unidades (= 300 Kg) de chocolate, para ganar 150 euros (es decir, (x1 | x2) = (0 | 3)), o 2
unidades (= 100 Kg) de cacao en polvo y 3.8 unidades (=380 Kg) de chocolate, para conseguir
un beneficio de 250 euros (es decir, (x1 | x2) = (2 | 3.8)) (→Ej.1.5 y Ejercicio Adicional (ver CD)
1.24-25).
Con PowerPoint se pueden representar esas traslaciones muy fácilmente. Al leer este texto
online (ver el CD adjunto) en un PC que tenga PowerPoint instalado, si se hace doble clic sobre
la figura 1.2 se visualiza la figura dividida en secuencias. También se pueden encontrar otros
ejemplos animados en dicho CD.
Los problemas de programación lineal tal y como los hemos usado para resolver el pequeño
problema SchokoLeb, aparecen en muchos otros contextos (comparar con la Sección 1.7). Para
comenzar proporcionaremos una fórmula general del método gráfico usado antes, y después lo
aplicaremos a otros ejemplos. Ahora estamos resolviendo, con el método gráfico, problemas con
dos variables x1 y x2 (en el ejemplo anterior eran unidades de producción de cacao en polvo y
chocolate). Después veremos que se puede hacer cuando hay más de dos variables en el
problema.
12
Tenemos que saber que beneficio c1 y c2 podemos obtener por cada unidad de x1 y x2, por eso
nuestra función objetivo general adquiere la siguiente forma
c1 · x1 + c2 · x2 ,
x2
x1>0 (x1* | x2*)
6
4
z* = 360
3
1
x2>0
x1
1 2 3 4
Figura 1.3 Combinación óptima de productos (x1* | x2*) = (2 | 6) con beneficio máximo z* = 360
euros
Además las restricciones han de cumplirse (como en el ejemplo de la sección 1.2 para las
restricciones de capacidad). No se puede predecir el número de restricciones con las que
tendremos que trabajar, y por lo tanto simplemente supondremos que tenemos m restricciones
(en la sección 1.2 m = 3). La i-ésima restricción tiene la siguiente forma
ai1 · x1 + ai2 · x2 ≤ bi .
Los números ai1 y ai2 se llaman coeficientes (de las restricciones) y los bi son los coeficientes
de capacidad (o coeficientes de limitación). En el ejemplo de la sección 1.2
Como ejemplo resolveremos el siguiente PL (problema lineal) trabajando solo a partir de los
datos, sin saber que problema económico estamos resolviendo.
14
Ejemplo 1.1:
Tenemos un problema de PL con coeficientes de la función objetivo c1 = -1 y c2 = 2, y
coeficientes (de capacidad)
a11 = 1, a12 = 0, b1 = 5,
a21 = 0, a22 = 1, b2 = 3,
a31 = -1, a32 = 1, b3 = 2,
a41 = 1, a42 = 1, b4 = 5.
Por tanto el problema de PL tiene la forma
max − x1 + 2 x2
sujeto a : .
x1 ≤5
x2 ≤3
− x1 + x2 ≤2
x1 + x2 ≤5
x1 , x2 ≥0
La Figura 1.4 muestra el poliedro factible tal y como se presentan en los pasos 1 y 2 del
algoritmo 1.1 y la recta de la función objetivo, del paso 3. En el paso 4 alcanzamos la recta que
sigue tocando a la función objetivo z*= 5 = -x1 + 2 x2 y da el valor óptimo (x1* | x2*) = (1 | 3) con
valor óptimo de la función objetivo –x1 + 2x2 = -1 + 2 · 3 = 5, como se muestra en el paso 5.
z* = 5 = -x1* + 2x2*
x1=0
Contiene a la solución óptima
5 x1>0 -x1+x2=2 x1 = 5 (x1* | x2*) = (1 | 3)
4 -x1+x2<2 x1 < 5
z = 0 = -x1 + 2x2
3 x2 = 3
Solución óptima x2 < 3
(x1* | x2*) = (1 | 3) z = -2 = -x1 + 2x2
2
z = -4 = -x1 + 2x2
x2>0
x2=0
-2 -1 1 2 3 4 5
-1
x1+x2<5
x1+x2=5
-2
Figura 1.4 Aplicación del algoritmo 1.1 para resolver el problema de programación lineal del
ejemplo 1.1 (Al hacer doble clic sobre la figura se activa PowerPoint, de esta forma se puede
seguir el algoritmo paso a paso)
Ejercicios
Ej.1.1 Determinar el valor de la función objetivo (f.o.) para los siguientes valores de x1 y x2.
x1 X2 Valor de la f.o.: 30 · x1 + 50 · x2
2 3
4 1
8 2
15 23
120 0
Ej.1.2 Decidir si los siguientes planes de producción determinados por x1 y x2 son factibles.
2 3,5
2 5,8
2 7
3,5 3,9
-2 6
Ej.1.3 Situar los puntos (x1 | x2) del Ej.1.2 en la figura 1.1.
Ej.1.4 Dibujar el conjunto de puntos factibles del problema de programación lineal con las
siguientes restricciones:
-x1 + x2 ≤ 1,
x1 + x2 ≤ 3,
x1, x2 ≥ 0.
Ej.1.5 ¿Qué beneficio se obtiene con las combinaciones de productos (x1 | x2) = (3 | 4)? ¿Es
factible dicha combinación? ¿Con qué otras combinaciones obtenemos el mismo beneficio?
Ej.1.6
a) Después de presentar nuestros resultados a la compañía SchokoLeb, la dirección de la
empresa nos informa de que los beneficios supuestos en un principio han cambiado. El beneficio
de cacao ha aumentado drásticamente – de 30 a 150 euros.
¿Tiene esto alguna influencia en la decisión sobre el plan de producción óptimo? ¿Cómo es el
nuevo plan de producción óptimo?
b) La compañía SchokoLeb quiere conocer cuál debería de ser el beneficio en cada producto
para que el plan de producción (x1 | x2) = (0 | 6) de el máximo beneficio posible. ¿Podemos
ayudarles con esto?
16
La solución a estos ejercicios y las transparencias de PowerPoint, así como más ejercicios, se
pueden encontrar en el CD adjunto.
Consideraremos el PL del ejercicio 1.7 b), que está dibujado en la figura 1.5. La solución óptima
(x1* | x2*) = (7/3 | 7/2) difícilmente se puede obtener a partir del gráfico (¿por qué?). Aún así, a
partir del algoritmo 1.1 sabemos sin duda que la solución óptima es un vértice del poliedro
factible, que es la intersección de las rectas
De esta forma hemos conseguido confirmar que (x1* | x2*) = (7/3 | 7/2) es efectivamente el
vértice buscado de la región factible y, por tanto, la solución óptima del problema lineal del
ejercicio 1.7 b).
17
max 2 x1 + 8 x2
x1=0 unter den Nebenbedingungen
5 x1>0 -126x1+120x2=126 − 126 x1 + 120 x2 ≤ 126
Solución óptima 126 x1 + 132 x2 ≤ 756
(x1* | x2*) = (7/3 | 7/2) -126x1+120x2 < 126
4 x1 , x2 ≥ 0
3
z* = 32 2/3 = 2x1 + 8x2
z = 16 = 2x1 + 8x2
Contiene a la solución óptima
2 (x1* | x2*) = (7/3 | 7/2)
x2>0
x2=0
-2 -1 1 2 3 4 5
126x1+132x2=756
-2
Figura 1.5 Aplicación del algoritmo 1.1 para calcular la solución del ejercicio 1.7 b).
max 30 x1 + 50 x2
s.a. 3 x1 + 2 x2 ≤ 18,
x1 ≤ 4,
2 x2 ≤ 12,
x 1, x 2 ≥ 0 .
El método gráfico nos ha convencido de que el vértice del poliedro factible en el que se cortan
las rectas 3 x1 + 2 x2 = 18 y 2 x2 = 12, determina la solución óptima. La segunda ecuación
muestra que x2 = 6. Insertándola en la primera ecuación, obtenemos que 3 x1 = 18 – 2 · 6 = 18 –
12 = 6, por lo que x1 = 2. El vértice, y por tanto la solución óptima del pequeño problema
SchokoLeb, se expresa de la forma (x1* | x2*) = (2 | 6), que es lo que ya sabíamos a partir del
gráfico.
(→Ej.1.8 y Ejercicios Adicionales (ver CD) 1.28-42)
Ejercicios
Ej.1.8
a) Comprobar las soluciones de (i) Ej. 1.6 a), (ii) Ej. 1.6 c) y (iii) Ej. 1.7 a) calculando el punto de
corte de las rectas
(i) x1 = 4 y 3x1 + 2x2 = 18,
(ii) x1 = 5 y 3x1 + 2x2 = 18,
(iii) –x1 + x2 = 1 y x1 + x2 = 3.
18
b) Encontrar una solución para el siguiente PL a partir del método gráfico (algoritmo 1.1) y
determinar el valor exacto de la solución óptima resolviendo el sistema de ecuaciones.
max 12x1 + 24x2
sujeto a
2x1 ≤ 8,
6x2 ≤ 36,
21x1 + 24x2 ≤ 168,
-16x1 + 24x2 ≤ 96,
x1, x2 ≥ 0.
Natalia: Solina, lo que escribiste me parece genial. A partir de esto se puede entender muy bien
la solución de los problemas de programación lineal con dos variables. Pero tenemos que
resolver el problema SchokoLeb, que tiene más de dos variables, muchas más.
Oliver: Sí, será igual que el problema que resolvió Solina. Simplemente dibujaremos todas las
posibles decisiones disponibles y encontraremos la mejor, al igual que hicimos con SchokoLeb.
Sebastián: No, no creo que sea así de fácil. Este problema tiene más de tres variables de
decisión, tantas como queramos, no podemos hacer nada dibujando. O…, ¿puedes dibujar en
cuatro dimensiones, Oliver? Según nuestro plan de trabajo Natalia se ofreció voluntaria para
encontrar algo en general.
Natalia: De hecho creo que ya he encontrado algo. La mayoría de los libros que he mirado
buscando algo sobre como resolver problemas de programación lineal comienzan así:
Dado un problema de programación lineal
min <c, x>
sujeto a
Mx = b,
x ≥ 0.
Tuve que pensar un poco y buscar muchas cosas en libros y en Internet, hasta que encontré la
conexión con nuestros problemas, que en un principio pareció ser algo totalmente diferente. Pero
todos deberíais refrescar un poco vuestros conocimientos sobre álgebra lineal, es decir, como
trabajar con vectores y matrices. Para ayudaros a recordar, primero explicaré como se trabaja
con un problema de optimización lineal en forma de igualdades, para que podamos ocuparnos
de él adecuadamente, y porque – aunque suene extraño – da igual si maximizamos o
minimizamos. Entonces, veamos como resolvemos ecuaciones mediante operaciones básicas
con filas, operaciones de pivotaje y el Método de Gauss. Finalmente os mostraré el método del
Simplex para resolver problemas de programación lineal, el cual necesita los conceptos
anteriormente mencionados.
Oliver: Bien, ¿pero seguro que dibujar no es más sencillo?
Sebastián: Venga hombre, déjalo ya. Lo discutimos antes. Sin manejar las operaciones con
matrices no haremos mucho. Deberíamos estar contentos de que Natalia haya averiguado esto.
19
2
Cuando uno tiene dos variables de decisión x1 y x2, se pueden integrar en un vector x = (x1 x2)
(vector de decisión). Si tenemos más de dos, digamos cinco variables de decisión, podemos
usar la misma simbología, es decir
x = (x1 x2 x3 x4 x5).
Análogamente podemos representar los datos del problema de decisión en una forma compacta
usando más vectores y matrices. Para el ejemplo pequeño de SchokoLeb tenemos:
max 30 x1 + 50 x2
sujeto a
3x1 + 2x2 ≤ 18,
1x1 + 0x2 ≤ 4,
0x1 + 2x2 ≤ 12,
x1, x2 ≥ 0.
Una vez introducidos los datos c, A, b, podemos recobrar la información detallada haciendo
productos escalares y multiplicaciones de matrices. El producto escalar entre el vector de la
función objetivo x y el vector de decisión c viene dado de la siguiente forma
c, x = ( c1 c2 ) , ( x1 x2 ) := c1 x1 + c2 x2 .
En la muestra de SchokoLeb es <c , x> = <(30, 50) , (x1 x2)> := 30 x1 + 50 x2. Utilizaremos los
ángulos <> como símbolo del producto escalar entre dos vectores. Si tuviéramos cinco en lugar
de dos variables de decisión, el producto escalar sería
c, x = ( c1 c2 c3 c4 c5 ) , ( x1 x2 x3 x4 x5 ) := c1 x1 + c2 x2 + c3 x3 + c4 x4 + c5 x5 .
2
En los ejemplos siguientes no haremos distinción entre vectores fila y vectores columna.
Alternativamente, se podría introducir en este punto la transposición y definir, en principio, los
vectores como vectores fila. En un momento dado se llevaría a cabo la transposición.
20
En este caso el vector x viene definido como un vector columna. En el caso SchokoLeb es
3 2 3x1 + 2 x2
x1
Ax = 1 0 = 1x1 + 0 x2 .
x
2 0x + 2x
0 2 1 32
a11x1 + a12x2 ≤ b1 ,
a21x1 + a22x2 ≤ b2 ,
a31x1 + a32x2 ≤ b3
y las restricciones de signo
x1,x2 ≥ 0,
tienen que ser satisfechas al mismo tiempo. En nuestro pequeño ejemplo SchokoLeb Ax ≤ b, x ≥
0 significa que las restricciones
3x1 + 2x2 ≤ 18,
1x1 + 0x2 ≤ 4,
0x1 + 2x2 ≤ 12
y, adicionalmente, las restricciones de signo x1 ≥ 0 y x2 ≥ 0 han de cumplirse.
Si ahora examinamos todos los posibles vectores x que cumplen las restricciones, desde el
punto de vista matemático será mucho más fácil trabajar con ecuaciones que con inecuaciones.
Por esta razón introduciremos una variable de holgura para cada inecuación:
3x1 + 2 x2 ≤ 18 → 3 x1 + 2 x2 + x3 = 18
1x1 + 0 x2 ≤ 4 → 1x1 + 0 x2 + x4 = 4
0 x1 + 2 x2 ≤ 12 → 0 x1 + 2 x2 + x5 = 12
Además de las dos variables de decisión, tenemos el mismo número de variables de holgura que
de restricciones (en el pequeño problema SchokoLeb hay, por tanto, tres variables de holgura x3,
x4 y x5). Se puede notar que (x1 x2) con x1 ≥ 0, x2 ≥ 0 cumple todas las inecuaciones del sistema
de inecuaciones de la izquierda si y sólo si el vector (x1 x2 x3 x4 x5) con x1, x2, x3, x4, x5 ≥ 0
cumple todas las ecuaciones del sistema de ecuaciones. Las variables de holgura no son
21
variables de decisión y, por lo tanto, tienen valor 0 en la función objetivo. En ese caso podemos
escribir el pequeño problema de SchokoLeb de la siguiente forma:
max 30 x1 + 50 x2 + 0 x3 + 0 x4 + 0 x5
sujeto a :
3 x1 + 2 x2 + x3 = 18
.
1x1 + 0 x2 + x4 = 4
0 x1 + 2 x2 + x5 = 12
x1 , x2 , x3 , x4 , x5 ≥ 0
En general así es como aparece un problema de programación lineal:
Ejemplo 1.2:
En el pequeño problema de SchokoLeb
c = (30 50 0 0 0)
3 2 1 0 0 18
.
M = 1 0 0 1 0 , b = 4
0 2 0 0 1 12
Ejemplo 1.3:
Consideremos el problema de programación lineal
22
max 7 x1 + 3 x2 − 12 x3
sujeto a :
- 2 x1 − 4 x2 ≤ 13
15 x2 + 9 x3 ≤ 6
3x1 + 7 x2 − 10 x3 ≤ 0
− 5 x1 − 6 x3 ≤ 9
x1 , x2 , x3 ≥ 0
Si se escriben las restricciones en forma de igualdad el problema queda así:
max 7 x1 + 3 x2 − 12 x3 + 0 x4 + 0 x5 + 0 x6 + 0 x7
sujeto a :
- 2 x1 − 4 x2 + x4 = 13
15 x2 + 9 x3 + x5 =6
3 x1 + 7 x2 − 10 x3 + x6 = 0.
− 5 x1 − 6 x3 + x7 = 9
x1 , x2 , x3 , x4 , x5 , x6 , x7 ≥ 0
Contiene n = 3 variables de decisión x1, x2, x3 y para cada una de las m = 4 restricciones una
variable de holgura respectivamente, por lo tanto m = 4 variables de holgura x4, x5, x6, x7. El
vector de la función objetivo es c = (7 3 -12 0 0 0 0), la matriz de coeficientes es
−2 −4 0 1 0 0 0
0 15 9 0 1 0 0
M =
3 7 −10 0 0 1 0
−5 0 −6 0 0 0
1
y el vector de capacidades es
13
6
b= .
0
9
(→Ej.1.9)
Ejemplo 1.4:
Si dibujáramos el pequeño problema SchokoLeb en forma estándar, al minimizar usaremos el
vector de la función objetivo (-30 -50 0 0 0).
(→Ex.1.10-11)
min c, x
sujeto a :
Mx = b
x≥0
(→Ej.1.12-13)
Ejercicios
Ej.1.9 Transformar los siguientes sistemas de inecuaciones en sistemas de ecuaciones.
Después escriba tanto el sistema de ecuaciones como el de inecuaciones en forma matricial y
compárelos.
3 x1 + 5 x2 + 7 x3 ≤ 5
83x1 + 2 x2 − 43 x3 + 23x4 ≤ 10
6 x − 12 x2 − x3 ≤ −3
a) 1 b) 8 x1 + 2 x2 − 23x3 − 14 x4 ≤ 432
7 x1 + 2 x2 − 5 x3 ≤ 16
43 x1 − 7 x2 + 4 x3 + 5 x4 ≤ 83
9 x1 + 17 x2 − 14 x3 ≤ 8
Ej.1.10 Transformar los siguientes problemas de maximización en problemas de minimización.
a ) max 3 x1 + x2 − 23x3 + x4
b) max 23 x1 − x2
c) max 53 x1 − 23x2 + 42 x3 − 32 x4
d ) max 5 x1 + 2 x2 − x3 + x4 − 23 x5
Ej.1.11 Transformar los siguientes problemas de maximización en problemas de minimización.
a ) max ( 34 28 −13) , x
b) max ( 31 −98 −99 −8 ) , x
c) max ( 82 −82 ) , x
d ) max ( 34 −13 94 −72 −83) , x
24
a ) max 3 x1 + x2 − 4 x2 b) min13 x1 + 20 x2 + 16 x3 + 23 x4
sujeto a : sujeto a :
7 x1 + 3 x2 − 5 x2 ≤ 18 28 x1 − 16 x2 − 8 x3 − 4 x4 ≤ 0
x1 − 6 x2 + 2 x3 ≤ 10 x1 + 23 x2 + 16 x3 + 23 x4 ≤ 13
18 x2 + 9 x3 ≤ 9 38 x1 + 26 x2 + 18 x3 − 14 x4 ≤ 87
x1 , x2, x3 ≥ 0 x1 x3 + 35 x4 ≤ 12
−
x1 , x2 , x3 , x4 ≥ 0
c) max x2 d ) max 2 x1 + 3 x2 + 5 x3 + 7 x4 + 11x5 + 13 x6
sujeto a : sujeto a :
7 x1 + 16 x2 ≤9 17 x1 − 19 x2 + 23 x3 − 29 x4 − 31x6 ≤ 37
4 x1 − 22 x2 ≤ 27 9 x1 + 8 x2 − 16 x3 + 15 x4 − 30 x5 + 31x6 ≤ 62
−13 x1 + x2 ≤ 44 48 x1 − 36 x3 − 12 x5 ≤0
14 x1 + 14 x2 ≤ 14 15 x1 + 16 x2 + 17 x3 − 17 x4 − 16 x5 − 15 x6 ≤ 25
x1 , x2 ≥0 x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
Ej.1.13 Escribir los siguientes problemas de programación lineal en su forma estándar.
a ) max13 x1 − 13 x2 + 16 x4 b) max − x1 − x2 − x3 − x4
sujeto a : sujeto a :
18 x2 − 9 x3 + 4, 5 x4 ≤ 36 − x1 + x2 + x3 + x4 ≤ 1
17 x1 + 17 x3 + 17 x4 ≤ 17 x1 − x2 + x3 + x4 ≤ 1
−25 x1 − 5 x2 − 33 x4 ≤3 x1 + x2 − x3 + x4 ≤ 1
18 x1 + 9 x2 + 4,5 x3 ≤ 36 x1 + x2 + x3 − x4 ≤ 1
x1 , x2 , x3 , x4 ≥ 0
c) min 2 x1 + x2 − 2 x3 d ) max − 5 x1 − 4 x2 − 3 x3 − 2 x4 − x5
sujeto a : sujeto a :
18 x1 + 3 x2 − 60 x3 ≤ 99 15 x1 + 4 x2 − 5 x3 + 47 x4 + 9 x5 ≤ 26
18 x1 + 3 x2 ≤ 99 49 x1 + 67 x2 − 7 x3 + 44 x5 ≤9
3 x2 + 4 x3 ≤5 98 x1 + 81x2 − 18 x3 + 84 x4 − 49 x5 ≤ 96
2 x1 + 20 x2 + 6 x3 ≤ 21 6 x2 + 3 x3 + 6 x5 ≤ 991
x1 , x2 , x3 , x4 ≥0 x1 , x2 , x3 , x4 , x5 ≥0
Para introducir el método del Simplex necesitamos definir los conceptos clave de las operaciones
básicas con filas, operaciones de pivotaje y sistemas de ecuaciones. En este caso las
25
operaciones con filas y de pivotaje se usan para poder resolver los sistemas de ecuaciones más
fácilmente.
Zi := kZi : Multiplicación de una fila. Todas las componentes de la fila Zi se multiplican por
un número k.
Ejemplo 1.5:
En el siguiente ejemplo observamos una serie de operaciones básicas con filas en la matriz M.
3 3 9 6 0 1 1 3 2 0 1 1 3 2 0
0 0 2 0 3 Z1 := 3 Z1 0 0 2 0 3
Z3 := Z 3 − 2 Z1 0 0 2 0 3
1
2 3 7 5 3 1 1 1 3
2 3 7 5 3 0
.
1 1 3 2 0 1 1 3 2 0
2 ↔ Z3 0 1 1 1 3 Z 3 := 2 Z3 0 1 1 1 3
Z 1
0 0 2 0 3 0 0 1 0 3 2
Cuando llevamos a cabo una operación de pivotaje, en la matriz M elegimos una entrada mij,
que debe ser distinta de cero. A partir de ese momento giraremos en torno a dicho elemento mij,
por eso a mij se le llama elemento pivote, del francés pivot = centro de rotación. De acuerdo con
la terminología aritmética de las matrices mij está situado en la i-ésima fila (la fila pivote) y en la
columna j-ésima (la columna pivote) de M. Ahora aplicaremos las operaciones básicas con filas
y las operaciones de pivotaje sobre el elemento pivote mij. Nuestro objetivo es convertir la
columna j-ésima en el vector unitario ei. Esto se puede hacer:
Ejemplo 1.6:
Veamos la última fila del ejemplo 1.5 y apliquemos operaciones de pivotaje (los elementos pivote
están recuadrados en azul en este ejemplo y en los siguientes).
1 1 3 20 1 0 2 1 −3
0 1 1 1 3
Z1 := Z1 − 1 Z2 0 1 1 1 3
0 0
1 0 32
0 0 1 0 32
.
1 0 0 1 −6 1 0 0 1 −6
0 1
Z1 := Z1 − 2 Z 3 1 1 3
Z 2 := Z 2 − 1 Z3 0 1 0 1 3 2
0 0 1 0 3
0 0 1 0 32 2
26
Integraremos los datos del sistema de ecuaciones Mx=b en la matriz ampliada (M | b), en la que
la última columna es el vector cuyas componentes son los lados derechos de las inecuaciones.
Ejemplo 1.7:
Observemos el sistema con dos ecuaciones y cinco variables
Si aplicamos las operaciones básicas con filas a la matriz ampliada (A| b), en efecto cambiamos
los coeficientes, pero los cambiamos en ambos miembros de las ecuaciones, por lo que el
conjunto solución no cambia. De esta forma podemos simplificar el sistema de ecuaciones hasta
el punto que podemos deducir la solución directamente. Este método lleva el nombre del
matemático Friedrich Gauss (1777-1855) (Método de Gauss).
Ejemplo 1.8:
Consideremos el sistema de ecuaciones del ejemplo 1.7. Resolverlo mediante el método de
Gauss:
3 6 0 12 3 12 1 2 0 4 1 4
(M b ) = Z1 := 1 3 Z1
2 4 1 10 2 9 2 4 1 10 2 9 .
1 2 0 4 1 4
Z 2 := Z 2 − 2 Z1
= ( M ' b ')
0 0 1 2 0 1
Los vectores unitarios e1 y e2 (en rojo) corresponden a la primera y la tercera columna de la
matriz ampliada x1 y x3. Sus valores se obtienen de la última columna: x1 = 4 y x3 = 1. Las demás
variables tienen valor 0, es decir x2 = x4 = x5 = 0. En términos generales, obtenemos el vector
solución x = (4 0 1 0 0). Como comprobación:
4
0
3 6 0 12 3 3 ⋅ 4 + 6 ⋅ 0 + 0 ⋅ 1 + 12 ⋅ 0 + 3 ⋅ 0 12
M x = 1 = = =b.
2 4 1 10 2 2 ⋅ 4 + 4 ⋅ 0 + 1 ⋅ 1 + 10 ⋅ 0 + 2 ⋅ 0 9
0
0
Ejemplo 1.9:
En este ejemplo observamos como el método puede detectar que un sistema no tiene solución.
1 2 −1 5 −3 1 1 2 −1 5 −3 1
Z 2 := Z 2 − 2 Z1
2 4 −2 12 2 4 Z 3 := Z 3 −1 Z1
→0 0 0 2 8 2
1 2 −1 6 1 4 3
0 0 0 1 4
.
1 2 −1 5 −3 1 1 2 −1 0 −23 −4
Z 2 := 1 2 Z 2 Z1 := Z1 − 5 Z 2
→ 0 0 0 1 4 1
Z 3 := Z 3 −1 Z 2
→ 0 0 0 1 4 1
0 0 0 1 4 3 0 0 0 0 0 2
Ya que el conjunto de soluciones permanece igual a través de operaciones de pivotaje, nos
damos cuenta observando la última fila, que corresponde a la ecuación 0x1+0x2+0x3+0x4+0x5 = 2,
que no hay solución.
En lugar de hacer operaciones pivote “de izquierda a derecha” en la matriz M, podemos convertir
las columnas en vectores unitarios mediante operaciones de pivotaje. (Si esto es posible, se dice
que los vectores de la matriz M son linealmente independientes). Esta técnica sería sencilla si
uno “casi viera” los vectores unitarios en la matriz.
Ejemplo 1.10:
En el sistema de ecuaciones definido a partir de la matriz ampliada
2 8 0 14 1 10
( M b ) = 1 3 0 5
0 4 ,
0 4 2 11 0 7
se pueden reconocer los vectores unitarios e1 y e2 en las columnas cinco y tres. Por lo tanto
resolveremos el sistema de la siguiente forma:
28
2 8 0 14 1 10 2 8 0 14 1 10
Z3 := 12 Z3
(M b) = 1 3 0 5 0 4 → 1 3 0 5 0 4
0 2 1 11 0 7
0 4 2 11 0 7 2 2
0 2 0 4 1 2
Z1 := Z1 − 2 Z 2
→ 1 3 0 5 0 4 = ( M ' b ')
0 2 1 11 0 7
2 2
y por consiguiente obtenemos la solución x5=2, x1=4, x3= 7/2 , por tanto x =(4 0 7/2 0 2) a partir
de las columnas de los vectores unitarios.
En la matriz M con m filas seleccionamos m columnas, de tal forma que esas columnas se
pueden transformar mediante operaciones de pivotaje en (M | b) con m vectores unitarios
diferentes. Por consiguiente, después de la transformación se pueden obtener los valores de las
variables a partir de la última columna. El valor para cada una de las variables restantes será
cero. Dicha solución se denomina solución básica del sistema de ecuaciones lineales. (El
nombre proviene del hecho de que las columnas seleccionadas en la matriz constituyen una
base del espacio generado por las columnas de la matriz M.)
Cuando se resuelve un problema de programación lineal (en forma estándar), de entre todas las
soluciones del sistema de ecuaciones M x = b, solo podemos considerar aquellas que además
satisfacen las restricciones de signo x ≥ 0. Una solución básica que posee esa condición
adicional se denomina solución básica factible (→Ejercicios Adicionales (ver CD) 1.55-56).
La demostración de este teorema está basada en teoría de poliedros. Se sabe que se puede
transformar una solución óptima, que no es básica, en una solución básica, sin cambiar el valor
3
de la función objetivo. Ya nos hemos encontrado este caso especial en la sección 1.2, cuando
determinamos que la solución óptima de un problema de programación lineal (o una de ellas)
con dos variables siempre es un vértice. Las soluciones básicas de un sistema de ecuaciones
están muy relacionadas con los vértices de un poliedro, y consideraremos esto más
detalladamente en los siguientes párrafos.
3
Para una prueba detallada ver Hamacher, H.W., & Klamroth, K. Lineare und
Netzwerkoptimierung – Linear and Network Optimization: Ein bilinguales Lehrbuch. Vieweg
Verlag, 2000.
29
n m Cn(n+m,m)
2 3 10
5 3 56
5 5 252
10 5 3.003
10 10 184.756
20 10 30.045.015
Tabla 1.3 Los coeficientes binomiales Cn(n+m,m) representan el número de posibles
soluciones en un problema de programación lineal
Resulta obvio que este método es demasiado elaborado. Para el pequeño problema SchokoLeb
tendríamos diez posibilidades. (→Ej.1.14). Aún así, en el problema original de SchokoLeb con
n=10 y m=5 tendríamos que probar con 30003 combinaciones. Y de acuerdo con lo que se habló
en la reunión de contacto, la compañía quiere resolver problemas incluso mayores.
Pero hay un ingenioso método que, en lugar de analizar todas las posibilidades, sortea ese
problema. (Ese método fue reconocido como muy brillante, lo cual se puede demostrar en el
hecho de que de las tres personas que lo inventaron independientemente unos de otros en los
años cuarenta, dos de ellos fueron premiados con el Nobel de economía, ver sección 1.7.) La
base de este método, llamado método del Simplex, viene de la siguiente idea:
En cada iteración nos movemos de una solución básica factible x a otra solución básica factible
x’, que ha de tener las siguientes características:
- el valor de la función objetivo < c , x’ > en x’ es al menos tan buena como la que da x.
Lo interesante de esto es que se puede hacer usando las operaciones de pivotaje anteriores.
Además, de la matriz se puede deducir, empleando un criterio simple, si se ha alcanzado una
solución básica óptima.
Ejemplo 1.11:
30
Ahora iremos de x3-4-5 a la solución básica factible adyacente transformando la primera columna
de M en el segundo vector unitario en T mediante operaciones de pivotaje.
−30 −50 0 0 0 0 0 −50 0 30 0 120
3 2 1 0 0 18 Z := Z − ( −30) Z 0 2 1 −3 0 6
T =
0 0 2
→ .
1 0 0 1 0 4 Z1:= Z1 −3 Z 2 1 0 0 1 0 4
0
0 2 0 0 1 12 2 0 0 1 12
La nueva solución básica es x3-1-5 = (4 0 6 0 12). El vértice correspondiente del poliedro factible
de la figura 1.1 es (4 | 0), un vértice adyacente al vértice anterior (0 | 0). En la base cambiamos la
cuarta columna (en la que apareció el segundo vector unitario después del cambio) por la
primera columna (en la que situamos ahora el segundo vector unitario). El valor de la función
objetivo es ahora -30x1-50x2+0x3+0x4 +0x5 = -120, que es exactamente (aparte del signo
algebraico) la entrada superior derecha de la nueva tabla Simplex.
Después llevaremos a cabo el cambio de base {3,1,5} {2,1,5}, i.e. reemplazaremos el vector
unitario de la columna 3 por el vector de la columna 2, con la ayuda de las operaciones de
pivotaje:
Dentro del cambio final de bases reemplazaremos la quinta columna por la cuarta:
0 0 25 −45 0 270 0 0 25 −45 0 270
0 1 12 - 3 2 0 3 Z := 1 3 Z
3 3
→ 0 1 12 - 3 2 0 3
1 0 0 1 0 4 1 0 0 1 0 4
0 0 -1 3 1 6 0
0 -1
3 1 1
3 2
0 0 10 0 15 360
0 1 0 0 6
1
Z 0 := Z 0 − ( −45) Z 3 2
Z1:= Z1 −( − 3 2 ) Z 3 →
1 0 13 0 - 13 2
Z 2 := Z 2 −1Z3
0 0 -1 3 1 1
3 2
Tras cada paso el valor de la función objetivo ha sido mejorado, es decir, se ha hecho más
pequeño (recordar: estamos minimizando). A partir de esta tabla y gracias al siguiente resultado,
que probaremos en el Apéndice B, se sabe que no se tiene que determinar ninguna solución
básica más.
Condiciones de optimalidad:
Si en una tabla Simplex T todas las entradas de la fila superior y de la última columna,
sin contar con la entrada de la esquina superior derecha, son no negativas, entonces la
correspondiente solución básica es una solución óptima del problema de programación
lineal.
De diez posibles soluciones básicas (comparar con la tabla 1.3) en el ejemplo 1.11, sólo tuvimos
que comprobar cuatro de ellas hasta alcanzar el óptimo. Obviamente, esto nos ahorra tiempo de
computación. Pero, ¿cómo se sabe en qué orden se deben realizar los cambios de base? Para
esto existe una regla que se aplica si las entradas de la columna de la derecha son no negativas,
es decir, si la solución básica es factible, pero no se cumple la condición de optimalidad:
Si echamos otro vistazo al ejemplo 1.11, detectamos que todos los cambios de base se realizan
de esta forma. El algoritmo 1.3 representa una descripción formal del método del Simplex.
Ejemplo 1.12:
Queremos resolver el siguiente problema de programación lineal en forma de inecuaciones
mediante el algoritmo 1.3:
max 2 x1 + 3 x2
subject to
3x1 ≤5
5 x2 ≤ 3
3 x1 + 2 x2 ≤ 10
x1 , x2 ≥ 0
max 2 x1 + 3 x2 − min − 2 x1 − 3 x2
subject to subject to
3 x1 ≤5 3x1 + x3 =5
⇒
5 x2 ≤ 3 5 x2 + x4 =3
3 x1 + 2 x2 ≤ 10 3 x1 + 2 x2 + x5 = 10
x1 , x2 ≥ 0 x1 , x2 , x3 , x4 , x5 ≥ 0
Aplicamos el método del Simplex, m = 3 y n = 2.
Paso 3: No se cumple que t0j ≥ 0 para todo j=1,…,n+m. Por eso seleccionamos la columna s = 1
con entrada negativa en la fila superior (t01 = -2 < 0) como columna pivote.
Paso 4: No todas las entradas de la columna 1 son negativas o cero. Como fila pivote elegimos
la fila i = 1, porque el cociente en esa fila es
ti , m + n +1 t16 5
= =
tis t11 3
que es el mínimo.
Pasos 5 y 6: Seleccionamos la entrada ti,s = t11 como elemento pivote y aplicamos operaciones
de pivotaje a la tabla completa T. Nombramos a la nueva tabla Simplex resultante T.
34
−2 −3 0 0 0 0
−2 −3 0 0 0 0
1 1 5
0 0 0
3 0 1 0 0 5 Z1:= Z1:3 3 3
→
0 5 0 1 0 3 0 5 0 1 0 3
3 2
0 0 1 10
3 2 0 0 1 10
2 10
0 −3 3
0 0
3
1 0 1 5
0 0
Z 0 := Z 0 + 2 Z1 3 3
Z3 := Z 3 −3 Z1
→ =T
0 5 0 1 0 3
0 2 −1 0 1 5
Paso 3:No es verdad que t0j ≥ 0 para todo j=1,…,n+m. Seleccionamos la columna s = 2 con
entrada negativa en la fila superior ( t02 = -3 < 0) como columna pivote.
Paso 4: No todas las entradas en la columna 2 son negativas o cero. Elegimos como fila pivote la
fila i = 2, porque el cociente en esta fila
ti , m + n +1 t26 3
= = ,
tis t22 5
es mínimo.
Pasos 5 y 6: Seleccionamos la entrada ti,s = t22 como elemento pivote y aplicamos operaciones
de pivotaje a la tabla completa T. Nombramos a la nueva tabla T.
2 10 2 10
0 −3 3 0 0
3 0 −3
3
0 0
3
1 0 1 0 0
5 1 0 1 0 0
5
3 3 Z 2 := Z 2 :5 3 3
→
0 5 1 3
0 1 0 3 0 1 0 0
5 5
0 2 −1 0 1 5 0 2 −1 0 1 5
35
2 3 77
0 0
3 5
0
15
1 1 5
0 0 0
Z 0 := Z 0 +3 Z1 3 3
Z 3 := Z 3 − 2 Z1
→ =T
0 1 3
1 0 0
5 5
2 19
0 0 −1 − 1
5 5
Paso 3: Ya que se tiene que t0j ≥ 0 para todo j=1,…,n+m, el método del Simplex ha terminado.
Como salida tenemos la solución básica de esta tabla, es decir
5 3 19
x1− 2−5 = 0 0 ,
3 5 5
con valor de la función objetivo
77 77
−− = .
15 15
Ejercicios
Ej.1.14 Considerar el pequeño problema SchokoLeb, que ya ha sido convertido a sistema de
ecuaciones (ver ejemplo 1.2).
a) ¿Cuántas soluciones básicas se pueden encontrar como máximo?
b) Calcular todas las soluciones básicas.
c) Calcular los valores de la función objetivo para todas las soluciones básicas factibles. ¿Cuál
es la mejor solución básica factible?
d) Dibujar la región factible. Después dibujar los puntos (x1 | x2) para todas las soluciones
básicas. Dar una explicación lógica de las soluciones básicas a partir del grafo. ¿Cuál es la
diferencia entre soluciones básicas factibles y soluciones básicas no factibles?
Ej.1.15 Dado el siguiente problema de programación lineal en forma de inecuaciones
max 2 x1 + x2 + 3x3
s.a 2 x1 + 6 x3 ≤ 10
− 2 x1 + 8 x2 + 4 x3 ≤ 12 .
3 x1 + 6 x2 + 5 x3 ≤ 20
x1 , x2 , x3 ≥ 0
Encontrar la solución óptima aplicando el Algoritmo 1.3.
36
Eso no es una sorpresa si uno considera la abundancia de ejemplos de utilidad que pueden ser
tratados mediante optimización lineal. Una buena fuente de ejemplos es las librerías de los
paquetes de software GAMS y AMPL (direcciones de Internet, ver Adjunto C). En la librería de
GAMS se modelan mediante programación lineal las siguientes áreas de economía:
- Agricultura
- Econometría
- Ayuda al desarrollo
- Gestión de la energía
- Presupuestos
- Ingeniería forestal
- Industria del carbón
Aparte del método básico para resolver problemas de programación lineal presentado en este
texto, existen muchos otros resultados a los que no se puede acceder sólo con matemáticas
elementales, y que están reservados para estudios especiales de matemáticas, ciencias
económicas o ingeniería industrial.
En los años setenta y ochenta la programación lineal se hizo más y más popular en la prensa por
su conexión con un problema matemático, que se puede describir como “¿P = NP?". En pocas
palabras, los problemas de optimización se dividen en varias categorías donde P es la categoría
de problemas para los que se conoce un método de solución eficiente. Por otro lado los
problemas NP, o más específicamente NP-completos, son aquellos para los que no hay un
método eficiente, pero se relacionan de tal forma que si se pudiera encontrar una solución
eficiente para solo uno de esos problemas, se encontrarían automáticamente soluciones a todos
ellos. La pregunta “¿P = NP?“ quiere decir que aún no se sabe si se podrá encontrar alguna vez
dicho algoritmo para problemas de dificultad NP“ (por cierto, para el que encuentre la solución a
esa pregunta hay un premio de, ¡1.000.000 $!)
Hoy en día, la mayoría de los problemas lineales que se usan como modelos para problemas
económicos se resuelven o empleando refinamientos del método del Simplex resumido en el
algoritmo 1.3, o por el método desarrollado por N. Karmarkar en 1985 (especialmente para
problemas con muchas variables y restricciones).
Sebastián: Natalia, esto está muy bien. El problema de prueba de la tabla 1.1 es un problema
lineal en forma de inecuaciones. Ahora sabemos como transformarlo en formato de ecuaciones y
38
entonces todo lo que tendremos que hacer son operaciones de pivotaje y cambios de bases
hasta que se cumplan las condiciones de optimalidad.
Solina: Esto significa que el contrato con la compañía SchokoLeb es posible. Después de todo,
podemos explicar a Mr. Ritter como funciona todo y por qué puede estar seguro de que
hallaremos el plan de producción óptimo de su compañía.
Natalia: Tienes razón, en principio. ¿Alguno de vosotros ha calculado el tamaño del problema?
Una vez excluidas las restricciones de mercado, tenemos cinco restricciones, diez variables de
decisión y cinco variables de holgura, es decir, en total quince variables. He traído la tabla
Simplex con la que podemos empezar (ver tabla 1.4). Aunque ayer estuve haciendo cálculos
durante cuatro horas, no conseguí encontrar la solución mediante el método del Simplex.
1 3 2 5 2 7 1 2 -1 2 0 0 0 0 0 0
2 0 3 0 3 8 1 2 4 1 1 0 0 0 0 80
1 3 5 3 6 3 2 1 0 1 0 1 0 0 0 75
0 2 0 1 4 2 1 0 0 0 0 0 1 0 0 45
2 0 0 2 0 0 2 4 2 4 0 0 0 1 0 50
0 0 0 0 2 3 0 0 0 0 0 0 0 0 1 45
Tabla 1.4 Tabla inicial del problema SchokoLeb (sin las restricciones de mercado).
Sebastián: Además de eso, por cada variable de decisión tendríamos que mirar una inecuación,
dentro de la cual se tienen en consideración restricciones de mercado (comparar con la tabla
1.1). Esto nos daría diez inecuaciones más con sus diez variables de holgura. ¡Y tendríamos 15
restricciones y 25 variables! ¿Para calcular a mano?
Oliver: Algo bueno: Internet. Siguiendo la distribución de tareas, eché un vistazo y encontré
algunos enlaces interesantes. Existe un software especial para resolver problemas de
programación lineal. Antes de decidir si queremos comprar algo así, me las arreglé para
descargar las versiones disponibles gratis en la red (ver Adjunto C). En Internet también se
pueden encontrar instrucciones sobre como introducir los datos y como obtener las soluciones.
Dejad que os muestre como usé el software AMPL (Algebraic Mathematical Programming
Language). Se tiene que introducir un modelo parecido al pequeño problema SchokoLeb. Echad
un vistazo al modelo SchokoLeb.mod por AMPL. En principio dejé fuera las restricciones de
mercado.
set PLANTS;
set PRODUCTS;
param CC {PRODUCTS};
param MM {PLANTS,PRODUCTS};
param BB {PLANTS};
Oliver: Después de esto se tienen que introducir los datos en el modelo para que pueda
calcularlos. Los podéis encontrar en SchokoLeb.dat. Creo que entenderéis todo eso sin tener
que leer el manual de AMPL
set PLANTS := A1 A2 A3 A4 A5;
set PRODUCTS := P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 S1 S2 S3 S4 S5;
param: CC :=
P1 -1
P2 -3
P3 -2
P4 -5
P5 -2
P6 -7
P7 -1
P8 -2
P9 1
P10 -2
S1 0
S2 0
S3 0
S4 0
S5 0;
param: BB :=
A1 80
A2 75
A3 45
A4 50
A5 45;
param MM :
P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 S1 S2 S3 S4
S5:=
A1 2 0 3 0 3 8 1 2 4 1 1 0 0 0 0
A2 1 3 5 3 6 3 2 1 0 1 0 1 0 0 0
A3 0 2 0 1 4 2 1 0 0 0 0 0 1 0 0
A4 2 0 0 2 0 0 2 4 2 4 0 0 0 1 0
A5 0 0 0 0 2 3 0 0 0 0 0 0 0 0 1;
Tabla 1.6 Datos SchokoLeb.dat
XX [*] :=
P1 0
P2 0
P3 0
P4 13.8372
P5 0
P6 9.30233
P7 0
P8 0
P9 0
P10 5.5814
S1 0
S2 0
S3 12.5581
S4 0
S5 17.093 .
Oliver: Así que podemos ir a la compañía SchokoLeb y decirles lo que deberían hacer: producir
13,8372, 9,30233 y 5,5814 unidades de los productos P4, P6 y P10 respectivamente, y no
producir los otros productos. Al hacer esto tuvimos suerte, porque las restricciones de mercado
de la tabla 1.1 casualmente se cumplen, por lo que la solución es realmente factible. De hecho
podríamos decirle a la compañía algo más: la eficiencia de cada planta no es muy buena, como
podemos deducir de los valores S3=12,5581 y S5=17,093 de las variables de holgura. Podemos
informar a la compañía SchokoLeb que las plantas A3 y A5 pueden producir más dentro de este
plan de producción.
Solina: Me gusta. Vamos, pidamos una cita con la compañía e informémosle sobre lo que hemos
averiguado.
(→Ej.1.18-19 y Ejercicios Adicionales (ver CD) 1.76-)
Ejercicios
Ej.1.18 Una compañía de papel manufactura tres diferentes tipos de papel. Además hay dos
máquinas diferentes disponibles, cada una de ellas puede producir ambos tipos por sí misma
(cada hoja de papel se termina cuando ha ido a lo largo de una máquina, a lo largo de la misma).
Las máquinas pueden producir las siguientes cantidades:
Máquina 1 Máquina 2
Toneladas por hora Toneladas por hora
2
Papel de 60 g/m 53 52
2
Papel de 80 g/m 51 49
2
Papel de 120 g/m 52 45
Estudios de mercado revelan que se pueden vender, a lo más, las siguientes cantidades por
2 2
mes: Papel de 60 g/m : 30000 toneladas, papel de 80 g/m : 20000 toneladas, y papel de 120
2
g/m : 12000 toneladas.
Aparte de esto, debido al mantenimiento de las plantas y los trabajos de reparación, la máquina
1 y la máquina 2 tienen 672 y 600 horas disponibles de trabajo al mes respectivamente.
¿Qué cantidad de papel debería producir y con qué máquina para conseguir el máximo beneficio
posible?
Ej.1.19 Una aleación de aluminio tiene que satisfacer, basándose en reglas legales, las
siguientes demandas:
Máxima cantidad en g Mínima cantidad en g
en un lingote de 2000g en un lingote de 2000g
Aluminio Sin límite 1500
Silicio 300 250
Hierro 160
Magnesio 70
Durante la producción no se usarán metales puros sin procesar. Por razones medioambientales
en lugar de usarlos se utilizarán desechos de metal que están compuestas de:
Contenido Contenido Contenido Contenido Contenido
en la en la en la en la en la
sustancia sustancia sustancia sustancia sustancia
(Desecho de (Desecho de (Desecho de (Desecho de (Desecho de
aluminio) silicio) tipo 1) tipo 2) tipo 3)
en % en % En % en % en %
Aluminio 0,97 0,00 0,70 0,75 0,80
Silicio 0,01 0,97 0,02 0,06 0,06
Hierro 0,02 0,03 0,18 0,09 0,10
Magnesio 0,00 0,00 0,10 0,10 0,04
Debido a regulaciones de reciclado se tienen que usar al menos 400 gr de desechos de tipo 3
por lingote. Si no, aquí se presentan las cantidades disponibles para la producción de 1000
lingotes.
Desecho de Desecho de Desecho Desecho Desecho
aluminio Silicio de tipo 1 de tipo 2 de tipo 3
Cantidad en kg Sin límite Sin límite 200 750 Sin límite
Precio en
210 380 30 80 170
euros/kg
Mediante el método de Gauss podemos ver si este sistema tiene solución o no. Echemos un
vistazo al ejemplo (los elementos pivote están otra vez en un cuadro azul).
Ejemplo 1.13:
2 1 0 1 1 1
0 1 1 1 0 1
2 2 2 2
(MB e1 ) = 0 0 1 0 → 0
0 1
0 → 0 0 1 0
2 0 0 0 2 0 0
0 0 −1
0 −1
1 1 0 1 1 12 0 12 1 0 0 0
2 2
→ 0 0 1 0 → 0 1 0 1 → 0 1 0 1
0 1 0 1 0 0 1 0 0 0 1 0
1 1
2 1 0 0 1 2
0 0 1
2
0 0
(MB e2 ) = 0 0 1 1 → 0 0 1 1 → 0 0 1 1
2
0 0 0 2 0 0 0 0 −1 0 0
.
1 1 0 0 1 1 0 0
2 2 1 0 0 0
→ 0 0 1 1 → 0 1 0 0 → 0 1 0 0
0 1 0 0 0 0 1 1 0 0 1 1
43
1
0 0 1 1
2 1 0 0 1 2 2
0 0
(MB e3 ) = 0 0 1 0 → 0
0 1 0 → 0 0 1 0
2
0 0 1 2 0 0 1 0 −1 0 1
1 1 0 0 1 12 0 0 1 0 0 1
2 2
→ 0 0 1 0 → 0 1 0 −1 → 0 1
0 −1
0 1 0 −1 0 0 1 0 0 0 1 0
Aquí aplicaremos las siguientes operaciones básicas con filas en matrices ampliadas (que
naturalmente no altera el sistema de ecuaciones):
- Dividir la primera ecuación por 2.
- Restar dos veces la primera ecuación a la tercera.
- Dividir la tercera ecuación por (-1).
- Intercambiar la segunda con la tercera ecuación.
- Restar la segunda ecuación multiplicada por (1/2) a la primera.
El resultado de esas operaciones es el vector solución, marcado en rojo en la última columna. Se
puede comprobar que esos vectores efectivamente resuelven los sistemas de ecuaciones:
0 2 1 0 0 1
M B 1 = 0 0 1 1 = 0 = e1 ,
0 2 0 0 0 0
0 2 1 0 0 0
M B 0 = 0 0 1 0 = 1 = e2 ,
1 2 0 0 1 0
1 2 1 0 1 0
2 2
M B −1 = 0 0 1 −1 = 0 = e3 .
1 2 0 0 0 1
Unamos los tres vectores solución en una matriz,
0 0 1 2
1 0 −1
0 1 0
y de esta forma, multiplicando M B con esta matriz, obtenemos la matriz identidad I:
2 1 0 0 0 1 2 1 0 0
0 0 1 1 0 −1 = 0 1 0 =: I .
2 0 0 0 1 0 0 0 1
-1
Llamaremos a la matriz roja matriz inversa o simplemente inversa de MB y la notaremos MB .
Debido a que usamos las mismas operaciones primarias con filas al identificar las columnas
MB -1, dentro del método de Gauss podemos añadir todos los vectores unitarios, la matriz I, al
44
mismo tiempo, y cambiar tres pasos del ejemplo 1.13 por uno. De esta forma tenemos el
siguiente algoritmo para calcular la matriz inversa de una matriz cuadrada B.
Ejemplo 1.14:
-1
Repetiremos los cálculos de MB del ejemplo 1.12 siguiendo el algoritmo 1.4:
2 1 0 1 0 0 1 1
2 0 1
2 0 0 1 1
2 0 0 0
1
2
(MB I)= 0 0 1 0 1 0 → 0 0 1 0 1 0 → 0 0 1 0 1 0
2 0 0 0 0 1 2 0 0 0 0 1 0
−1 0 −1 0 1
1 1
2 0 1
2 0 1 0 1
2 0 1
2 0 0
→ 0 0 1 0 1 → 0 0 1 0 1 0 −1 .
1 0
0 1 0 1 0 −1 0 0 1 0
1 0 0 0 0 12
→ 0 1 0 1 0 −1 = I M B −1 ( )
0 0 1 0 1 0
Hemos conseguido calcular la inversa de B con más eficiencia que en el ejemplo 1.13.
Ejemplo 1.13:
Ahora queremos ver que pasa con el algoritmo si MB no es invertible.
1 1
1 2
1 0 0
2
4 0 2 1 0 0 2 1 2 0 0 1
(MB I ) = −2 1 0 0 1 0 → −2 1 0 0 1 0 → −2 1 0 0 1 0
2 1 2 0 0 1
4 0 2 1 0 0
4 0 2 1 0 0
45
1 1 1 1 1 1
1 2 1 0 0
2 1
2
1 0 0
2 1
2
1 0 0
2
1 1 1 1
→ 0 2 2 0 1 1 → 0 1 1 0 → 0 1 1 0 .
2 2 2 2
0 −2 −2 1 0 −2 0 −2 −2 1 0 −2 0 0 0 1 1 −1
En este punto podemos finalizar el algoritmo, ya que solo hay ceros en la última fila de la parte
izquierda de la matriz. Es por tanto imposible transformar el lado izquierdo de la matriz en una
matriz unitaria. Por tanto MB no es invertible.
Ejercicios
Ej.1.20 Calcular las inversas de las siguientes matrices (cuando sea posible).
−4 0 5 8 −4 −9
a) A = , b) B = , c) C = ,
1 8 6 −1 16 36
5 8 2 5 9 1 1 −6 −8
d ) D = −6 2 1 , e) F = 1 2 3 , f ) G = 0 −2 7 .
8 0 1 4 7 −2 −7 −6 3
Dentro del método del Simplex se puede ver el óptimo en la fila superior de la tabla Simplex: si
todas esas entradas tiene valor igual o mayor que cero (y también se cumple esto para todas las
entradas de la última columna), hemos obtenido una solución óptima básica factible (ver la
sección 1.6). En esta sección veremos que el criterio de optimalidad puede ser formulado en
función de matrices inversas.
Por este motivo observaremos el conjunto de índices B compuesto por m columnas de la matriz
M. Este conjunto de índices divide la matriz M y los vectores c y x en dos partes, es decir
aquellos elementos en los que el índice está en el conjunto B y aquellos en los que está en el
conjunto restante N := {1,…,n+m} \ B. Por consiguiente podemos escribir M, c y x como M =
(MB,MN), c = (cB,cN) y x = (xB,xN), y tanto la función objetivo como las restricciones en su
correspondiente forma particionada:
c , x = cB , xB + c N , x N
Mx = M B xB + M N xN = b
xB = M B −1b − M B −1M N xN .
(→Ejercicios adicionales (ver CD) 1.57-58)
-1 -1
Si se pone xN = 0 en esta descripción básica, entonces xB = MB b. x = (xB,xN) = (MB b,0), por lo
que x es una solución básica. Este concepto de solución básica es el mismo que se introdujo en
la sección 1.6. Esto se hace obvio si se considera que el método de Gauss resuelve un sistema
-1 -1
de ecuaciones mediante la transformación (MB | b) ( I | MB b) por operaciones de pivotaje.
Ejemplo 1.16:
Echemos un vistazo a los datos del pequeño problema de SchokoLeb
c = (−30 −50 0 0 0)
3 2 1 0 0 18
M = 1 0 0 1 0, b = 4
0 2 0 0 1 12
Para B = {1,4,2}
3 0 2 1 0
M B = 1 1 0, M N = 0 0
0 0 2 0 1
c B = (c1 c4 c2 ) = (−30 0 −50), cn = (c3 c5 ) = (0 0)
und
x B = ( x1 x4 x2 ), xn = ( x3 x5 )
-1
Calcularemos la inversa MB mediante el método de Gauss:
3 0 2 1 0 0 1 0 2 1
0 0 1 0 0 1 0 −1
3 3
3 3
1
(MB I)= 1 1 0 0 1 0 → 0 1 − 23 1
−3 1
1 0 → 0 1 0 − 3 1 3
1
0
0 2 0 0 1 0 0 2 0 0 1 0 0 1 0 0 2
1 0 0 13 0 −31
→ 0 1 0 −31 1 13 = I ( M B−1 )
0 0 1 0 0 12
y obtenemos el vector de variables básicas
1 1
3 0 − 3
x1 18 2
−1 1 1
xB = x4 = M B b = − 1 4 = 2 .
x
3 3
2 12 6
0 0 1
2
47
2. cred := c − cB M B −1M ≥ 0 ,
entonces la solución básica, dada por x := (xB, xN) con xN := 0 es una solución óptima del
problema de programación lineal. Los elementos cred := c - cBMB-1M o xB := MB-1b se
corresponden con las entradas de la columna de la derecha de la tabla Simplex.
-1 -1
Para probar este resultado, insertaremos la descripción básica xB = MB b - MB MN xN en la
función objetivo:
c , x = cB , xB + c N , x N
= cB , M B −1b − M B −1M N xN + cN , xN
= cB , M B −1b − cB , M B −1M N xN + cN , xN
= cB , M B −1b + cN , xN − cB M B −1M N , xN
= cB , M B −1b + cN − cB M B −1M N , xN
por lo que se cumple el criterio de optimalidad. Una solución óptima básica se puede obtener
complementando con xN = (x3, x5) = (0,0) las variables x1, x4 y x2 y resulta
( x1 x2 x3 x4 x5 ) = ( 2 6 0 2 0 ) .
(→Ejercicios Adicionales (ver CD) 1.59-60)
48
Las siguientes fuentes de Internet son una pequeña muestra de todo lo que hay disponible.
Estos son mayormente versiones de estudiante o versiones comerciales, que contienen solo un
número relativamente pequeño de variables y restricciones (más o menos 150 restricciones y
200 variables). Estas versiones son suficientes para dar clases o por pequeñas aplicaciones
reales.
LINDO:
http://www.lindo.com/table/downloadt.html
XPRESS:
http://www.dashoptimization.com/student_request.html
registro, después descargar el software libre en
http://www.dashoptimization.com/download/2003c.exe
AMPL:
http://www.ampl.com/DOWNLOADS/index.html
Solución online de problemas de PL mediante Kestrel (=AMPL con solución remota para
problemas más grandes que la versión estudiante) en:
http://www.ampl.com/REMOTE/index.html#localAMPL
Se puede trabajar inmediatamente online (si se ha manejado antes un poco AMPL) en
http://www.ampl.com/TRYAMPL/startup.html
OTROS