Está en la página 1de 49

MaMaEuSch

Management Mathematics for


European Schools
http://www.mathematik.uni-
kl.de/~mamaeusch/

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

CAPÍTULO 1: Planificación de la Producción y


Optimización Lineal

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

Claves – Matemáticas elementales:

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

Notas para los Profesores:


- Las secciones 1.1, 1.4 y 1.8 están escritas en forma de diálogo. Los estudiantes pueden
leerlas como trabajo individual, o puede ser acordado por profesores y estudiantes como
punto de partida para otros estudiantes. Los diálogos representan situaciones que hemos
encontrado en nuestras actividades como asesores.
- En algunas escuelas se realizan los contenidos de las secciones 1.2 y 1.3 como
actividades de nivel medio. Por esta razón vienen escritas de tal forma que los
estudiantes con mejores notas también pueden realizarlas, y usarlas como material de
revisión. Además, la sección 1.2 ofrece una descripción paso a paso y ejercicios sobre el
modelado de problemas económicos mediante programación lineal. Además, los
estudiantes que tienen la posibilidad de usar PowerPoint pueden beneficiarse de
numerosos ejemplos animados y ejercicios que se incluyen en el CD adjunto.
Naturalmente ese material puede ser usado en clases.
- El principal objetivo de las secciones 1.5 y 1.6 es introducir el método Simplex. Por este
motivo se necesita soltura en el uso de matrices, en particular operaciones con filas,
operaciones de pivotaje y el método de Gauss. Por tanto el material apropiado está
integrado en el texto y viene apoyado con ejercicios y ejemplos. En el CD adjunto se
puede encontrar material adicional con soluciones a los ejercicios. La prueba formal de la
validez del método del Simplex puede ser difícil de entender por parte de los estudiantes.
Aún así, el desarrollo del método no creará problemas si se entienden los conceptos de
matrices anteriormente mencionados.
- El Apéndice A contiene la explicación del método de Gauss para el cálculo de matrices
inversas. Los estudiantes con mayor interés tienen la oportunidad de realizar este método
para comprobar la condición de optimalidad (véase el Apéndice B).
- El Apéndice C ofrece diferentes fuentes de Internet que pueden ser de utilidad para los
estudiantes, tanto en clase como en casa. Y más importante es que se pueden encontrar
direcciones de Internet en las que hay material online para practicar.

1.1 Discusión: Planificación de la producción en la compañía SchokoLeb.

El fin de semana se ha terminado y la mayoría de la gente comienza su semana con una


atareada mañana de Lunes. En la oficina de Clever-Consulting la cosa no es muy diferente.
Sebastián está instalando nuevos programas en su ordenador. Natalia está ordenando su mesa.
Solina está alterada y enfadada con los nuevos cambios de precios. Y Oliver está hablándole a
todo el mundo de la fiesta del sábado.

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.

Documento interno sobre la Reunión de Contacto con la compañía SchokoLeb


30 de febrero de 2003

Comienzo: 9:30 a.m.

Final: 11:00 a.m.

Participantes: Natalia, Oliver, Sebastián (Clever Consulting)


Ms. Sorrati, Mr. Werkstoll y Mr. Ritter (SchokoLeb)

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

Durante el periodo de reorganización, el departamento de marketing averiguó los números de ventas


de los viejos productos y de los que iban a ser introducidos. Por lo tanto se asume que uno debe saber
cuantas unidades de chocolate y cuantas unidades de cacao se pueden vender en el mercado. Además
también se determinó que beneficio se puede obtener por cada unidad producida.
A la administración le gustaría ahora saber cuantas unidades de cada producto se deben producir
teniendo en cuenta la capacidad de producción de la maquinaria.

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

Natalia: Ya me lo pregunté cuando Sebastián y yo estuvimos redactando el documento. El


problema completo es increíblemente complicado. Aunque estamos mirando a sólo 10 productos
de cacao, hay infinitas posibilidades para cambiar la producción de SchokoLeb. Sin embargo
pienso que podemos afrontar el problema con un método, llamado optimización lineal.
Solina: En cualquier caso, deberíamos hacer que SchokoLeb nos haga un contrato por la
preparación para la investigación. De esta forma conseguiremos un poco de dinero mientras
pensamos.
Sebastián: Imposible, ¡olvídalo! Ya lo hemos preguntado varias veces y eso era – según Ms.
Sorrati y Mr. Werkstoll – demasiado. Querían saber si podíamos, gastándose poco dinero,
encontrar algo que les fuera de utilidad.
Natalia: Creo que primero deberíamos echarle un vistazo a una muestra con menos datos.
Digamos, una con dos productos y tres plantas.
Oliver: De acuerdo. Sugiero que unamos nuestras ideas y aumentemos nuestros conocimientos
sobre el tema. Después de eso trabajaremos en el ejemplo pequeño y trataremos de resolver el
problema. Luego comprobaremos si hemos entendido el método y nos centraremos en la
muestra que nos dio Ms. Sorrati.
Natalia: Creo que es una buena idea. Deberíamos asignar tareas y escribir todo lo que
averigüemos. Para el memorando siempre podemos seleccionar lo que queremos que
SchokoLeb sepa. Yo buscaré mis apuntes de la carrera sobre optimización lineal, y cualquier
cosa que necesitéis saber sobre matemáticas.
Solina: Yo comenzaré trabajando en el ejemplo pequeño.
Sebastián: Yo buscaré en Internet, a ver que puedo encontrar. Quizás podamos usar programas
que estén disponibles gratis, al menos para la preparación de la investigación.
Oliver: Creo que es un buen plan. Estaré a tu disposición para lo que necesites y compondré el
memorando.

1.2 Método gráfico para problemas con dos productos

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

contribuyen a la producción de esos productos tienen exceso de capacidad. En la primera planta


se limpian los granos de cacao, se tuestan y se muelen. Esta planta es necesaria para la
producción de ambos productos. En las otras dos plantas se refinan los granos de cacao y se
convierten en polvo y chocolate. La compañía piensa que los productos se deben vender en
grandes cantidades y espera, después de deducir todos los costes, un beneficio de 30 euros por
50 Kg de cacao en polvo y 50 euros por 100 Kg de chocolate. ¿Cuánto cacao en polvo y
chocolate se debe producir para conseguir el mayor beneficio posible?

Cuando modelamos, en otras palabras, cuando creamos un modelo algebraico, necesitamos


pensar en unidades de 50 Kg para el cacao en polvo y unidades de 100 Kg para el chocolate.
Por esta razón trabajaremos con variables de decisión x1 y x2, donde x1 representa el número
de unidades del primer producto (cacao en polvo) y x2 representa el número de unidades del
segundo producto (chocolate), que deberían ser producidas. Por ejemplo, x1 = 5 y x2 = 3 significa
que producimos 250 Kg ( = x1 · 50 Kg = 5 · 50 Kg) de cacao en polvo y 300 Kg (= x2 · 100 Kg = 3
· 100 Kg) de chocolate.
Usando la función objetivo 30 · x1 + 50 · x2 se calcula el beneficio dependiendo de esas
variables de decisión. Como ejemplo veamos el plan de producción anterior, es decir x1 = 5 y x2
= 3, y calculemos el beneficio mediante 30 · x1 + 50 · x2 = 30 · 5 + 50 · 3 = 300 euros. El número
300 (sin definirlo en términos de euros) es el valor de la función objetivo para x1 = 5 y x2 = 3
(→Ej.1.1 y Ejercicios Adicionales (ver CD) 1.21).

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.

¿Cómo es eso? La cuestión de la factibilidad depende de si la capacidad necesaria para la


producción es alcanzada por las tres plantas. Esto puede ser presentado en forma de
inecuaciones o restricciones:

3 · x1 + 2 · x2 ≤ 18,
1 · x1 + 0 · x2 ≤ 4,
0 · x1 + 2 · x2 ≤ 12.
8

Buscamos un plan de producción – expresado a partir de las variables de decisión x1 y x2 – que


cumpla todas las restricciones al mismo tiempo. Las dimensiones de los valores (en este caso la
dimensión %) se han quitado en ambos miembros de las desigualdades, porque no eran
necesarias.

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:

Maximizar la Función Objetivo 30 · x1 + 50 · x2

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.

O la versión para los perezosos:


9

Problema Lineal (PL)


max 30 · x1 + 50 · x2
s.a.
3 · x1 + 2 · x2 ≤ 18,
1 · x1 + 0 · x2 ≤ 4,
0 · x1 + 2 · x2 ≤ 12,
x 1, x 2 ≥ 0 .
De esta forma todo parece claro. Aún así, esto solo es de utilidad si somos capaces de resolver
el problema de producción inicial. Por esta razón buscaremos un par (x1 | x2), que sea factible (es
decir, que cumpla tanto las restricciones como las restricciones de signo) y que nos asegure el
máximo beneficio.

Para responder esta pregunta, primero usaremos un poco de geometría:

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,

pueden ser simplificadas, y queda

x1 ≤ 4,
2 · x2 ≤ 12, i.e. x2 ≤ 6 .

que también se pueden representar gráficamente (ver Figura 1.1).

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

Figure 1.1 Región factible de LP

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 .

En la Figura 1.2 se puede ver como es para diferentes valores de z.

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

· x1 + 50 · x2. La combinación de productos x1 = 3 y x2 = 0 (es decir 3 unidades = 150 Kg de


cacao en polvo y nada de chocolate) da éste beneficio, porque el punto (x1 | x2) = (3 | 0)
pertenece a esa recta. Ese mismo caso tenemos cuando producimos la combinación x1 = 1 y x2
= 1.2 (es decir, 1 unidad = 50 Kg de cacao en polvo y 1.2 unidades = 120 Kg de chocolate).
Todos estos puntos situados en las rectas y al mismo tiempo en la región factible de PL se
corresponden con el mismo beneficio, z = 90 euros. Gráficamente hablando, los puntos factibles
representan la intersección entre las rectas y la región factible. Otras rectas que se corresponden
con beneficios
150 = 30 · x1 + 50 · x2 ,
250 = 30 · x1 + 50 · x2 ,

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).

Al expresar z de la forma z = 30 · x1 + 50 · x2 se puede reconocer el beneficio muy fácilmente,


porque éste permanece aislado en uno de los miembros de la ecuación lineal. En la expresión
equivalente, que es la ecuación estándar de una recta,
30 z
x2 = − x1 + ,
50 50
ya no está tan claro cual es el valor del beneficio. Aún así, echemos un vistazo otra vez a las
ecuaciones de la Figura 1.2 en forma estándar. En esta forma queda claro que todas las
ecuaciones, independientemente del beneficio z, tienen la misma pendiente, en este caso -30/50.
Para alcanzar el beneficio máximo, tendremos que encontrar la recta, de entre las rectas
paralelas, para la que se tenga, por un lado el valor de z más alto posible, y por el otro que la
intersección entre dicha recta y la región factible sea no vacía. Esto significa que trasladaremos
la línea recta en la dirección en la que z crezca, hasta el punto donde un cambio más nos
obligaría a salirnos de la región factible. En nuestro ejemplo se puede ver que podemos hacer
esta operación hasta que la recta cruce el vértice (x1* | x2*) = (2 | 6) (ver Figura 1.3). Este es el
punto en el que la función objetivo alcanza el valor z = 360. La función objetivo no puede tomar
un valor más alto porque todas las rectas que están por encima no tienen ningún punto de
intersección con la región factible. Por lo tanto recomendaremos a la compañía SchokoLeb una
solución óptima, que es producir x1* = 2 unidades (= 100 Kg) de cacao en polvo y x2* = 6
unidades (= 600 Kg) de chocolate. De esta forma se obtiene un beneficio de z* = 360 euros.

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 ,

(en el problema pequeño de SchokoLeb c1 = 30 y c2 = 50). Llamaremos a c1 y c2 coeficientes


de la función objetivo. Ahora queremos maximizar la función objetivo, es decir, queremos
incrementar el valor de la función objetivo z = c1 · x1 + c2 · x2 tanto como sea posible (→Ej.1.6
y Ejercicios Adicionales (ver CD) 1.26).

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

a11 = 3, a12 = 2, b1 = 18,


a21 = 1, a22 = 0, b2 = 4,
a31 = 0, a32 = 2, b3 = 12.
13

Por lo tanto podemos resolver un problema de programación lineal (o problema de optimización


lineal) con el algoritmo 1.1.
Al escribir el algoritmo anterior omitimos – es práctica común en matemáticas – los signos de

Algoritmo 1.1: Método grafico de resolución de problemas de


programación lineal con dos variables

Entrada: Problema lineal de esta forma


max c1 x1 + c2 x2
sujeto a : .
a11 x1 + a12 x2 ≤ b1
a21 x2 + a22 x2 ≤ b2

am1 x1 + am 2 x2 ≤ bm
x1 , x2 ≥ 0
Salida: Solución óptima (x1* | x2*) con valor óptimo de lal función objetivo
z*.

Paso 1: Para i = 1,…,m dibujar las rectas ai1 x1 + ai2 x2 = bi y las


respectivas regiones ai1 x1 + ai2 x2 ≤ bi.
Paso 2: Determinar la región de factibilidad como el poliedro P,
determinado como la intersección de los semiplanos ai1 x1
+ ai2 x2 ≤ bi y x1, x2 ≥ 0.
Paso 3. Elegir un número z y dibujar la recta c1 x1 + c2 x2 = z.
Paso 4: Trasladar paralelamente esa recta de tal forma que el valor
de z crezca. Hacerlo hasta que se alcanze el valor z =: z*,
hasta que la recta c1 x1 + c2 x2 = z* sólo toque al poliedro
P en un punto, es decir que el poliedro debe estar
completamente en uno de los lados de dicha recta.
Paso 5: Dar como salida el punto (x1* | x2*), uno de los vértices en
los que la recta c1 x1 + c2 x2 = z toca al poliedro.

multiplicación. Haremos lo mismo en el transcurso de este capítulo para evitar malentendidos. A


partir del Algoritmo 1.1 se pueden enunciar los siguientes resultados de importancia:

Teorema fundamental de la programación lineal (para 2 variables de decisión):


Si el problema lineal tiene una solución óptima, siempre hay un vértice (x1* | x2*) de la
región factible que es óptimo.

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)

(→Ej.1.7 y Ejercicios Adicionales (ver CD) 1.27)


15

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.

¿Se cumple que Calcular el valor de la


3·x1 + 2·x2 ≤ 18 función objetivo
X1 x2
1·x1 + 0·x2 ≤ 4 30·x1 + 50·x2
0·x1 + 2·x2 ≤ 12?

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

Ej.1.7 Encontrar una solución para los siguientes PL


a ) max x2 b) max 2 x1 + 8 x2
sujeto a : sujeto a :
− x1 + x2 ≤ 1 − 126 x1 + 120 x2 ≤ 126
x1 + x2 ≤ 3 126 x1 + 132 x2 ≤ 756
x1 , x2 ≥ 0 x1 , x2 ≥ 0
Cuando resuelvas estas cuestiones sigue los pasos del algoritmo 1.1. Dibuja una línea recta que
represente la función objetivo z = c1 x1 + c2 x2 en a) y b) para z = 1 y z = 16. Determina la
dirección en la que la función objetivo crece y finalmente trata de encontrar una solución óptima
en el paso 4.

La solución a estos ejercicios y las transparencias de PowerPoint, así como más ejercicios, se
pueden encontrar en el CD adjunto.

1.3 Determinar la mejor solución mediante sistemas de ecuaciones con


dos variables

En los ejemplos anteriores intentamos determinar la solución óptima utilizando únicamente


geometría. En el ejercicio 1.7 b) se vio que a menudo es difícil obtener exactamente la solución
óptima a partir de un dibujo. En el transcurso de este capítulo veremos que se puede ir de la
geometría a los métodos de cálculo, los cuales principalmente se apoyan en conceptos de
álgebra lineal. Esto puede ser implementado en ordenadores, sin tener que dibujar los gráficos.
Por consiguiente, en esta sección mostraremos primero como podemos calcular la solución
óptima si sabemos, basándonos en la traslación de la recta de la función objetivo, en qué vértice
está situado.

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

-126x1 + 120x2 = 126,


126x1 + 132x2 = 756.

Por lo tanto obtendremos la solución óptima cuando resolvamos el sistema de ecuaciones


anterior, con dos ecuaciones y dos incógnitas. Podemos suponer que sabemos como resolver
estas ecuaciones. Aún así repasaremos un poco los métodos necesarios. Al sumar ambas
ecuaciones obtenemos (-126 + 126) x1 + (120 + 132) x2 = (126 + 756), por lo tanto 252 x2 = 882
o x2 = 882/252 = 3,5 = 7/2. Insertando este valor en una de las ecuaciones originales, por
ejemplo la primera, obtenemos -126 x1 + 120 · 3,5 = 126, es decir -126 x1 = 126 - 120 · 3,5 =
126 – 420 = -294, por lo tanto x1 = -294/-126 = 7/3.

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

-1 126x1+132x2 < 756

126x1+132x2=756
-2

Figura 1.5 Aplicación del algoritmo 1.1 para calcular la solución del ejercicio 1.7 b).

Como ejemplo adicional tomaremos el pequeño problema SchokoLeb

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.

1.4 Continuación de la discusión: Planificar la producción con más de dos


productos

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

1.5 Optimización lineal y matrices

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.

se emplea el vector de la función objetivo


c = (c1 c2 ) = ( 30 50 ) ,
los coeficientes de la matriz
 a11 a12   3 2
   
A =  a21 a22  = 1 0
a
 31 a32   0 2 
y el vector de capacidades
 b1   18 
   
b =  b2  =  4  .
 b   12 
 3  

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

(→Ejercicios Adicionales (ver CD) 1.43-44)

La multiplicación de matrices entre la matriz de coeficientes A y el vector de decisión x se


realiza de la siguiente forma
 a11 a12   a11 x1 + a12 x2 
   x1   
Ax =  a21 a22    =  a21 x1 + a22 x2  .
a x
 2  a x + a x 
 31 a32   31 1 32 32 

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 

(→Ejercicios Adicionales (ver CD) 1.45-50)

Si consideramos la inecuación vectorial


 b1 
 
Ax ≤ b =  b2 
b 
 3
x≥0
quiere decir que tres inecuaciones

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:

max < c , x >


sujeto a :
,
Mx = b
x≥0
donde M = (A | I) es una matriz de coeficientes con m filas y m+n columnas, y sus últimas m
columnas son vectores unitarios
 1  0  0 0
       
 0  1  0 0
e1 =  0  , e2 =  0  , e3 =  1  ,⋯ em =  0  ,
       
⋮ ⋮ ⋮ ⋮
 0  0  0  
      1
que consecuentemente forma una matriz unidad
1 0 0 ⋯ 0
 
0 1 0 ⋯ 0
I = 0 0 1 ⋯ 0 .
 
⋮ ⋮ ⋮ ⋯ ⋮
0 0 0 ⋯ 1 

El problema tiene n variables de decisión x1,…,xn y m variables de holgura xn+1,…,xn+m.

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)

Casi hemos alcanzado ya la forma estándar de un problema de programación lineal, de la que


Natalia nos habló. La única diferencia es que en la forma estándar hay que minimizar en lugar de
maximizar. Aún así, esto se puede lograr cambiando los signos de los coeficientes de la función
objetivo. Es cierto, claramente, que:

minimizar < c , x > = - maximizar < (-c) , x > .


23

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)

La forma estándar de un problema de programación lineal se define así:

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

Ej.1.12 Escribir los siguientes problemas de programación lineal en su forma estándar.

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

1.6 Resolver problemas de programación lineal con el método del Simplex

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.

Dada una matriz, veamos tres operaciones básicas con filas:

Zi := kZi : Multiplicación de una fila. Todas las componentes de la fila Zi se multiplican por
un número k.

Zi ↔ Zk : Intercambiar las filas Zi y Zk.

Zk := Zk+kZi : Sumar k veces la fila Zi a otra fila Zk.

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:

- Dividiendo la i-ésima fila por el elemento pivote mij, i.e. Zi := (1/mij) Zi

- Eliminando todas las componentes de la columna j excepto la i-ésima: Zk := Zk – mkjZi

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

En la primera matriz m22 es el elemento de pivotaje, es decir, la fila de pivotaje es la fila 2 y la


columna de pivotaje es la columna 2. En la segunda matriz el pivote es m33, es decir, la fila pivote
es la 3 y la columna pivote es la 3.

Usando operaciones de pivotaje se pueden resolver fácilmente sistemas de ecuaciones, que


usualmente aparecen en problemas de programación lineal. En los siguientes ejemplos
echaremos un vistazo a esto.

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

3x1+ 6x2+ 12x4+ 3x5 = 12,


2x1+ 4x2+ 1x3+ 10x4+ 2x5 = 9.

La matriz de coeficientes M y el vector b, el lado derecho de las inecuaciones, describen


 3 6 0 12 3 12 
(M b) =  
 2 4 1 10 2 9 
de forma compacta los datos del sistema de ecuaciones.

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).

Algoritmo 1.2: Método de Gauss para sistemas de ecuaciones

Entrada: Sistema de ecuaciones lineales, dado a partir de su matriz


ampliada (M| b).

Salida: Solución del sistema de ecuaciones Mx = b o prueba de


que dicho sistema no tiene solución.

Paso 1 Comienzan las operaciones de pivotaje en la primera


columna, de tal forma que se creen tantos vectores
unitarios como sea posible.
Paso 2 Nombrar a la matriz ampliada resultante ( M ’| b’ ).
Paso 3 Dar a cada una de las variables del vector unitario i el valor
i-ésimo del vector b’ y cero a las otras.
Paso 4 O el vector x producido de esa forma es el vector solución
del sistema, o no existe solución.
27

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.

(→ Ejercicios Adicionales (ver CD) 1.51-52)

La solución en el ejemplo 1.10 se obtiene de la siguiente forma:

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).

Teorema fundamental de la programación lineal:


Para cada problema de programación lineal que tenga una solución óptima, existe
siempre una que contiene a una solución básica factible.

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.

Al crear un teorema fundamental, hemos reducido el problema de encontrar la mejor solución


factible de un problema de programación lineal entre infinitas de dichas soluciones, a hacerlo
entre un número limitado de soluciones básicas factibles. Aún así, desafortunadamente, hay
demasiadas de esas soluciones básicas, porque si elegimos m columnas de entre n+m posibles,
tenemos

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  (n + m)! (n + 1)(n + 2)...(n + m)


Cn(n + m, m) :=  = = ,
 m  m! n! m!
muchas posibilidades y el número sigue creciendo muy rápidamente, como se ve en la tabla 1.3.

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

Para cada una de esas posibilidades tendríamos que comprobar adicionalmente,


- si podemos transformar las m columnas en m diferentes vectores unitarios mediante
operaciones de pivotaje,
- si todos los valores de las variables son ≥ 0 y
- cual de las soluciones básicas factibles obtenidas de esta forma es la que da el menor
valor de la función objetivo.

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:

- los vectores unitarios de M pertenecientes a x o x’ difieren en exactamente una columna


(i.e., exactamente una columna es cambiada durante la transición de x a x’). Se dice que
x ‘ es una solución básica factible adyacente a x .

- 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.

Veamos esto en el pequeño problema de SchokoLeb.

Ejemplo 1.11:
30

Cuando convertimos el pequeño problema SchokoLeb en un problema de programación lineal en


forma estándar (ver los ejemplos 1.2 y 1.4) obtenemos los datos c, M y b, los cuales escribimos
en una matriz, llamada tabla Simplex:
 −30 −50 0 0 0 0
 c 0  3 2 1 0

0 18 
T =   =  ,
M b  1 0 0 1 0 4
 
 0 2 0 0 1 12 
en la cual, aparte de los datos, ponemos un cero arriba a la derecha. Además del separador para
el lado derecho del sistema de ecuaciones, debajo de la fila superior hemos dibujado una línea
que indica que la fila superior de dicha tabla contiene la información sobre la función objetivo.
Ese formato se denomina tabla Simplex si hay m vectores unitarios diferentes situados en la
parte de T que pertenece a la matriz M.

Debido a que hemos transformado un sistema de inecuaciones lineales en un sistema de


ecuaciones lineales empleando variables de holgura, la matriz M ya contiene tres vectores
unitarios, en las columnas 3, 4 y 5, que pertenecen a las variables de holgura. La solución del
sistema de ecuaciones, la solución básica perteneciente a {3,4,5}, es x3-4-5 = (0 0 18 4 12).
Esta solución tiene valor de la función objetivo 0. En la descripción gráfica (ver figura 1.1) esta
solución básica es la equivalente al vértice (0 | 0) del poliedro factible.

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:

 0 −50 0 30 0 120   0 −50 0 30 0 120 


   
0 2 1 −3 0 6  Z1:= 1 2 Z1
 → 0 1 1
2
-3
2 0 3
1 0 0 1 0 4 1 0 0 1 0 4
   
0 2 0 0 1 12  0 2 0 0 1 12 
.
0 0 25 −45 0 270 
 
0 1 2 0 3
1 -3
Z 0 := Z 0 −( −50) Z1 2
 →
Z3 := Z 3 − 2 Z1 1 0 0 1 0 4
 0 0 −1 3 1

6 

31

La nueva solución básica x2-1-5 = (4 3 0 0 6) con valor de la función objetivo -30x1-50x2+0x3+0x4


+0x5 = -270, es por lo tanto otra vez (sin contar con el signo algebraico) igual a la esquina
superior derecha de la tabla Simplex. Otra vez la solución básica se corresponde con el vértice
del poliedro factible, concretamente el vértice (4 | 3), que es otra vez adyacente al vértice anterior
(4 | 0).

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 

La solución básica final es x2-1-4 = (2 6 0 2 0) con valor de la función objetivo -30x1-


50x2+0x3+0x4 +0x5 = -360, que se puede obtener directamente de la matriz anterior. En la figura
1.1 (2 | 6) es el vértice apropiado.

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:

Regla de cambio de base:


- Seleccionar una columna pivote s en la que la entrada de la fila superior es negativa
(tiene que cumplirse eso, porque en otro caso sí se cumple la condición de optimalidad).
- Seleccionar una fila pivote r, concretamente aquella en la que el cociente entre la entrada
de la columna derecha y la entrada de la columna pivote sea no negativo y lo más
pequeño posible (en caso de que no haya cociente no negativo, el valor de la función
objetivo puede ser tan pequeño como queramos, así que el problema no tiene solución).
- El elemento pivote se posiciona en el cruce entre la determinada fila pivote y la columna
pivote.
32

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.

Algoritmo 1.3: Método del Simplex para programación lineal

Entrada: Problema lineal en forma de inecuaciones con bi ≥ 0


para todo i=1,…,m.

Salida: Solución óptima x = (x1 x2 x3 … xn) o conclusión de que


el valor de la función objetivo es ilimitado.

Paso 1 Transformar el problema en forma de inecuaciones en


forma de ecuaciones introduciendo variables de holgura,
y transformar maximización en minimización si es
necesario.
Paso 2 Para el formato simplex inicial introduciremos todas las
entradas:
 t01 t02 t03 ⋯ to, n + m t0, n + m +1 
 
 c 0   t11 t12 t13 ⋯ t1, n + m t1,n + m +1 
T = =
  .
 
 M b  ⋮ ⋮ ⋮ ⋯ ⋮ ⋮

t tm, n + m +1 
 m1 tm 2 tm3 ⋯ tm,n + m
Paso 3 Si t0j ≥ 0 para todo j=1,…,n+m entonces
Salida la solulción básica de este formato y z* = - t0,n+m+1
como valor óptimo de la función objetivo.
En otro caso: Seleccionar una columna con entrada
negativa en la fila superior, i.e. t0s < 0 como columna
pivote.
Paso 4 Si todas las entradas de esta columna son negativas o 0
Salida: El valor de la función objetivo es ilimitado, es
decir, no hay solución óptima.
En otro caso: Seleccionar una fila pivote en la cual el
cociente
ti , m + n +1
≥0
tis
es el mínimo de entre todos los cocientes no negativos.
Paso 5 Elegir la entrada ti,s como elemento pivote y aplicar
operaciones de pivotaje al formato T .
Paso 6 Nombrar al formato después de las operaciones de
pivotaje T otra vez e ir al paso 3.
33

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

Paso 1: Primero transformamos el problema a forma estándar:

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 2: Ahora introduciremos las entradas de la tabla Simplex inicial:


 t01 t02 t03 t04 t05 t06   −2 −3 0 0 0 0
 c 0   t11 t12 t13 t14 t15

t16   3 0 1 0 0 5

T =  = = .
M b   t21 t22 t23 t24 t25 t26   0 5 0 1 0 3
 t t32 t33 t34 t35
 
t36   3 2 0 0

1 10 
 31

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

(→Ej.1.15-17 y Ejercicios Adicionales (ver CD) 1.61-75)

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

Ej.1.16 Dado el siguiente problema en forma de inecuaciones


min − x1
s.a − x1 + x2 ≤ 2
x1 + x2 ≤ 6 .
2 x1 − x2 ≤ 6
x1 , x2 ≥ 0
Encontrar la solución óptima aplicando el Algoritmo 1.3.
Ej.1.17 Encontrar la solución óptima del siguiente problema de programación lineal en forma de
inecuaciones a partir del algoritmo 1.3.
max x3 + x4
s.a 3 x1 + x2 + 2 x3 + x4 ≤ 8
.
2 x1 + x2 + x3 + x4 ≤ 6
x1 , x2 , x3 , x4 ≥ 0

1.7 Perspectivas futuras: Optimización lineal en economía

En 1999 el Departamento de Matemáticas de la Universidad de Kaiserslautern dirigió un estudio


entre compañías de negocios mientras preparaban sus cursos en licenciaturas. Una de las
preguntas que se propusieron en dicho estudio tenía que ver con los métodos comúnmente
usados en economía, que son considerados como parte esencial de la educación matemática
para “problemas de la vida real”. Las respuestas mostraron que la optimización lineal era una de
las favoritas.

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

así como numerosos trabajos de aerolíneas, transporte, etc.

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.

La “invención” de la optimización lineal es atribuida, por la mayoría de los expertos, a tres


personas que contribuyeron decisivamente al desarrollo del método del Simplex. En 1939 L.V.
37

Kantorovich (Rusia) resolvió problemas de planificación y organización mediante la primera


versión del método. Su trabajo no alcanzó divulgación hasta el final de la década de los
cincuenta. Una descripción completa del método del Simplex como la que se introdujo en el
algoritmo 1.3 se puede atribuir a G. B. Dantzig (EEUU), que lo desarrolló mientras trabajaba
como asesor matemático para la US Air Force. Este método fue descubierto de forma
independiente por T.C. Koopmans (Holanda), y lo utilizó para resolver problemas de transporte.
Koopmans fue uno de los que introdujo el término “programación lineal”. Los profesores
Kantarovich y Koopmans recibieron el premio Nobel por sus contribuciones, mientras que el
profesor G. B. Dantzig, que fue considerado por muchos como la persona más importante en la
investigación de problemas lineales, se quedó con las manos vacías.

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 $!)

Hasta 1979 no se tuvo claro si la programación lineal pertenecía a la categoría de problemas P o


si era de dificultad NP. Dos investigadores americanos, V. Klee y G.J. Minty, demostraron en
1972 que el método del Simplex (en un sentido demasiado específico) no es un método eficiente.
Lo consiguieron construyendo un problema en el cual todos los posibles vértices de la región
factible tenían que ser recorridos por el método antes de encontrar la solución óptima. Este
resultado fue sorprendente, en concreto porque el método del Simplex funciona muy bien en la
práctica. En 1979 un investigador ruso, L.G. Khachian, desarrolló un método alternativo para
resolver problemas de programación lineal, el método de la elipsoide, con el que consiguió
demostrar que los problemas de programación lineal son de P.

Desafortunadamente la prensa redujo el problema no trivial “¿P = NP?“ a la conexión entre el


descifrado de códigos secretos y la solución a problemas de programación lineal. El primero es,
de hecho, uno problema de dificultad NP. Los titulares decían que todos los códigos secretos se
podían descifrar si se descubría un método eficiente para resolver problemas de programación
lineal, cosa que se encontró bastante amenazante durante la Guerra Fría (especialmente porque
Mr. Khachian era de la URSS). Aún así, si se mira con atención el problema, se puede
comprobar que esos informes eran totalmente erróneos.

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).

1.8 La solución al problema SchokoLeb

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};

var XX {j in PRODUCTS} >= 0;

minimize total_cost: sum {j in PRODUCTS} CC[j] * XX[j];

subject to constraints {i in PLANTS}:


sum {j in PRODUCTS} MM[i,j] * XX[j] = BB[i];
Tabla 1.5 AMPL Model SchokoLeb.mod
39

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

Oliver: Se puede visualizar la solución al problema usando el comando "solve“. En nuestro


ejemplo la solución es:
40

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

Los costes de producción y precios de venta son los siguientes:


Costes (Máquina 1) Costes (Máquina 2) Precio de venta en
euros por tonelada euros por tonelada euros por tonelada
2
Papel de 60 g/m 76 75 77
2
Papel de 80 g/m 82 80 81
2
Papel de 120 g/m 96 95 99
41

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

Minimizar los costes de producción para un lingote de aluminio de 2000g.


Instrucciones: Después de modelar, para calcular el problema se aconseja usar un programa,
como por ejemplo AMPL. Después de descargar AMPL, abrir el documento sw.exe. Escriba aquí
“ampl“. Se cerrarán todas las entradas con Return. Después de esto, debe aparecer “running
ampl“ en el título superior de la ventana. En la ventana, después de "ampl:” introduzca "model
aluminium.mod;”, y después “data aluminium.dat” (esto es válido, por supuesto, si se nombra a
los datos creados para AMPL (esto es posible por ejemplo con Windows Editor) aluminium.mod y
42

aluminium.dat). Finalmente escriba “solve”. Ahora aparecerá el valor de la función objetivo. La


solución se obtiene usando el comando “display x;“.

Apéndice: Más información

Adjunto A: Operaciones de pivotaje y cálculo de matrices inversas


Consideremos una matriz cuadrada B con m filas y m columnas, y observemos el siguiente
sistema de m ecuaciones:
 z11   z12   z13   z1m 
       
 z21   z22   z23   z2 m 
M B  z31  = e1 , M B  z32  = e2 , M B  z33  = e3 ,…, M B  z3m  = em .
       
 ⋮   ⋮   ⋮   ⋮ 
z  z  z  z 
 m1   m2   m3   mm 
Aquí e1,…,em son los vectores unitarios introducidos antes.

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.

Algoritmo 1.4: Cálculo de inversas

Entrada: Matriz cuadrada MB con m filas y m columnas.


-1
Salida: Matriz inversa MB o prueba de que MB no es invertible.

Paso 1 Añadir la matriz I a la matriz MB.


Paso 2 Aplicar operaciones de pivotaje a la matriz M = (MB | I ),
hasta que la primera parte de la matriz se transforme en la
matriz identidad.
Paso 3 Si eso funciona,
-1
Salida: la segunda parte de la matriz como la inversa MB .
Si no: i.e., si solo se puede generar un número menor que m
de vectores unitarios usando operaciones de pivotaje en la
primera parte de la matriz, MB no es invertible.

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.

(→Ej.1.20 y Ejercicios Adicionales (ver CD) 1.53-54)

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 
     

Adjunto B: Matices inversas y el criterio de optimalidad en el método del Simplex

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

Si las columnas cuyos índices están en B son linealmente independientes, se denomina a la


matriz m x m, MB , como matriz básica. En esta situación xB se denomina vector de las
variables básicas, y xN el vector de las variables no básicas. Se puede detectar la
-1
independencia lineal de MB considerando que MB tiene una inversa MB que puede ser
calculada utilizando, por ejemplo, el método de Gauss (ver adjunto A). Podemos multiplicar la
-1
ecuación MB xB + MN xN = b por MB y obtener la descripción básica de una solución arbitraria x
= (xB,xN) de Mx = b
46

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

Condiciones de optimalidad (condición de la inversa):


Si MB es una matriz básica con las siguientes características:
1. xB := M B −1b ≥ 0 ,

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

Suponiendo que en la condición de optimalidad cred = c – cB MB-1 M ≥ 0 y por tanto cred,N := cN - cB


MB-1 MN ≥ 0, el valor de la función objetivo <c , x> no puede ser mejorado incrementando las
componentes de xN = 0 a valores que son mayores que cero (porque queremos minimizar <c ,
x>). Ya que cada solución de Mx = b está en forma de descripción básica, se verifica la condición
de optimalidad.
CQD
Ejemplo 1.16 (continuación):
Ya al comienzo de este ejemplo nos convencimos de que xB := MB-1b ≥ 0. Aparte de eso, es
válido que cB = (c1 c4 c2) = (-30 0 -50)
 1 1
 3 0 −3
  3 2 1 0 0
 1 1  
cred := c − cB M B −1M = ( −30 −50 0 0 0 ) − ( −30 0 −50 ) − 1  1 0 0 1 0
 3 
3 
   0 2 0 0 1
 0 0 1 
 
 2 
3 2 1 0 0
 
= ( − 30 −50 0 0 0 ) − ( −10 0 −15 )  1 0 0 1 0
0 2 0 0 1

= ( − 30 −50 0 0 0 ) − ( − 30 −50 −10 0 −15 ) = ( 0 0 10 0 15 )

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

Adjunto C: Recursos de Internet

Las siguientes fuentes de Internet son una pequeña muestra de todo lo que hay disponible.

Estudio de casos reales:

Muchos pequeños ejemplos de aplicación de la PL a modelos y su resolución:


http://www.ms.ic.ac.uk/jeb/or/lp.html

Librería de estudios de casos:


http://www-fp.mcs.anl.gov/otc/Guide/CaseStudies/index.html

Aplicaciones de la PL outline (bibliografía comentada):


http://catt.bus.okstate.edu/itorms/volumes/vol1/papers/murphy/index.html#Top

GAMS: Librería de estudios de casos con PL, modelado en lenguaje GAMS:


http://www.gams.com/modlib/modlib.htm
Registro de acuerdo con el tópico:
http://www.gams.com/modlib/libhtml/subindx.htm#agecon

AMPL: Librería de casos estudiados con PL, modelados en lenguaje AMPL:


http://www.ampl.com/EXAMPLES/index.html

SOFTWARE DE OPTIMIZACIÓN GRATUITO

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

Método gráfico con entrada online de datos y función objetivo


http://bridge.ecn.purdue.edu/~yiguo/lp/clientside/
49

OTROS

Practicar con operaciones de pivotaje


http://www.sor.princeton.edu/~rvdb/JAVA/pivot/advanced.html

Resolver problemas de programación lineal mediante operaciones de pivotaje en Excel:


http://www.math.louisville.edu/~t0ried01/simplex.xls

También podría gustarte