A12 Programacion Lineal
A12 Programacion Lineal
A12 Programacion Lineal
Introducción
Un problema de programación es un problema de optimización (buscamos máximos o
mı́nimos absolutos) donde la función objetivo es lineal y la región factible está dada por
desigualdades lineales.
Por ejemplo
máx z = 2x + 3y
−x + 2y ≤ 3
sujeto a −x − y ≤ −3
2x − y ≤ 5
≤3
3
y
+2
−x
2
0 x
-1 0 1 2 3 4 5
-1
1
De la misma manera, la segunda restricción
−x − y ≤ −3
x+y ≥3
Nos da una recta que pasa por los puntos (0, 3) y (3, 0) que divide al plano en dos
semiplanos y debemos tomar el de arriba.
y
4
≤3
3
y
+2
−x
2
x
+
y
≥
1
3
0 x
-1 0 1 2 3 4 5
-1
2x − y ≤ 5
y ≥ 2x − 5
Aquı́ debemos tomar el semi plano de arriba de la recta y = 2x − 5
y
4
≤3
3
y
+2
−x
5
y≤
2
x
−
+
2x
y
≥
1
3
0 x
-1 0 1 2 3 4 5
-1
2
y
4
≤3
3
y
+2
−x
5
y≤
2
x
−
+
2x
y
≥
1
3
0 x
-1 0 1 2 3 4 5
-1
-1
Estas rectas se llaman rectas
de nivel.
Supongamos que el óptimo se encuentra en un punto (x0 , y0 ) de la región factible. Por
ese punto pasa una recta de nivel, digamos
2x + 3y = z0
La región factible debe quedar de un solo lado de esta recta ( si hubiese puntos factibles
de a ambos lados de la recta esta recta no podrı́a corresponder a un optimo). que el
punto (x0 , y0 ) debe estar en el borde la región factible. Como la región es intersección de
semiplanos es un polı́gono convexo (no tiene concavidades, entradas ), el óptimo tiene que
ser en u vértice (tı́picamente) o en dos vértices y lado que los une.
3
Para saber en cuál vértice (o vértices) está el óptimo podemos recurrir a la fuerza
bruta, evaluando la función objetivo en todos los vértices y comparando los resultados, o
podemos ver cual esta más alejado en la dirección de crecimiento de la función objetivo.
Esta dirección es perpendicular a las rectas de nivel y esta dada por el vector de coeficiente
de la función objetivo. En nuestro ejemplo como la función objetivo es z = 2x + 3y el
vector normal es
~n = (2, 3)
y
5 ~n = (2, 3)
0 2x x
-1 0 1 2 3 +
3y4 5 6
=
6
-1
5 −1 2 5
3 2 13 −1 3 11
x= = y= =
3 3 3 3
La solución es (13/3, 13/3) y el óptimo es
13 11 26 + 33 59
z=2 +3 = =
3 3 3 3
4
y
5 ~n = (2, 3)
4
2x
+
3y
=
59
3 /3
0 2x x
-1 0 1 2 3 +
3y4 5 6
=
6
-1
El Caso General
En general un problema de programación lineal se puede escribir de la forma
máx z = c1 x 1 + c2 x 2 + · · · + cm x m
a11 x1 + a12 x2 + . . . a1m ≤ b1
a21 x1 + a22 x2 + . . . a2m ≤ b2
sujeto a .. .. ..
. . .
nm ≤ bn
a x + a x + ...a
n1 1 n2 2
máx z = ~c · ~x
sujeto a A~x ≤ ~b
Mediante el uso de variables auxiliar todo problema de programación lineal puede ser
llevado a la llamada forma canónica.
máx z = ~c · ~x
A~x ≤ ~b
sujeto a
~x ≥ ~0
Donde las desigualdad entre vectores se entiende componente a componente, esto es
~u ≤ ~v si cada coordenada de ~u es menor o igual que la coordenada correspondiente de ~v .
Cada restricción divide al espacio de m dimensiones en dos semiespacios. La región
factible es la intersección de esos semiespacios. El resultado podrı́a ser vacı́o (las condi-
ciones son imposible de cumplir simultaneamente) y el problema no tiene solución. Si la
región factible es acotada (no se va a infinito) el problema siempre tiende solución.
5
La intersección de semiespacios da un poliedro convexo. Un subconjunto de D ⊆ Rn
es convexo si dados dos puntos P0 , P1 ∈ D el segmento que los uno esta contenido en D
(P0 Q0 ⊆ D).
Polı́gono NO Convexo
Polı́gono Convexo
Los semiespacios son convexos y la intersección de convexos es convexa.
Como las función objetivo es lineal las hipersuperficies de nivel son hiperplanos (lo de
hiper es porque pueden ser espacios de más de tres dimensiones) el problema se reduce a
buscar el óptimo en los vértice.
En 1947 George Dantzing publico el método Simplex que permite resolver eficiente-
mente este tipo de problemas. Permite resolver problemas con miles de variables y miles
de restricciones.
Más recientemente se han encontrado otros algoritmos que que han alcanzado eficiencia
similar y dependiendo de cada clase de problemas en particular pueden ser mejores unos
u otros.
Ejemplos
1. Un fabricante de juguetes produce dos juegos: Bong y Zong. El margen de beneficios
es de $30 sobre Bong y de $20 sobre Zong. Zong necesita 6 horas de elaboración,
4 horas de montaje y 5 horas de embalaje. Por su parte, Bong precisa 3 horas de
elaboración, 6 horas de montaje y 5 horas de embalaje. Si se dispone de 54 horas
para la elaboración, 48 horas para el montaje y 50 horas para el embalaje. ¿Cuál
será la producción de ambos juguetes que maximiza el beneficio?
Llamemos x al la cantidad de Bong e y a la cantidad de Zong La función utilidad
es entonces
z = 30x + 20y.
Se dispone de 54 horas de elaboración, cada Zong requiere 6 horas y cada Bong 3
horas.
6x + 3y ≤ 54
6
De la misma manera para el montaje
4x + 6y ≤ 48
. Y para el embalaje
5x + 5x ≤ 50
Además no podemos producir cantidades negativas, ası́ que x, y ≥ 0. El problema
queda
18
6x
+
3y
=5
4
x
9
7
De la misma manera la recta 4x + 6y ≤ 48
x = 0 =⇒ 6y = 48, y = 8 → (0, 8)
y = 0 =⇒ 4x = 48, x = 12 → (12, 0)
18
8
4x
+
6y
=
48
x
9 12
Y la recta 5x + 5y = 50
y = 0 =⇒ 5x = 50, x = 10 → (10, 0)
8
y
18
10
5x
+
8
5y
=
50
x
9 10 12
La dirección de crecimiento (30, 20). No es necesario dibujar un vector normal a las
rectas de nivel tan grande. Podemos tomar
~n = (3, 2)
9
y
18
10
~n
8
30x + 20y = k
x
9 10 12
Debemos elegir el vértice que más se aleje en la dirección del vector ~n. A simple
vista, podemos dudar en entre el que está marcado con el cı́rculo verde on con el
marrón. La recta de nivel (roja) tiene una mayor inclinación (en valor absoluto) que
la recta 5x+5y = 50 que es la que une esos puntos, ası́ que si vamos bajando la recta
de nivel tocaremos primero el vértice marcado con el cı́rculo marrón. Obtenemos
sus coordenadas resolviendo el sistema
6x + 3y = 54
5x + 5y = 50
z = 30 × 8 + 20 × 2 = 280
Otra manera de hacer la elección es simplemente calcular los dos puntos y ver en cual
tenemos mejor ganancia. Para hallar las coordenadas del otro vértice resolvemos
4x + 6y = 48
5x + 5y = 50
Obtenemos (6, 4) y z = 30 × 6 + 20 × 4 = 280 lo que prueba que la elección de arriba
fue la correcta.
10
Otro problema que puede aparecer en la resolución de este ejercicio es que las tres
intersecciones de las rectas están muy cerca y si el gráfico está hecho a mano alzada
puede que no estemos seguros de cuales son los vértices de la región factible.
En este caso calculamos la coordenadas de las tres intersecciones y verificamos cuales
verifican todas las condiciones y por lo tanto pertenecen a la frontera de la región
factible. En nuestro caso, cada una es solución de un sistema formado por dos
condiciones (y por lo tanto las verifican), falta ver si verifica la otra.
Por ejemplo la intersección (8, 2) verifica la condición 4x + 4y ≤ 48
4 × 8 + 4 × 2 = 40 ≤ 48
6 × 6 + 3 × 4 = 48 ≤ 54
Pero la intersección de
4x + 6y = 48
6x + 3y = 54
es (15/2, 3) y no verifica la condición 5x + 5y ≤ 50
15 105
5× +5×3= > 50
2 2
Y por lo tanto está fuera de la zona factible.
2. Para formar una dieta semanal se consideran dos tipos distintos de alimentos, A y
B. El precio de un kilo de alimento A es de $1.7 y el de B de $0.8. Las necesidades
mı́nimas semanales de grasas, hidratos de carbono y proteı́nas son de 18, 24 y 14
respectivamente. Un kilo de alimento A tiene 2, 12 y 4 unidades respectivamente,
de los compuestos anteriores, mientras el alimento B contiene 6, 2 y 2 unidades,
respectivamente. Determinar el número de kilos de cada alimento que satisfacen
todas las necesidades mı́nimas semanales de la dieta a un costo mı́nimo.
Llamemos x a la cantidad de alimento A e y a la cantidad de alimento y. La función
a minimizar es
z = 1,7x + 0,8y
Para satisfacer las necesidades de grasa necesitamos
2x + 6y ≥ 18
11
4x + 2y = 14, (0, 7), (7/2, 0)
y
12
x
2 7/2 9
Ahora la región factible no es acotada. Si fuese un problema de maximización no
tendrı́a solución porque serı́a infinito.
Dibujemos el vector normal a las rectas de nivel
~n = (1,7, 0,8)
12
y
12
1,7x + 0,8y = k
~n
3
x
2 7/2 9
De nuevo, el problema es ver si el mı́nimo es vértice del cı́rculo verde o el del marrón.
El componente horizontal del vector normal (1,7) es un poco más del doble del horizontal
(0,8) lo que indica que es más horizontal que el vector normal de la recta 4x + 2y = 14 (
que pasa por los puntos (0, 7) y (7/2, 0)). Por lo tanto la recta de nivel es un poco más
vertical lo que significa que si desplazamos la recta roja hacia la izquierda tocamos primero
el vértice con el cı́rculo marrón y luego el del verde antes de abandonar la región factible.
Por lo tanto éste último es el mı́nimo buscado. Para hallar sus coordenadas resolvemos el
sistema.
12x + 2y = 24
4x + 2y = 14
Obtenemos
5 9
x= , y=
4 2
Y el costo mı́nimo es
5 9
z = 1,7 × + 0,8 × = 5,725
4 2
13