2 - Resumen Programación Lineal
2 - Resumen Programación Lineal
Introducción.
La “Programación Lineal” se puede considerar como uno de los
grandes logros, ya que es una de las herramientas bastante común en la
formulación de muchos tipos de problemas.
En concreto, el tipo más común de aplicación abarca el problema
general de asignar “recursos escasos entre actividades competitivas” de
la mejor manera posible(es decir, de forma óptima).
Este tipo de problemas surge cuando se quiere determinar el nivel
de las actividades que compiten por los recursos escasos que son
necesarios para que se puedan realizar.
Como ejemplos de la gran variedad de situaciones en las que se
puede aplicar esta descripción, tenemos entre otras, desde la asignación
de instalaciones productivas; la asignación de los recursos nacionales a
las necesidades de un país; la distribución de mercancías entre unos
orígenes y unos destinos; la asignación de personal para atender unas
máquinas; el diseño de carreteras entre diversas poblaciones; la mezcla
de productos, o por ejemplo, la planificación agrícola. En definitiva,
como característica común de todas estas situaciones es la necesidad de
asignar recursos a las necesidades.
La Programación Lineal utiliza un modelo matemático para
describir el problema.
El adjetivo lineal significa que todas las funciones matemáticas del
modelo deben de ser funciones lineales, es decir, las variables que
intervienen son de primer grado. En cuanto a la palabra programación,
esta no es sinónimo de programación en computadoras, sino que es
sinónimo de planificación.
Luego entonces, la “programación lineal” se entiende como “la
planificación de actividades para obtener el resultado, es decir, el mejor
resultado que alcance la meta (o función objetivo) según el modelo
matemático entre todas las alternativas de solución”.
Aunque la asignación de recursos a las actividades es la aplicación
más frecuente, la P.L. tiene otras muchas aplicaciones. Así, cualquier
problema cuyo modelo matemático se ajuste al formato general del
modelo de P.L. es un problema de programación lineal.
También, otra causa del gran impacto de la P.L. es el eficiente
procedimiento para resolver los problemas de gran tamaño mediante el
denominado “método (algoritmo) simplex.”.
n
MAXIMIZAR : z cjxj
j=1
n
Sujeto a : a x b ;
j=1
ij j i i = 1,2,...m
xj 0; j = 1,2,....n
n
a x
j=1
ij j representa “la cantidad total utilizada del lado derecho b i por
xn
a11. . . . . . . . . . . . . . . . . . a1n a 1
A (matriz de restricciones) = . a1, . . . . . . an .
am1. . . . . . . . . . . . . . . . . amn a m
donde:
a1j
aj (vector columna de A) = . ; a i ( vector fila de A) ai1,....., ain
amj
p.x = k
donde p es la normal, x el vector de las variables y k un escalar, luego
x1
z = (c 1 ,…c j ,….c n ) .
xn
x1 x1
y una restricción i a . =(a i 1 , a i j ,
i
a i n ) . = b i
xn xn
En el caso de” =,” se trata de una ecuación, mientras que si” <= “o” >=”
o sea una inecuación, se trata de uno de los semiespacios que divide el
hiperplano. En el caso de que el nº de variables sean 2 se trata de la
ecuación de una recta, si son tres de un plano, y si son más de 2 se trata
de un semiplano (con =), mientras que con <= o >= serían los
semiespacios que dividen los hiperplanos.
xj si xj 0 0 si xj 0
xj+= y xj-= con x j + , x j - >= 0
0 si xj 0 xj si xj 0
Luego si x j + > 0, entonces x j - = 0, y viceversa, si si x j - > 0, entonces x j +
= 0, pudiendo ser x j + = x j - = 0.
Ejemplo: si tenemos el problema:
Minimizar : z = x1 - 3x2
Sujeto a. x1 + 2x2 5
- 2x1 + 2x2 7
x1 0
Como no nos dicen nada sobre el signo de x 2 , suponemos que el valor
puede ser cualquiera, positivo, negativo o nulo, es decir, se trata de una
variable no restringida, entonces hacemos el cambio de x 2 = x 2 + -x 2 - , y el
problema será ahora:
Minimizar : z = - x1 - 3(x2 x2 ) Minimizar z - x1 - 3x2 3x2
Sujeto a. x1 + 2(x2 x2 ) 5 Sujeto a x1 + 2x2 2 x2 5
- 2x1 + 2(x2 x2 ) 7 - 2x1 + 2x2 - 2x2 7
x 1 , x 2 , x2 0 x 1 , x 2 , x2 0
Al final cuando se obtengan los valores de x 1 , x2 y x2 , entonces se
deshace el cambio, es decir, se calcula x 2 = x 2 + -x 2 -
x2
x*=(x*1;x*2)=(4/3;5/3)
1
2
z0=c1x1+c2x2
z= c1x*1+c2x*2
x1
c
Se puede observar que las restricciones 1 , 2 y las de “no
negatividad” x 1 , x 2 0, que definen semiespacios (al ser “ “ dividen
cada una de las restricciones en dos zonas), dan la zona subrayada, que se
denomina región factible, es decir, el conjunto de puntos (x 1 , x 2 ) que
verifican simultáneamente “todas” las restricciones. En un caso general
con n variables (las rectas serían hiperplanos) también definirían una
región factible donde las fronteras serían superficies planas. Luego, una
región factible se obtiene como la intersección de un número finito (al
serlo el número de restricciones) de semiespacios (conjunto poliédrico).
Consecuentemente, una solución del problema tendrá que ser
necesariamente un punto de la región factible.
Pero si se observa, la función objetivo z ,que se pretende
minimizar, es una recta (un hiperplano en el caso general, al ser más de
2 variables) cuyo gradiente(normal) c es perpendicular a ella, toma un
valor cada vez menor a medida que se aleja en el sentido -c, resultando
con el menor valor para z en los puntos más alejados de la región
factible, es decir, en un vértice x * de la figura, o sea, x * =(4/3;5/3).
(NOTA: Si en el ejemplo anterior, se tratase de MAXIMIZAR en vez de
Minimizar, la función objetivo z alcanza el mayor valor si el sentido es
en c, o sea, sería entonces en el origen).
Luego, se puede concluir, que la solución óptima de un problema
de programación lineal “siempre será” un vértice de la región factible, es
decir, el número de posibles soluciones es un número finito ya que se
obtienen por la intersección de un número finito restricciones, que
definen un conjunto llamado poliédrico (las restricciones en un problema
de programación lineal son conjuntos convexos donde para cualquier par
de puntos x 1 y x 2 , la combinación convexa x 1 + (1- )x 2 con (0;o1o
es lo mismo, representa el segmento que une a dichos puntos que también
pertenece al conjunto poliédrico). Luego la región factible es un conjunto
poliédrico que es un conjunto convexo, zona común del cumplimiento
simultaneo de todas las restricciones (relaciones entre las variables), y
como hemos visto gráficamente, la solución va estar en un vértice de
dicha región factible.
Ahora teniendo en cuenta la forma de las restricciones así como del
vector c, existen los siguientes tipos de soluciones.
x2
x2
x*
z* x*
x1
z* x1
c
c
A 1 ) Con región acotada. A 2 ) Con región “no acotada”
Nota: una región es acotada cuando con una esfera con centro en el origen
y de radio finito contiene a la región finita, y no acotada cuando el radio
es infinito.
B) Infinitas soluciones finitas (alternativas)( con igual valor finito z)
z* x2
x2
x*1
x*2
x*1
z*
x*2 x1
c x1
c
B 1 ) Con región acotada. B 2 ) Con región “no acotada”
En los dos casos B 1 y B 2 , existen dos puntos (vértices) x * 1 y x * 2 ya que el
gradiente c de la recta objetivo es perpendicular a una cara de la región
factible que tienen el mismo valor objetivo. Sin embargo ahora también
son soluciones óptimas, además de los puntos anteriores, los puntos
contenido en el segmento (que no son lógicamente vértices) que une
dichos vértices, o sea, la combinación convexa x * 1 + (1- ) x * 2 con
(0;1). Es decir, cuando =0, se obtiene el punto x * 2 y con =1 el x * 1 ,
mientras que para un valor entre 0 y 1 se obtiene un punto del segmento
que da el mismo valor objetivo, en definitiva, el problema tendría
soluciones alternativas.
d
x1
c
z0*
x2
x1
Primer ejemplo prototipo.
Esto nos lleva a las restricciones que siguen: según la tabla anterior, para
obtener una tonelada de pintura de exteriores se necesita una tonelada de
materia prima A, luego para optener x E toneladas se necesitan 1.x E
toneladas de materia prima A; mientras que para obtener 1 tonelada de
interiores se necesita 2 toneladas de A, luego para x I toneladas se
necesitan 2. x I toneladas de A, y donde la suma es la cantidad necesaria
de la materia prima A para repartir entre ambas tipos de pintura, y que
lógicamente es inferior a la cantidad disponible de 6 toneladas de A. Del
mismo modo se hace para la materia prima B, es decir,
xIxI
2 3
c
A
xE
6
z*
Como se puede observar la solución óptima se produce en el punto
extremo (vértice) A con valor (x E , x I ) = ( 10/3, 4/3) y z = 38/3
EL MÉTODO SIMPLEX.
MINIMIZAR: z = cx
Sujeto a: Ax = b
x0
xB B -1b
entonces , x = es una solución básica
xN 0
xB B -1b 0
Si además x = es entonces una solución básica
xN 0 0
factible
Si tenemos en cuenta el problema:
Minimizar: z = - x1 - 2x2
Sujeto a. x1 + x2 3
- x1 + 2x2 2
x1 , x2 0
Si lo ponemos en forma estándar (restricciones en forma de igualdad)
Minimizar : z = - x1 - 2x2 0x3 0x4
Sujeto a. x1 + x2 x3 3
- x1 + 2x2 x4 2
x 1 , x4 0
111 0
A = a1, a2, a3, a4
-1 2 0 1
1 1 2/3 - 1/3
Sea B=(a 1 ,a 2 ) , donde B - 1 , entonces
-1 2 1/3 1/3
x1 2/3 - 1/3 3 4/3 x3 0
xB B -1 b ; x N = =
x2 1/3 1/3 2 5/3 x4 0
xB 0
Como x= , se trata de una solución básica factible, y entonces
xN 0
se obtiene las coordenadas del vértice (4/3, 5/3).
1 0
Si se toma ahora B (a3, a4) I B -1 ,luego
0 1
xB1 x3 3 x1 0
xB B -1 b Ib b y xN , luego también se
xB2 x4 2 x2 0
trata de una solución básica factible. En este caso se obtiene el vértice
(0,0), o sea el origen. Otras soluciones básicas factibles nos darían los
otros vértices de la región factible.
z= cx (1)
Ax=b (2)
xB B -1b 0
la solución actual x0= = 0
xN 0
Si ahora las ecuación (1) y (2), las arreglamos de la forma siguiente, que
tanto en las ecuaciones (1) y (2), figuren en el lado izquierdo, la función
objetivo z (la vamos a considerar como una variable), las variables
básicas y las no básicas, mientras en el lado derecho el resto
:
z .1 + 0. x B + (c B B - 1 N - c N ) x N = c B B - 1 b (1)
z.0 + I. x B + B - 1 N x N = B-1b (2)
z xB xN LD
z 1 0 cBB-1N - cN cBB-1b
xB 0 I B-1N B-1b
xB xN
xB B -1b yk
x = xk ; xk 0 .
xN 0 ek
Donde e k es un vector columna con ceros, excepto un 1 para la variable
“no básica” x k .
(Nota: la expresión anterior es válida también para expresar la solución
básica optima general, cuando el vector y k tiene al menos una
componente positiva. Existe una solución finita única, cuando z k -c k 0 y
entonces x k = 0: mientras que si z k -c k = 0, entonces x k crece hasta que
una variable básica se hace nula, como veremos en un ejemplo,
x k =( br/yrk ):
En caso contrario, si y k no es menor o igual que 0, es decir, si
existe alguna componente positiva, entonces se determina la variable
básica x r que va a salir de la base, cuyo índice r se determina por la
siguiente relación mínima.
br bi
= mínimo ; tal que yik 0
yrk yik
Luego conocido el índice k (de la variable que entra en la base) y r (de la
variable que sale de la base), se realiza una operación llamada de pivoteo
sobre la componente y r k , lo que supone el dividir toda la fila r básica por
la citada componente y r k y reemplazar en la columna básica la variable
x r por x k y a continuación efectuar operaciones elementales por filas
para conseguir que los restantes elementos de la nueva columna básica (
es decir, de la variable x k ) sean 0. Y a continuación volver al paso 2,
hasta que en una iteración, se pare en alguna de las situaciones
anteriores, ya que como se comentó anteriormente, el proceso tiene una
convergencia en un número de pasos finitos al ser el número de vértices
(o lo que es lo mismo, soluciones básicas factibles) un número finito.
Se puede demostrar que en la base anterior al sustituir el vector básico
a B r por el no básico a k , la nueva colección de vectores en una base, con lo
cual la solución alcanzada es una solución básica factible, es decir, un
nuevo vértice de la región factible pero con un valor objetivo mejorado
(si no existe degeneración).
Vamos resolver ahora algunos problemas que nos van a permitir
ilustrar lo anteriormente comentado, reflejando además todas las
situaciones posibles, en la resolución de un problema de programación
lineal, como ya dejamos apuntado en la ilustración gráfica, pero que
ahora lo haremos resolviéndolo analíticamente.
Resolver los siguientes problemas utilizando para ello el método
simplex y expresando detalladamente las soluciones de los mismos:
a. Maximizar z = x1 + 2x2
Sujeto a : - x1 + 2x2 6 b. Maximizar z = - x1 + 2x2
- 2x1 + x2 2 Sujeto a : - x1 + 2x2 6
x 1 , x2 0 - 2x1 + x2 2
x 1 + x2 6
x1 , x 2 0
c. Minimizar z = - 2x1 + 3x2
Sujeto a : - x1 + 2x2 2
2x1 - x2 3 d. Minimizar z = - x1 + 3x2
x2 4 Sujeto a : - x1 + 2x2 6
x1 , x2 0 - 2x1 + x2 2
x 1 + x2 6
x1 , x 2 0
SO LUCIO NES
a)
Maximizar z x1 2x2 - Minimizar z - x1 2x2 0x3 0x4
sujeto a - x1 2x2 6 - x1 2x2 x3 6
- 2x1 x2 2 - 2x1 x2 x4 2
x1, x2 0 x1,.........x4 0
z x1 x2 x3 x4 LD
z 1 1 2 0 0 0
x3 0 -1 2 1 0 6
x4 0 -2 1 0 1 2
z x1 x2 x3 x4 LD
z 1 5 0 0 -2 -4
x3 0 3 0 1 -2 4
x2 0 -2 1 0 1 2
z x1 x2 x3 x4 LD
z 1 0 0 -5/3 4/3 -22/3
x1 0 1 0 1/3 -2/3 2/3
x2 0 0 1 2/3 -1/3 10/3
x1 2 / 3 2 / 3
x 10 / 3 1 / 3
En el ray o x = x 4 con x4 0
* 2
x 3 0 0
x4 0 1
b)
Maximizar z - x1 2x2 - Minimizar z x1 2x2 0x3 0x4 0x5
sujeto a - x1 2x2 6 - x1 2x2 x3 6
- 2x1 x2 2 - 2x1 x2 x4 2
x 1 x2 6 x 1 x2 x5 6
x1, x2 0 x1,.........x5 0
z x1 x2 x3 x4 x5 LD
z 1 -1 2 0 0 0 0
x3 0 -1 2 1 0 0 6
x4 0 -2 1 0 1 0 2
x5 0 1 1 0 0 1 6
z x1 x2 x3 x4 x5 LD
z 1 3 0 0 -2 0 -4
x3 0 3 0 1 -2 0 2
x2 0 -2 1 0 1 0 2
x5 0 3 0 0 -1 1 4
z x1 x2 x3 x4 x5 LD
z 1 0 0 -1 0 0 -6
x1 0 1 0 1/3 -2/3 0 2/3
x2 0 0 1 2/3 -1/3 0 10/3
x5 0 0 0 -1 1 1 2
x1 2 / 3 2 / 3
x 10 / 3 1 / 3
2
Co n la sol ució n x * = x 3 0 0 x 4 donde 0 x4 2
x4 0 1
X5 2 1
c)
Minimizar z - 2x1 3x2 Minimizar z 2x1 3x2 0x3 0x4 0x5 Mx6
sujeto a - x1 2x2 2 - x1 2x2 x3 2
2x1 x2 3 2x1 x2 x4 3
x2 4 x2 x5 x6 4
x1,.x2 0 x1,.........x6 0
z x1 x2 x3 x4 x5 x6 LD
z 1 2 -3 0 0 0 -M 0
x3 0 -1 2 1 0 0 0 2
x4 0 2 -1 0 1 0 0 3
x6 0 0 1 0 0 -1 1 4
z x1 x2 x3 x4 x5 x6 LD
z 1 2 -3+M 0 0 -M 0 4M
x3 0 -1 2 1 0 0 0 2
x4 0 2 -1 0 1 0 0 3
x6 0 0 1 0 0 -1 1 4
z x1 x2 x3 x4 x5 x6 LD
z 1/2+1/2
1 0 3/2-1/2M 0 -M 0 3-3M
M
x2 0 -1/2 1 1/2 0 0 0 1
x4 0 3/2 0 1/2 1 0 0 4
x6 0 1/2 0 -1/2 0 -1 1 3
z x1 x2 x3 x4 x5 x6 LD
z 0
1 0 4/3-1/2M 0 -M 0 -5/3-5/3M
x2 0 0 1 2/3 1/3 0 0 7/3
x1 0 1 0 1/3 2/3 0 0 8/3
x6 0 0 0 -2/3 -1/3 -1 1 5/3
d).
z x1 x2 x3 x4 x5 LD
z 1 0 -4 0 0 -1 -6
x3 0 0 3 1 0 1 12
x4 0 0 3 0 1 2 14
x1 0 1 1 0 0 1 6
x1 6
x 0
2
En e l punt o x = x 3 12
*
x4 14
X5 0
APENDICE
Tal como se ha visto anteriormente, una vez obtenida las variables
básicas en función de las no básicas:
(2) x B = B - 1 b - B - 1 N x N
(1) z= c B (B - 1 b - B - 1 N x N )+ x N c N = c B B - 1 b - (c B B - 1 N x N - c N ) x N .
- n n
(1) z= c B B - 1 b - (c B B - 1 N - c N ) x N = cB b - (cBB -1aj - cj)xj = z 0 -
j m 1
(z - c )xj
j m 1
j j
z j =c B B - 1 a j
z 0 =c B B - 1 b
B -1
ajxj n n
xB= B-1b - B-1N xN = xB= B-1b - j m 1 = B-1b -
j m 1
yjxj = b -
j m 1
yjxj
br bi
xk = mínimo , yik 0
yrk yik
Luego las ecuaciones (1) y (2) quedan (ya que las otras variables no
básicas no varían de su valor actual que es 0)
br
(1 ) z= z 0 -(z k -c k ).x k = z 0 -(z k -c k )
yrk
br
(2 ) x B = b -y k
yrk
Si z k -c k >0, entonces conviene incrementar x k para que z disminuya
(se está minimizando z ). ¿cuánto?. Habrá que ver el valor de y k , pueden
existir dos casos:
a) Que yk 0 , luego según la ecuación (2), al ser –y k , entonces x k
puede crecer indefinidamente y las variables básicas no se hacen
negativas, lo cual implica que la solución es NO ACOTADA
z - y la solución está en el rayo
b yk
xB xk , con xk 0
0 ek
br
b) Que algún y i k >0, entonces x k crecerá hasta , y x B r =0, es decir
yrk
, entra en la base x k y sale x B r , luego es está en una nueva solución
básica factible, y habrá que comprobar si esta nueva solución es
óptima. Como el nº de vértices es un nº finito, al ser la intersección
de las restricciones, y estas son un nº finito, es decir, en un nº
finito de iteraciones (cada iteración es una solución) se conseguirá
la solución óptima, si zk - ck 0 , pero pueden ocurrir dos casos:
1º) Que zk - ck 0 ,entonces la solución es única, con valor objetivo el
de la solución actual. La solución óptima al ser x k =0, es
xB b
x *
xN 0
2º ) Que z k -c k =0 entonces existen soluciones alternativas, con valor
xB b yk bk
x * xk , con 0 xk
xN 0 ek yrk