Planificación de la Producción y Optimización Lineal

49
Planificación de la Producción y Optimización Lineal Horst W. Hamacher 1 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 MaMaEuSch Management Mathematics for European Schools http://www.mathematik.uni- kl.de/~mamaeusch/

Transcript of Planificación de la Producción y Optimización Lineal

Page 1: Planificación de la Producción y Optimización Lineal

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

MaMaEuSch

Management Mathematics for European Schools

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

Page 2: Planificación de la Producción y Optimización Lineal

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

Page 3: Planificación de la Producción y Optimización Lineal

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.

Page 4: Planificación de la Producción y Optimización Lineal

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.

Page 5: Planificación de la Producción y Optimización Lineal

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?

Page 6: Planificación de la Producción y Optimización Lineal

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

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

Cacao en polvo Chocolate Capacidad disponible (en % de la capacidad

general diaria) Beneficio 30 50

Planta 1 3 2 18 Planta 2 1 0 4 Planta 3 0 2 12

Page 7: Planificación de la Producción y Optimización Lineal

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.

Page 8: Planificación de la Producción y Optimización Lineal

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:

Page 9: Planificación de la Producción y Optimización Lineal

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, x1, x2 ≥ 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).

21 43

4

2

1

x1

x2

3

5

6

x2>0

x1>0

x1 < 4

x1 = 4x2 = 6

x2 < 6

x2 < -3/2 x1 + 9x2 = -3/2 x1 +9

Page 10: Planificación de la Producción y Optimización Lineal

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.

21 43

4

2

1

x1

x2

3

5

6

x2>0

x1>0

z = 150

z = 250

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

Page 11: Planificación de la Producción y Optimización Lineal

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,

2 130

50 50

zx x= − + ,

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.

Page 12: Planificación de la Producción y Optimización Lineal

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

21 43

4

2

1

x1

x2

3

5

6

x2>0

x1>0

z* = 360

(x1* | x2*)

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.

Page 13: Planificación de la Producción y Optimización Lineal

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

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.

Algoritmo 1.1: Método grafico de resolución de problemas de programación lineal con dos variables Entrada: Problema lineal de esta forma

1 1 2 2

11 1 12 2 1

21 2 22 2 2

1 1 2 2

1 2

max

:

, 0m m m

c x c x

sujeto a

a x a x b

a x a x b

a x a x b

x x

+

+ ≤

+ ≤

+ ≤

.

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.

Page 14: Planificación de la Producción y Optimización Lineal

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

1 2

1

2

1 2

1 2

1 2

max 2

:

5

3

2

5

, 0

x x

sujeto a

x

x

x x

x x

x x

− +

− + ≤

+ ≤

.

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.

21 43

4

2

1

x2=0

x1=0

3

5

x2>0

x1>0

-1-2

-1

-2

5

x2 = 3x2 < 3

x1 < 5

x1 = 5

x1+x2=5x1+x2<5

-x1+x2=2

-x1+x2<2

z = -4 = -x1 + 2x2

z = 0 = -x1 + 2x2

z* = 5 = -x1* + 2x2*Contiene a la solución óptima

(x1* | x2*) = (1 | 3)

z = -2 = -x1 + 2x2Solución óptima

(x1* | x

2*) = (1 | 3)

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)

Page 15: Planificación de la Producción y Optimización Lineal

15

Ejercicios

Ej.1.1 Determinar el valor de la función objetivo (f.o.) para los siguientes valores de x1 y x2.

Ej.1.2 Decidir si los siguientes planes de producción determinados por x1 y x2 son factibles.

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?

x1 X2 Valor de la f.o.: 30 · x1 + 50 · x2

2 3 4 1 8 2 15 23 120 0

X1 x2

¿Se cumple que 3·x1 + 2·x2 ≤ 18 1·x1 + 0·x2 ≤ 4

0·x1 + 2·x2 ≤ 12?

Calcular el valor de la función objetivo

30·x1 + 50·x2

2 3,5 2 5,8 2 7

3,5 3,9 -2 6

Page 16: Planificación de la Producción y Optimización Lineal

16

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

2

1 2

1 2

1 2

) max

:

1

3

, 0

a x

sujeto a

x x

x x

x x

− + ≤

+ ≤

1 2

1 2

1 2

1 2

) max 2 8

:

126 120 126

126 132 756

, 0

b x x

sujeto a

x x

x x

x x

+

− + ≤

+ ≤

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

Page 17: Planificación de la Producción y Optimización Lineal

17

21 43

4

2

1

x2=0

x1=0

3

5

x2>0

x1>0

-1-2

-1

-2

5

-126x1+120x2=126

-126x1+120x2 < 126

1 2

1 2

1 2

1 2

max 2 8

126 120 126

126 132 756

, 0

x x

unter den Nebenbedingungen

x x

x x

x x

+

− + ≤

+ ≤

126x1+132x2=756

126x1+132x2 < 756

z = 16 = 2x1 + 8x2

z* = 32 2/3 = 2x1 + 8x2Contiene a la solución óptima

(x1* | x2*) = (7/3 | 7/2)

Solución óptima

(x1* | x2*) = (7/3 | 7/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, x1, x2 ≥ 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.

Page 18: Planificación de la Producción y Optimización Lineal

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.

Page 19: Planificación de la Producción y Optimización Lineal

19

1.5 Optimización lineal y matrices

Cuando uno tiene dos variables de decisión x1 y x2, se pueden integrar en un vector2 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

( )1 2( ) 30 50c c c= = ,

los coeficientes de la matriz

11 12

21 22

31 32

3 2

1 0

0 2

a a

A a a

a a

= =

y el vector de capacidades

1

2

3

18

4

12

b

b b

b

= =

.

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

( ) ( )1 2 1 2 1 1 2 2, , :c x c c x x c x c x= = + .

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

( ) ( )1 2 3 4 5 1 2 3 4 5 1 1 2 2 3 3 4 4 5 5, , :c x c c c c c x x x x x c x c x c x c x c x= = + + + + .

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.

Page 20: Planificación de la Producción y Optimización Lineal

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

11 12 11 1 12 2

121 22 21 1 22 2

231 1 32 3231 32

a a a x a xx

Ax a a a x a xx

a x a xa a

+ = = + +

.

En este caso el vector x viene definido como un vector columna. En el caso SchokoLeb es

1 2

11 2

21 32

3 2 3 2

1 0 1 0

0 2 0 2

x xx

Ax x xx

x x

+ = = + +

.

(→Ejercicios Adicionales (ver CD) 1.45-50) Si consideramos la inecuación vectorial

1

2

3

0

b

Ax b b

b

x

≤ =

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:

1 2 1 2 3

1 2 1 2 4

1 2 1 2 5

3 2 18 3 2 18

1 0 4 1 0 4

0 2 12 0 2 12

x x x x x

x x x x x

x x x x x

+ ≤ → + + =

+ ≤ → + + =

+ ≤ → + + =

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

Page 21: Planificación de la Producción y Optimización Lineal

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:

1 2 3 4 5

1 2 3

1 2 4

1 2 5

1 2 3 4 5

max 30 50 0 0 0

:

3 2 18

1 0 4

0 2 12

, , , , 0

x x x x x

sujeto a

x x x

x x x

x x x

x x x x x

+ + + +

+ + =

+ + =

+ + =

.

En general así es como aparece un problema de programación lineal:

max ,

:

0

c x

sujeto a

Mx b

x

< >

=

,

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 2 3

1 0 0 0

0 1 0 0

, , ,0 0 1 0

0 0 0 1

me e e e

= = = =

⋮ ⋮ ⋮ ⋮

,

que consecuentemente forma una matriz unidad

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

I

=

⋮ ⋮ ⋮ ⋯ ⋮

.

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

(30 50 0 0 0)

3 2 1 0 0 18

1 0 0 1 0 , 4

0 2 0 0 1 12

c

M b

=

= =

.

Ejemplo 1.3:

Consideremos el problema de programación lineal

Page 22: Planificación de la Producción y Optimización Lineal

22

1 2 3

1 2

2 3

1 2 3

1 3

1 2 3

max 7 3 12

:

- 2 4 13

15 9 6

3 7 10 0

5 6 9

, , 0

x x x

sujeto a

x x

x x

x x x

x x

x x x

+ −

− ≤

+ ≤

+ − ≤

− − ≤

Si se escriben las restricciones en forma de igualdad el problema queda así:

1 2 3 4 5 6 7

1 2 4

2 3 5

1 2 3 6

1 3 7

1 2 3 4 5 6 7

max 7 3 12 0 0 0 0

:

- 2 4 13

15 9 6

3 7 10 0.

5 6 9

, , , , , , 0

x x x x x x x

sujeto a

x x x

x x x

x x x x

x x x

x x x x x x x

+ − + + + +

− + =

+ + =

+ − + =

− − + =

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

3 7 10 0 0 1 0

5 0 6 0 0 0 1

M

− − = − − −

y el vector de capacidades es

13

6

0

9

b

=

.

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

Page 23: Planificación de la Producción y Optimización Lineal

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í:

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

1 2 3

1 2 3

1 2 3

1 2 3

3 5 7 5

6 12 3)

7 2 5 16

9 17 14 8

x x x

x x xa

x x x

x x x

+ + ≤

− − ≤ −

+ − ≤

+ − ≤

1 2 3 4

1 2 3 4

1 2 3 4

83 2 43 23 10

) 8 2 23 14 432

43 7 4 5 83

x x x x

b x x x x

x x x x

+ − + ≤

+ − − ≤

− + + ≤

Ej.1.10 Transformar los siguientes problemas de maximización en problemas de minimización.

1 2 3 4

1 2

1 2 3 4

1 2 3 4 5

) max 3 23

) max 23

) max 53 23 42 32

) max 5 2 23

a x x x x

b x x

c x x x x

d x x x x x

+ − +

− + −

+ − + −

Ej.1.11 Transformar los siguientes problemas de maximización en problemas de minimización.

( )

( )

( )

( )

) max 34 28 13 ,

) max 31 98 99 8 ,

) max 82 82 ,

) max 34 13 94 72 83 ,

a x

b x

c x

d x

− − −

− − −

min ,

:

0

c x

sujeto a

Mx b

x

=

Page 24: Planificación de la Producción y Optimización Lineal

24

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

1 2 2

1 2 2

1 2 3

2 3

1 2, 3

) max 3 4

:

7 3 5 18

6 2 10

18 9 9

, 0

a x x x

sujeto a

x x x

x x x

x x

x x x

+ −

+ − ≤

− + ≤

+ ≤

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

1 3 4

1 2 3 4

) min13 20 16 23

:

28 16 8 4 0

23 16 23 13

38 26 18 14 87

35 12

, , , 0

b x x x x

sujeto a

x x x x

x x x x

x x x x

x x x

x x x x

+ + +

− − − ≤

+ + + ≤

+ + − ≤

− + ≤

2

1 2

1 2

1 2

1 2

1 2

) max

:

7 16 9

4 22 27

13 44

14 14 14

, 0

c x

sujeto a

x x

x x

x x

x x

x x

+ ≤

− ≤

− + ≤

+ ≤

1 2 3 4 5 6

1 2 3 4 6

1 2 3 4 5 6

1 3 5

1 2 3 4 5 6

1 2 3 4 5 6

) max 2 3 5 7 11 13

:

17 19 23 29 31 37

9 8 16 15 30 31 62

48 36 12 0

15 16 17 17 16 15 25

, , , , , 0

d x x x x x x

sujeto a

x x x x x

x x x x x x

x x x

x x x x x x

x x x x x x

+ + + + +

− + − − ≤

+ − + − + ≤

− − ≤

+ + − − − ≤

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

1 2 4

2 3 4

1 3 4

1 2 4

1 2 3

) max13 13 16

:

18 9 4,5 36

17 17 17 17

25 5 33 3

18 9 4,5 36

a x x x

sujeto a

x x x

x x x

x x x

x x x

− +

− + ≤

+ + ≤

− − − ≤

+ + ≤

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

) max

:

1

1

1

1

, , , 0

b x x x x

sujeto a

x x x x

x x x x

x x x x

x x x x

x x x x

− − − −

− + + + ≤

− + + ≤

+ − + ≤

+ + − ≤

1 2 3

1 2 3

1 2

2 3

1 2 3

1 2 3 4

) min 2 2

:

18 3 60 99

18 3 99

3 4 5

2 20 6 21

, , , 0

c x x x

sujeto a

x x x

x x

x x

x x x

x x x x

+ −

+ − ≤

+ ≤

+ ≤

+ + ≤

1 2 3 4 5

1 2 3 4 5

1 2 3 5

1 2 3 4 5

2 3 5

1 2 3 4 5

) max 5 4 3 2

:

15 4 5 47 9 26

49 67 7 44 9

98 81 18 84 49 96

6 3 6 991

, , , , 0

d x x x x x

sujeto a

x x x x x

x x x x

x x x x x

x x x

x x x x x

− − − − −

+ − + + ≤

+ − + ≤

+ − + − ≤

+ + ≤

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

Page 25: Planificación de la Producción y Optimización Lineal

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.

11 1 3 3 13

12 3 3 32

3 3 9 6 0 1 1 3 2 0 1 1 3 2 0

0 0 2 0 3 : 0 0 2 0 3 : 2 0 0 2 0 3

2 3 7 5 3 2 3 7 5 3 0 1 1 1 3

1 1 3 2 0 1 1 3 2 0

0 1 1 1 3 : 0 1 1 1 3

0 0 2 0 3 0 0 1 0

Z Z Z Z Z

Z Z Z Z

= = −

↔ =

�������������������������������

����������� �������������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 2

3 32 2

31 1 3 2 2 3 2

33 22

1 1 3 2 0 1 0 2 1 3

0 1 1 3 : 1 0 1 1 1 3

0 0 1 0 0 0 0

1 0 0 1 6 1 0 0 1 6

: 2 0 1 1 1 3 : 1

1

1

0 1 0 1

1 0 0 1 00 0 0

Z Z Z

Z Z Z Z Z Z

= −

− −

= − = −

�����������������

����������������� ������������������

.

Page 26: Planificación de la Producción y Optimización Lineal

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

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

( )3 6 0 12 3 12

2 4 1 10 2 9M b

=

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

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

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

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.

Page 27: Planificación de la Producción y Optimización Lineal

27

Ejemplo 1.8: Consideremos el sistema de ecuaciones del ejemplo 1.7. Resolverlo mediante el método de Gauss:

( )

( )

11 13

2 2 1

6 0 12 3 12 2 0 4 1 4:

2 4 1 10 2 9 2 4 1 10 2 9

1 02 4 1 4: 2 ' '

3

0 2 0

1

0 1 1

M b Z Z

Z Z Z M b

= =

= − =

��������������

�������������������

.

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

03 6 0 12 3 3 4 6 0 0 1 12 0 3 0 12

12 4 1 10 2 2 4 4 0 1 1 10 0 2 0 9

0

0

M x b

⋅ + ⋅ + ⋅ + ⋅ + ⋅ = = = = ⋅ + ⋅ + ⋅ + ⋅ + ⋅

.

Ejemplo 1.9: En este ejemplo observamos como el método puede detectar que un sistema no tiene solución.

2 2 1

3 3 1

122 2 1 1 2

3 3 2

: 2: 1

: : 5

: 1

1 2 1 5 3 12 1 5 3 1

2 4 2 12 2 4 0 0 0 8 2

1 2 1 6 1 4 0 0 0 1 4 3

1 2 1 5 3 1 1 2 1 0 23 4

0 0 0 4 1 0 0 0 1 4 1

0 0 0 1 4 3 0 0 0 0 0 2

1

2

1

Z Z Z

Z Z Z

Z Z Z Z Z

Z Z Z

= −

= −

= = −

= −

− − − −

− → −

− − − − − → →

.

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

1 3 0 5 0 4

0 4 2 11 0 7

M b

=

,

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:

Page 28: Planificación de la Producción y Optimización Lineal

28

( )

( )

123 3

1 1 2

:

7112 2

: 2

7112 2

2 8 0 14 1 102 8 0 14 1 10

1 3 0 5 0 4 3 0 5 0 4

0 2 1 00 4 11 0 7

0 2 0 4 1 2

1 3 0 5 0 4 ' '

0 2 1 0

1

2

Z Z

Z Z Z

M b

M b

=

= −

= →

→ =

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 de la función objetivo.3 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.

Page 29: Planificación de la Producción y Optimización Lineal

29

( )! ( 1)( 2)...( )

( , ) :! ! !

n m n m n n n mCn 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.

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:

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

Page 30: Planificación de la Producción y Optimización Lineal

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 00 3 2 1 0 0 18

1 0 0 1 0 4

0 2 0 0 1 12

cT

M b

− − = =

,

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.

0 0 2

1 1 2

: ( 30): 3

30 50 0 0 0 0 0 50 0 30 0 1203 2 1 0 0 18 0 2 1 3 0 6

1 0 0 1 0 40 0 1 0 4

0 2 0 0 1 120 2 0 1 12

1

0

Z Z Z

Z Z ZT

= − −

= −

− − − − = →

.

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:

121 1

0 0 1

3 3 1

-31: 2 2

-31: ( 50) 2 2

: 2

0 50 0 30 0 120 0 50 0 30 0 120

0 1 3 0 6 0 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 0 3

1 0 0 1 0 4

0 0 1 3 6

1

1

2 Z Z

Z Z Z

Z Z Z

=

= − −

= −

− −

− →

− → −

.

Page 31: Planificación de la Producción y Optimización Lineal

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:

133 3

0 0 33

21 1 3

2 2 3

31312 22 2 :

-1 13 3

1: ( 45) 2: ( ) 1 1

3 3: 1-1 1

3 3

0 0 25 45 0 2700 0 25 45 0 270

0 1 - 0 30 1 - 0 3

1 0 0 1 0 41 0 0 1 0 4

0 0 20 0 -1 1 6

0 0 10 0 15 360

0 1 0 0 6

1 0 0 - 2

0 0 1 2

13

Z Z

Z Z Z

Z Z Z

Z Z Z

=

= − −= − −

= −

−− →

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.

Page 32: Planificación de la Producción y Optimización Lineal

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:

01 02 03 , 0, 1

11 12 13 1, 1, 1

1 2 3 , , 1

0o n m n m

n m n m

m m m m n m m n m

t t t t t

c t t t t tT

M b

t t t t t

+ + +

+ + +

+ + +

= =

⋮ ⋮ ⋮ ⋯ ⋮ ⋮

.

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

, 1 0i m n

is

t

t

+ +≥

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.

Page 33: Planificación de la Producción y Optimización Lineal

33

Ejemplo 1.12: Queremos resolver el siguiente problema de programación lineal en forma de inecuaciones mediante el algoritmo 1.3:

1 2

1

2

1 2

1 2

max 2 3

3 5

5 3

3 2 10

, 0

x x

subject to

x

x

x x

x x

+

+ ≤

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

1 21 2

1 31

2 42

1 2 51 2

1 2 3 4 51 2

min 2 3max 2 3

3 53 5

5 35 3

3 2 103 2 10

, , , , 0, 0

x xx x

subject tosubject to

x xx

x xx

x x xx x

x x x x xx x

− − −+

+ =≤⇒

+ =≤

+ + =+ ≤

≥≥

Aplicamos el método del Simplex, m = 3 y n = 2. Paso 2: Ahora introduciremos las entradas de la tabla Simplex inicial:

01 02 03 04 05 06

11 12 13 14 15 16

21 22 23 24 25 26

31 32 33 34 35 36

2 3 0 0 0 00 3 0 1 0 0 5

0 5 0 1 0 3

3 2 0 0 1 10

t t t t t t

c t t t t t tT

M b t t t t t t

t t t t t t

− − = = =

.

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

, 1 16

11

5

3i m n

is

t t

t t

+ + = =

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.

Page 34: Planificación de la Producción y Optimización Lineal

34

1 1

0 0 1

3 3 1

: :3

: 2: 3

2 3 0 0 0 0

2 3 0 0 0 0 1 50 0 0

0 1 0 0 5 3 3

0 5 0 1 0 3 0 5 0 1 0 33 2 0 0 1 10

3 2 0 0 1 10

2 100 3 0 0

3 31 5

1 0 0 03 3

0 5 0 1 0 3

0 2 1 0 1 5

13 Z Z

Z Z Z

Z Z ZT

=

= +

= −

− − − −

→ = −

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

, 1 26

22

3

5i m n

is

t t

t t

+ + = = ,

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 2: :5

2 10 2 100 3 0 0 0 3 0 0

3 3 3 31 5 1 5

1 0 0 0 1 0 0 03 3 3 3

1 30 0 1 0 3 0 0 0

5 5

0 2 1 0 1 5 0 2 1 0

5 1

1 5

Z Z=

− −

→ − −

Page 35: Planificación de la Producción y Optimización Lineal

35

0 0 1

3 3 1

: 3: 2

2 3 770 0 0

3 5 151 5

1 0 0 03 3

1 30 1 0 0

5 52 19

0 0 1 15 5

Z Z Z

Z Z ZT

= +

= −

→ = − −

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

1 2 55 3 19

0 03 5 5

x − −

=

,

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

1 2 3

1 3

1 2 3

1 2 3

1 2 3

max 2 3

. 2 6 10

2 8 4 12

3 6 5 20

, , 0

x x x

s a x x

x x x

x x x

x x x

+ +

+ ≤

− + + ≤

+ + ≤

.

Encontrar la solución óptima aplicando el Algoritmo 1.3.

Page 36: Planificación de la Producción y Optimización Lineal

36

Ej.1.16 Dado el siguiente problema en forma de inecuaciones

1

1 2

1 2

1 2

1 2

min

. 2

6

2 6

, 0

x

s a x x

x x

x x

x x

− + ≤

+ ≤

− ≤

.

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.

3 4

1 2 3 4

1 2 3 4

1 2 3 4

max

. 3 2 8

2 6

, , , 0

x x

s a x x x x

x x x x

x x x x

+

+ + + ≤

+ + + ≤

.

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.

Page 37: Planificación de la Producción y Optimización Lineal

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

Page 38: Planificación de la Producción y Optimización Lineal

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.

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

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

Page 39: Planificación de la Producción y Optimización Lineal

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:

Page 40: Planificación de la Producción y Optimización Lineal

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

Toneladas por hora Máquina 2

Toneladas por hora Papel de 60 g/m2 53 52 Papel de 80 g/m2 51 49 Papel de 120 g/m2 52 45

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

Costes (Máquina 1) euros por tonelada

Costes (Máquina 2) euros por tonelada

Precio de venta en euros por tonelada

Papel de 60 g/m2 76 75 77 Papel de 80 g/m2 82 80 81 Papel de 120 g/m2 96 95 99

Page 41: Planificación de la Producción y Optimización Lineal

41

Estudios de mercado revelan que se pueden vender, a lo más, las siguientes cantidades por mes: Papel de 60 g/m2: 30000 toneladas, papel de 80 g/m2: 20000 toneladas, y papel de 120 g/m2: 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 en un lingote de 2000g

Mínima cantidad en g 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 en la

sustancia (Desecho de

aluminio) en %

Contenido en la

sustancia (Desecho de

silicio) en %

Contenido en la

sustancia (Desecho de

tipo 1) En %

Contenido en la

sustancia (Desecho de

tipo 2) en %

Contenido en la

sustancia (Desecho de

tipo 3) 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

aluminio Desecho de

Silicio Desecho de tipo 1

Desecho de tipo 2

Desecho de tipo 3

Cantidad en kg Sin límite Sin límite 200 750 Sin límite Precio en euros/kg

210 380 30 80 170

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

Page 42: Planificación de la Producción y Optimización Lineal

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:

11 12 13 1

21 22 23 2

31 1 32 2 33 3 3

1 2 3

, , , , .

m

m

B B B B m m

m m m mm

z z z z

z z z z

M z e M z e M z e M z e

z z z z

= = = =

⋮ ⋮ ⋮ ⋮

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:

( )1

1 1 1 10 1 01 0 1 2 2 2 2= 0 0 1 0 0 0 1 0 0 0 1 0

2 0 0 0 2 0 0 0 0 0 1

1 11 1 1 01 0 1 0 02 22 20 0 1 0 0 0 1 0 1 0

0 0 1 0 0 0 10 0

0

1

1

1

1

1

1

0

2

BM e

→ → −

→ → →

( )2

1 10 0 1 0 01 0 0 2 20 0 1 1 0 0 1 1 0 0 1 1

2 0 0 0 2 0 0 0 0 0 0

11 1 0 01 0 0 1 0 0220 0 1 1 0 0 0 0 1 0

0 0 1 1 0

0

0

12

1

1

0 10 0 101

BM e

= → →

→ → →

.

Page 43: Planificación de la Producción y Optimización Lineal

43

( )3

1 10 0 1 0 01 0 0 2 2= 0 0 1 0 0 0 1 0 0 0 1 0

2 0 0 1 2 0 0 1 0 0 1

11 1 0 01 0 0 1 0 0220 0 1 0 0 0 1 0 1 0

0 0 1 0 0 0 10

1

12

1

1

1 00 1

21

BM e

→ →

→ → − →

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:

1

2 1 0 1

= 0 0 1

0

0

2 00 0 0

0

1 1

0BM e

= =

,

2

2 1 0 0

= 0 0 1

0

1

2 10 0 0

0

0 0

1BM e

= =

,

3

2 1 0 0

= 0 0 1 0

1 12 21

00

1

1 2 0 1BM e

= =

− .

Unamos los tres vectores solución en una matriz,

0 0 1 2

1 0 1

0 1 0

y de esta forma, multiplicando BM con esta matriz, obtenemos la matriz identidad I:

0 0 1 2

1 0 1

0 1 0

2 1 0 1 0 0

0 0 1 0 1 0 :

2 0 0 0 0 1

I

= =

− .

Llamaremos a la matriz roja matriz inversa o simplemente inversa de MB y la notaremos MB-1.

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

Page 44: Planificación de la Producción y Optimización Lineal

44

mismo tiempo, y cambiar tres pasos del ejemplo 1.13 por uno. De esta forma tenemos el siguiente algoritmo para calcular la matriz inversa de una matriz cuadrada B.

Ejemplo 1.14: Repetiremos los cálculos de MB

-1 del ejemplo 1.12 siguiendo el algoritmo 1.4:

( )

( )

1 1 1 12 2 2 2

1 11 1 2 22 2

12

1

1 0 1 0 0 0 0 0 1 0 0 0

= 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 0 1 0 1

1 0 0 01 0 0 0

0 0 1 0 1 0

2 1

1

1

1

0 0 1 0 1

0 0 1 0 1 00 0 1 0 1

1 0 0 0 0

0 1 0 1 0 1

0 0 1 0 1 0

B

B

M I

I M−

→ → −

→ → − −

→ − =

.

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 11 0 0

2 21 2 0 0 14 0 2 1 0 0

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 04 0 2 1 0 0

12

BM I

= − → − → −

Algoritmo 1.4: Cálculo de inversas Entrada: Matriz cuadrada MB con m filas y m columnas. Salida: Matriz inversa MB

-1 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, Salida: la segunda parte de la matriz como la inversa MB

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

Page 45: Planificación de la Producción y Optimización Lineal

45

1 1 1 1 1 11 1 0 0 1 1 0 0 1 1 0 0

2 2 2 2 2 21 1 1 1

0 2 0 1 1 0 1 0 0 1 1 02 2 2 2

0 2 2 1 0 2 0 2 2 1 0 2 0

2 1

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

)1 8

a A−

=

, 5 8

)6 1

b B

= − ,

4 9)

16 36c C

− − =

,

5 8 2

) 6 2 1

8 0 1

d D

= −

,

5 9 1

) 1 2 3

4 7 2

e F

= −

,

1 6 8

) 0 2 7

7 6 3

f G

− − = − − −

.

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:

, , ,

B B N N

B B N N

c x c x c x

Mx M x M x 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 independencia lineal de MB considerando que MB tiene una inversa MB

-1 que puede ser calculada utilizando, por ejemplo, el método de Gauss (ver adjunto A). Podemos multiplicar la ecuación MB xB

+ MN xN = b por MB-1 y obtener la descripción básica de una solución arbitraria x

= (xB,xN) de Mx = b

Page 46: Planificación de la Producción y Optimización Lineal

46

1 1B B B N N

x M b M M x− −= − .

(→Ejercicios adicionales (ver CD) 1.57-58) Si se pone xN = 0 en esta descripción básica, entonces xB = MB

-1b. x = (xB,xN) = (MB

-1b,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 de ecuaciones mediante la transformación (MB

-1 | b) � ( I | MB-1

b) por operaciones de pivotaje. Ejemplo 1.16: Echemos un vistazo a los datos del pequeño problema de SchokoLeb

( 30 50 0 0 0)

3 2 1 0 0 18

1 0 0 1 0 , 4

0 2 0 0 1 12

c

M b

= − −

= =

Para B = {1,4,2}

1 4 2 3 5

1 4 2 3 5

3 0 2 1 0

1 1 0 , 0 0

0 0 2 0 1

( ) ( 30 0 50), ( ) (0 0)

( ), ( )

B N

B n

B n

M M

c c c c c c c

und

x x x x x x x

= =

= = − − = =

= =

Calcularemos la inversa MB-1 mediante el método de Gauss:

( )

( )

2 1 1 13 3 3 32 1 1 13 3 3 3

12

1 13 3

11 13 3

12

0 2 1 0 0 1 0 0 0 1 0 0 0

1 1 0 0 1 0 0 1 1 0 0 1 0 1

0 0 1 0 00 0 2 0 0 1 0 0 0 0 1

1 0 0 0

0 1 0 1

0 0 1 0

3

0

2

B

B

M I

I M

−−

= → − − → −

→ =

y obtenemos el vector de variables básicas

1

14

2

1 10

3 3 18 21 1

1 4 23 3

12 61

0 02

B B

x

x x M b

x

= = = − =

.

Page 47: Planificación de la Producción y Optimización Lineal

47

Condiciones de optimalidad (condición de la inversa): Si MB es una matriz básica con las siguientes características:

1. 1: 0B Bx M b−= ≥ ,

2. 1: 0red B Bc c c M M−= − ≥ ,

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. Para probar este resultado, insertaremos la descripción básica xB = MB

-1b - MB

-1 MN xN en la función objetivo:

1 1

1 1

1 1

1 1

, , ,

, ,

, , ,

, , ,

, ,

B B N N

B B B N N N N

B B B B N N N N

B B N N B B N N

B B N B B N N

c x c x c x

c M b M M x c x

c M b c M M x c x

c M b c x c M M x

c M b c c M M x

− −

− −

− −

− −

= +

= − +

= − +

= + −

= + −

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 10

3 3 3 2 1 0 01 1

: 30 50 0 0 0 30 0 50 1 1 0 0 1 03 3

0 2 0 0 11

0 02

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

red B Bc c c M M−

= − = − − − − − −

= − − − − −

= − − − − − − − =

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

( ) ( )1 2 3 4 5 2 6 0 2 0x x x x x = .

(→Ejercicios Adicionales (ver CD) 1.59-60)

Page 48: Planificación de la Producción y Optimización Lineal

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/

Page 49: Planificación de la Producción y Optimización Lineal

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