Introducción a la Programación Lineal
Introducción a la Programación Lineal
PROGRAMACIÓN
LINEAL
2.1. Introducción
45
46 LECCIÓN 2. PROGRAMACIÓN LINEAL
kg
= 10
mesa
a12 = cantidad del recurso 1 (madera) para producir una silla =
kg
=5
silla
2.2. UN PRIMER EJEMPLO ILUSTRATIVO 47
a21 = cantidad del recurso 2 (horas hombre) para producir una mesa =
hh.
=8
mesa
a22 = cantidad del recurso 2 (horas hombre) para producir una silla =
hh.
=6
silla
i = 1, 2, . . . , m, j = 1, 2, . . . , n
Para el caso que estamos analizando, podemos usar una desigualdad con-
ceptual básica:
Como a11 es la cantidad de madera que usamos para manufacturar una mesa
y x1 es la cantidad (aún desconocida) de mesas que construimos, la cantidad de
madera que empleamos para hacer x1 mesas será a11 x1 . Igualmente la cantidad
de madera que empleamos para hacer x2 sillas será a12 x2 . La cantidad total de
madera que empleamos para hacer mesas y sillas, será entonces:
[kg de madera] [kg de madera]
a11 x1 [mesas] + a12 x2 [sillas]
[mesa] [silla]
Omitiendo ahora las unidades y representando las horas que nuestros cola-
boradores dedican a la producción (el lector puede verificar que las unidades del
lado izquierdo y derecho de la desigualdad correspondientes a las horas hom-
bre disponibles en el horizonte de planificación son iguales), y completando el
modelo, tendremos:
a11 x1 + a12 x2 ≤ b1
a21 x1 + a22 x2 ≤ b2
Sabemos que, por otro lado, tenemos la función objetiva, que nos permite
representar cuál es, precisamente, el objetivo que queremos cumplir: maximizar
las ganancias, reducir los costos, maximizar el bién común, lograr la mayor
producción total de bien posible, etc... Tı́picamente esta función objetiva se
representa, para el caso de dos variables que estamos considerando, como
y = c1 x1 + c2 x2
máx y = c1 x1 + c2 x2
s. a
a11 x1 + a12 x2 ≤ b1
a21 x1 + a22 x2 ≤ b2
x1 ≥ 0, x2 ≥ 0
Formas Canónicas
máx y = c1 x1 + c2 x2 + · · · + cj xj + · · · + cn xn
s.a
a11 x1 + a12 x2 + · · · + a1j xj + . . . a1n xn ≤ b1
a21 x1 + a22 x2 + · · · + a2j xj + . . . a2n xn ≤ b2
...
ai1 x1 + ai2 x2 + · · · + aij xj + . . . ain xn ≤ bi
...
am1 x1 + am2 x2 + · · · + amj xj + . . . amn xn ≤ bm
con xi ≥ 0, i = 1, 2, . . . , n.
Conviente también usar una notación más compacta para representar este
sistema, dando lugar a otras formas canónicas que también usaremos ocasio-
nalmente.
n
X
máx y = ci x i
i=1
s.a
n
X
aij xj ≤ bi i = 1, 2, . . . , m
j=1
Definimos A ∈ Rm×n :
a11 a12 ... a1j ... a1n
a21 a22 ... a2j ... a2n
...
A=
ai1
ai2 ... aij ... ain
...
am1 am2 ... amj ... amn
x1
x2
. . .
x=
xi
. . .
xn
c1
c2
. . .
c=
ci
. . .
cn
b1
b2
. . .
b = P0 =
bi
. . .
bm
a1j
a2j
...
Pj =
j = 1, 2, ..., n
aij
...
amj
s. a
2 1 2
x1 + x2 ≤ , x1 ≥ 0, x2 ≥ 0
1 2 2
. En el ejemplo anterior:
x1
máx 2 1
x2
s. a
2 1 x1 2
≤ , x1 ≥ 0, x2 ≥ 0
1 2 x2 2
Variables de relleno
n
X
máx y = ci xi
i=1
2.2. UN PRIMER EJEMPLO ILUSTRATIVO 53
s.a
n
X
aij xj + si = bi i = 1, 2, . . . , m
j=1
xi ≥ 0, i = 1, 2, . . . , n
si ≥ 0, i = 1, 2, . . . , m
Alternativamente, definamos el vector ampliado de decisión incorporando las
variables de relleno si , entonces
x1 x1
x2 x2
. . . . . .
xi xi
. . . . . .
x= =
xn xn
s1 xn+1
s2 xn+2
. . . . . .
sm xn+m
El vector de costos de la función objetiva, considerando que los coeficientes de
las variables de relleno no aparecen en la formulación original queda como:
c1
c2
. . .
ci
. . .
c=
cn
0
0
. . .
0
Usando notación matricial:
máx cT x
s.a
[A|I]x = b, x ≥ 0
54 LECCIÓN 2. PROGRAMACIÓN LINEAL
s2 x4
c1
c2
c= 0
0
a11 a12 1 0
[A|I] =
a21 a22 0 1
Es decir, en nuestro ejemplo:
x1
x2
máx 3 5 0 0
s1
s2
s. a
x1
2 1 1 0
x2 ≤ 2 , x1 ≥ 0, x2 ≥ 0
1 2 0 1 s1 2
s2
2.2. UN PRIMER EJEMPLO ILUSTRATIVO 55
Luego de haber revisado las distintas formas canónicas que se emplean inter-
cambiablemente para representar el problema, pasemos a realizar una interpre-
tación gráfica.
Interpretación gráfica
Siguiendo con el mismo ejemplo anterior, nos ayudamos con Maxima para
representar la situación. Cargamos la librerı́a para la representación de funcio-
nes implı́citas:
( % o1)
C:/maxima-5.44.0/share/maxima/5.44.0/share/contrib/implicit [Link]
( % i2) implicit plot ([2*x 1+3*x 2=5, 2*x 1+x 2-2,x 1+2*x 2=2],
[x 1, 0, 2], [x 2, 0, 2]);
done ( % o2)
Figura 2.1: Región factible (sombreada, en verde) y curvas de nivel en las que
el gradiente indica el sentido de crecimiento de la función.
(Un caso extremo es cuando las curvas de nivel de la región factible son
paralelas a una de las restricciones, en cuyo caso todos los puntos de la frontera
que identifica la recta en cuestión son solución y se alcanza el mismo valor de
la función objetiva en cualquiera de los puntos. Pero ése es un caso particular.)
2 2
[[x1 = , x2 = ]] ( % o1)
3 3
16
( % o2)
3
Segunda observación
El método anterior nos ofrece una forma de hallar la solución para un caso
simple en R2 . Sin embargo, en general, trabajaremos con muchas más dimen-
siones. Incluso en R3 la idea de un vértice es más compleja. Podemos darnos
cuenta tal vez en R3 en las que las aristas de la región factible serán planos y
los vértices los puntos de intersección de esos planos.
2x1 + x2 + s1 + 0.s2 = 2
x1 + 2x2 + 0.s1 + s2 = 2
2 1 1 0 2
x + x + s + s =
1 1 2 2 0 1 1 2 2
2 1 1 0 2
P1 = , P2 = , P3 = , P4 = y P0 =
1 2 0 1 2
P1 x1 + P2 x2 + P3 s1 + P4 s2 = P0
2 1 2
x + x =
1 1 2 2 2
la región factible, tal como lo vemos en la figura que identifica los extremos
factibles y no factibles. Esta solución es factible (cumple con las restricciones)
y es básica (utiliza sólo dos vectores linealmente independientes para escribir
un vector de R2 ). En este punto f (x1 ) = 16 3 .
2 1 2
x1 + s1 =
1 0 2
También notamos que tenemos una solución con valores negativos: s1 = −2.
Este valor negativo funciona como una tarjeta roja, que nos avisa que este punto
no debe ser considerado. Vemos en la figura que este punto de intersección entre
una recta de la región factible y el x1 , efectivamente no es factible. La solución
negativa es una señal de no factibilidad.
Hemos visto que cada solución factible básica representa un vértice del
polı́gono de soluciones factibles y que, además, las soluciones básicas que no
son factibles, quedan identificadas por tener al menos una variable negativa (de
las variables principales o de las variables de relleno).
P3 s1 + P4 s2 = P0
es decir:
1 0 2
s + s =
0 1 1 2 2
P3 s1 + P2 x2 = P0
64 LECCIÓN 2. PROGRAMACIÓN LINEAL
es decir:
1 1 2
s1 + x2 =
0 2 2
Por lo tanto, para pasar del punto (6) al punto (4), debemos
hacer un cambio
0
en la base: sacar de la solución factible básica a P4 = y hacer entrar en la
1
1
misma a P2 = . Antes de ver los detalles de cómo se realiza el cambio de
2
base, veamos la siguiente notación:
X
Pi x i = P0
i∈B6
X
Pi x i = P0
i∈B4
X
Pi x i = P0
i∈B
También hemos mostrado que podemos pasar del punto (6) al punto (4),
pero también podrı́amos haber pasado el punto (3). No lo hemos hecho, porque
la función objetiva mejora más al pasar de (6) a (4) que de (6) a (3).
a) Criterio para elegir el vector que entra en la base: aquel que produce el
mayor cambio en la función objetiva.
b) Criterio para elegir el vector que sale de la base: aquel que asegura que
el nuevo vértice es factible.
P3 x 3 + P 4 x 4 = P0
66 LECCIÓN 2. PROGRAMACIÓN LINEAL
1 0 a12
α32 P3 + α42 P4 = α32 + α42 = P2 =
0 1 a22
de allı́ se desprende que α32 = a12 y α42 = a22 .
Reemplazando obtenemos:
2 2
P3 (2 − ) + P2 = P3 + P2 = P0
2 2
concluimos que la nueva solución es:
x1 = 0, x2 = 1, x3 = s1 = 1 y x4 = s2 = 0
Nota
b1
b1 − θa12 = 0 ⇒ θ2 =
a12
Pero entonces:
68 LECCIÓN 2. PROGRAMACIÓN LINEAL
b1 b1
P4 (b2 − θ2 a22 ) + θ2 P2 = P4 (b2 − a22 ) + P2 = P0
a12 a12
b1 b1 2 2
P4 (b2 − a22 ) + P2 = P4 (2 − 2) + P2 = P4 (−2) + 2P2 = P0
a12 a12 1 1
b2 2 b1 2
θ1 = = = 1, θ2 = = = 2 ⇒ θ1 < θ2
a22 2 a12 1
Con lo cual, como regla general para la selección del vector que sale de la
base, se deberá elegir:
bi
θ = mı́n
aij
donde j es el subı́ndice del vector que entre en la base, j = 2 en nuestro caso.
Esta condición es el criterio para seleccionar el vector que sale de base.
Por su parte, el criterio para elegir el vector que entra en la base es selec-
cionar el que produce el mayor cambio en la función objetiva. Como
n
X
y= ci xi
i=0
Como regla general, entonces el criterio para la selección del vector que
entra en la base es seleccionar:
2.3. EL MÉTODO SIMPLEX 69
2) Seleccionar el vector que sale de la base (aquel que hace que el movimiento
hacia el vértice elegido no nos produzca una solucción no factible).
máx y = c1 x1 + c2 x2 + · · · + cj xj + · · · + cn xn
s.a
a11 x1 + a12 x2 + · · · + a1j x1j + . . . a1n xn ≤ b1
a21 x1 + a22 x2 + · · · + a2j x2j + . . . a2n xn ≤ b2
...
ai1 x1 + ai2 x2 + · · · + aij xij + . . . ain xn ≤ bj
...
am1 x1 + am2 x2 + · · · + amj xmj + . . . amn xn ≤ bm
xi ≥ 0, i = 1,2. . . . , n
70 LECCIÓN 2. PROGRAMACIÓN LINEAL
máx y = c1 x1 + c2 x2 + · · · + cj xj + · · · + cn xn
s.a
a11 x1 + a12 x2 + · · · + a1j xij + . . . a1n xn + s1 + 0s2 + · · · + 0sm = b1
a21 x1 + a22 x2 + · · · + a2j x2j + . . . a2n xn + 0s1 + s2 + · · · + 0sm = b2
...
ai1 x1 + ai2 x2 + · · · + aij xij + . . . ain xn + 0s1 + 0s2 + · · · + sj + 0sm = bj
...
am1 x1 + am2 x2 + · · · + amj xmj + . . . amn xn + 0s1 + 0s2 + · · · + sm = bm
xi ≥ 0, si ≥ 0, i = 1,2. . . . , n
Definiendo los vectores Pj ∈ Rm j = 1, 2, . . . , n + m tales que.
a1j
a2j
...
Pj =
, j = 1, 2, . . . n
aij
...
amj
0
0
. . .
Pj =
1k , j = n + 1, n + 2, . . . , n + m
. . .
0
n
X
máx y = ci xi
i=1
2.3. EL MÉTODO SIMPLEX 71
s.a
n+m
X
Pj xj = P0
j=1
Notemos que los últimos m vectores de la suma anterior forman una base
ortonormal.
Base inicial
s1
s2
Pn+1 | Pn+2 | . . . | Pn+m−1 | Pn+m
= P0
...
sm−1
sm
1 0 ...0 0 s1 b1
0 1 ...0 0
s2 b2
⇒
. . . ... ...0 0 . . . = . . .
0 0 ...1 0 sm−1 bm−1
0 0 ...0 1 sm bm
s1 xn+1 b1
s2
xn+2
b2
...
=
=
... = P0
...
sm−1 xn+m−1 bm−1
sm xx+m bm
X
Pi x i = P0
i∈B
Cambio de base
Recordemos que deseamos buscar otro vértice para mejorar la función ob-
jetiva. Cambiar de vértice será equivalente a cambiar de base. Para ello nece-
sitamos dos criterios, como hemos visto antes:
En la solución inicial
Pse ha seleccionado: xi = 0, i = 1, 2, . . . , n. Como la
n
función objetiva es y = i=1 ci xi , resulta, evidentemente, que y = 0 para esta
primer solución factible básica.
Pn Pn
objetiva. Como y = i=1 ci xi se suele escribir y − i=1 ci xi = 0, el criterio de
selección del vector que entra en la base se suele indicar como:
X X
Pj = αij Pi ⇒ θ(Pj − αij Pi ) = 0, con θ > 0
i∈B i∈B
X
Pi x i = P0
i∈B
entonces:
X X
Pi xi + θ(Pj − αij Pi ) = P0
i∈B i∈B
es decir que:
X
Pi (xi − θαij ) + θPj = P0
i∈B
b1
X b2
. . . = P0
Pi x i =
i∈B
bm
se desprende que xi = bi .
a1j
a2j
X ...
Pj = αij Pi =
aij
i∈B
...
amj
Reemplazando obtenemos:
X
Pi (bi − θaij ) + θPj = P0
i∈B
Elegimos el vector que sale de base como aquel que tiene el menor cociente
bi br
θr = mı́n{ }=
aij arj
X br
Pi (bi − θr aij ) + Pj = P0
arj
i∈{B−{r}}
2.3. EL MÉTODO SIMPLEX 75
B N = B V − {r} + {j}
máx y = c1 x1 + c2 x2 + · · · + cj xj + · · · + cn xn
s.a
a11 x1 + a12 x2 + · · · + a1j xij + . . . a1n xn + s1 + 0s2 + · · · + 0sm = b1
a21 x1 + a22 x2 + · · · + a2j x2j + . . . a2n xn + 0s1 + s2 + · · · + 0sm = b2
...
ai1 x1 + ai2 x2 + · · · + aij xij + . . . ain xn + 0s1 + 0s2 + · · · + sj + 0sm = bj
...
am1 x1 + am2 x2 + · · · + amj xmj + . . . amn xn + 0s1 + 0s2 + · · · + sm = bm
Considerando que
y − c1 x1 − c2 x2 − · · · − cj xj − · · · − cn xn = 0
Para saber cuál es el vector que debe salir en la base, una vez elegido Pj ,
buscamos el menor cociente de bi /aij , ya que, como hemos visto, eso nos asegura
la factibilidad de la nueva solución. Supongamos que se corresponde con la fila
i. Entonces el vector Pi debe entrar en la base. Marcamos esa fila. El elemento
en la fila i seleccionada y en la columna j identificada, se denomina el pivote
de la tabla como O aij .
Ejemplo
máx y = 3x1 + 5x2
s.a
2x1 + x2 ≤ 2
x1 + 2x2 ≤ 2
Ec. Bs. y x1 O
x2 s1 s2 LD bi /aij
0 y 1 −3 −5 0 0 0 -
1 s1 0 2 1 1 0 2 2/1
2 x2 0 1 O2 0 1 2 O
2/2
1) Dividimos la fila del pivote por el pivote. 2) Encontramos todos los nuevos
valores de la tabla de la siguiente manera:
xk ... xj
A ... B
... ... ...
C ... O
P
0 AP − BC
A =
P
2.3. EL MÉTODO SIMPLEX 79
Vemos entonces que tenemos otro problema de programación lineal con una
función objetiva cuyo mayor coeficiente es 1/2, de modo que podemos proceder
nuevamente de la misma manera que antes.
Ec. Bs. y O
x1 x2 s1 s2 LD bi /aij
0 y 1 −1/2 0 0 5/2 5
1 s1 0 O
3/2 0 1 0 1 O
2/3
2 x2 0 1/2 1 0 1/2 1 2
Hemos visto en los puntos anteriores cómo se pueden resolver los problemas
de programación no lineal usando LINGO. Conviene ahora revisar la aplicación
de un paquete de software que nos ayuda en resolver problemas lineales, cual
2.4. EMPLEANDO LINDO 81
Ec. Bs. y x1 O
x2 s1 s2 LD bi /aij
0 y 1 −3 −5 0 0 0 -
1 s1 0 2 1 1 0 2 2/1
2 x2 0 1 O2 0 1 2 O
2/2
0 y 1 O
−1/2 0 0 5/2 5
1 s1 0 O
3/2 0 1 0 1 O
2/3
2 x2 0 1/2 1 0 1/2 1 2
0 y 1 0 0 1/3 7/3 16/3
1 x1 0 1 0 2/3 −1/3 2/3
2 x2 0 0 1 −1/3 2/3 2/3
max 3 x1 + 5x2
st
2 x1 + x2 < 2
x1 + 2 x2 < 2
MAX 3 X1 + 5 X2
82 LECCIÓN 2. PROGRAMACIÓN LINEAL
SUBJECT TO
2) 2 X1 + X2 <= 2
3) X1 + 2 X2 <= 2
END
La tabla inicial del Simplex puede verificarse con el comando REPORTS >
TABLEAU:
THE TABLEAU
THE TABLEAU
2.4. EMPLEANDO LINDO 83
THE TABLEAU
1) 5.333333
NO. ITERATIONS= 2
2.5. Conclusiones
2.6. Problemas
Problema 1
a)
máx y = x1 + x2
s.a
x1 + 2x2 ≤ 6
2x1 + x2 ≤ 8
b)
c)
d)
Problema 2
máx y = x1 + 2x2
s.a
x1 − x2 ≤ 5
3x1 + 4x2 ≤ 12
2x1 + 7x2 ≤ 14
Problema 3
Problema 4
Problema 5
Problema 6
Problema 7
Problema 8
2.6. PROBLEMAS 89
Problema 9
Problema 10
máx y = 5x
s.a
x≤3
Problema 11
máx y = 2x1 + x2
s.a
ax1 + bx2 ≤ 10
a, b ≥ 0
a ≥ 2b
Problema 12
Una empresa fabrica mesas y sillas, con una capacidad semanal de 100
mesas y 400 sillas. Para hacer una mesa se requieren de 20 kg de madera, 2
kg de caños y 10 piezas de plástico. Para hacer una silla, por su parte, son
necesarios 5 kg de madera, 1 kg de caños y 5 piezas de plástico. El costo de la
madera es de 40 UEC/kg (UEC es la Unidad Económica de Costo que emplea
la empresa), el de los caños de 50 UEC/kg y cada pieza de plástico tiene un
costo de 5 UEC. El precio de venta de las mesas es de 990 UEC y el de las
sillas de 310 UEC. La mano de obra representa un costo fijo y por lo tanto no
se tiene en cuenta en el problema (se dice que el costo está hundido.
Problema 13
4) Resolver gráficamente.
Problema 14
Para realizar una cama de una plaza, se requieren de 1 hora hombre y tres
horas hombre para las de dos plazas. Para las camas de una plaza se requiere
de 3 kg de madera, pero para las de dos plazas (debido a un diseño especial),
se necesita 1 kg de madera. Se disponen en total de 60 horas hombre y 60 kg
de material por dı́a.