Está en la página 1de 18

Capı́tulo 3

MÉTODO DEL SIMPLEX PARA


LA PROGRAMACIÓN LINEAL.

Índice
1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2. Fundamentos del método del simplex. . . . . . . . . . . . . 1
2.1. Notación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.2. La matriz de coordenadas básicas Y . . . . . . . . . . . . . . . 3
2.3. Costes marginales. Regla de parada. . . . . . . . . . . . . . . 4
2.4. Regla de la variable de entrada . . . . . . . . . . . . . . . . . 5
2.5. Regla de la variable de salida . . . . . . . . . . . . . . . . . . 6
2.6. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3. Método del Simplex. . . . . . . . . . . . . . . . . . . . . . . 9
4. Soluciones especiales en los problemas de programación
lineal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1. Soluciones no acotadas. . . . . . . . . . . . . . . . . . . . . . 13
4.2. Solución óptima múltiple. . . . . . . . . . . . . . . . . . . . . 14
4.3. Problemas sin solución. . . . . . . . . . . . . . . . . . . . . . 15
4.4. Problemas degenerados. . . . . . . . . . . . . . . . . . . . . . 15

0
Este tema es una continuación del anterior, y en él veremos cómo resolver los
problemas de programación lineal. Para ello estudiaremos el método del Simplex, que es
un algoritmo ideado por Dantzig en 1947 con interesantes interpretaciones económicas.
Veremos los fundamentos del método, ası́ como sus propiedades. Por último veremos
soluciones especiales de problemas de programación lineal y cómo reconocerlas en la
tabla del Simplex.

1. Introducción.
En el tema anterior vimos que, después de añadir las variables de holgura y/o arti-
ficiales, resulta sencillo determinar una solución factible básica inicial (punto extremo),
sin más que utilizar algunas de las variables utilizadas para modificar las restricciones.
Por otra parte, sabemos que en la búsqueda de las solución óptima, hay que exa-
minar únicamente los puntos extremos del espacio de soluciones.
A continuación vamos a estudiar el método del Simplex, que es un procedimiento
por el cual se lleva a cabo el movimiento desde una solución factible básica (la inicial
o cualquier otra) a una solución factible básica adyacente, mejorando, o al menos no
empeorando el valor de la función objetivo.
NOTA: el método del Simplex lo vamos a ver sólo en el caso de maximización (para
minimización es análogo).
A grandes rasgos, los pasos generales del algoritmo son:
Paso 0.- buscar una solución factible básica (punto extremo).
Paso 1.- Determinar si el paso a una solución factible básica adyacente puede mejorar
el valor de la función objetivo. Si es ası́, ir al paso 2. En caso contrario, hemos alcanzado
la solución óptima.
Paso 2.- Determinar la solución factible básica adyacente con mayor mejora en el valor
de la función objetivo. Volver al paso 1 y repetir el proceso hasta alcanzar una solución
óptima.
A continuación vamos a estudiar bajo qué condiciones es posible la mejora que se
indica en el paso 1, lo que nos servirá como indicador en la aplicación del algoritmo.

2. Fundamentos del método del simplex.


Para entender mejor este apartado, a la par que damos las fórmulas generales (co-
lumna izda.) mostraremos un ejemplo (columna dcha.).

2.1. Notación.
En primer lugar fijaremos algunas notaciones.
Notación. Supongamos un problema de programación lineal planteado en forma estándar:

Max. z = 3x1 + 4x2 − 2x3 + x5 (3.2)


Max. z = ~c · ~x 2x1 +x2 +x3 + x4 =5
s.a. A~x = ~b (3.1) x3 +3x4 =2 (3.3)
~x ≥ 0, x1 + x4 +x5 = 8
x1 , x2 , x3 , x4 , x5 ≥ 0.

1
 
con A ∈ Mm×n , Rang(A) = m < n. Deno- 2 1 1 1 0
tamos las columnas de A por: A1 ,. . . ,An . A=(A1 A2 A3 A4 A5 )=0 0 1 3 0,
1 0 0 1 1

~c es el vector fila ~c = (c1 , . . . , cn ) y ~x, ~c = (3, 4, −2, 0, 1),


~b son vectores columna respectivamente  
x1
   
x1 b1  
~x = . . . y ~b = . . ..  x2  5
~
 
xn bm ~x =  x
 3
 , b =  2 .
 x4  8
x5
Para ese problema fijemos una base B formada por m columnas cualquiera de A
que sean linealmente independientes.

B = (B1 . . . Bm ) = (Aβ1 . . . Aβm ) Elegimos para la base B las columnas


2,3 y 5. Es decir, según la notación anterior
β1 = 2, β2 = 3, β3 = 5.
 B = (B1 , B2 , B3 ) = (A2 , A3 , A5 ) =
1 1 0
0 1 0.
0 0 1
Llamaremos columnas no básicas a las n − m columnas restantes y denotaremos
por N a una matriz formada por dichas columnas. Ası́, N = (Aη1 . . . Aηn−m ), con
la unión disjunta {η1 , . . . , ηn−m } ∪· {β1 , . . . , βm } = {1, . . . , n}.
 
N = (Aη1 . . . Aηn−m ) 2 1
N = (Aη1 , Aη2 ) = (A1 , A4 ) = 0 3
1 1

El vector de variables ~x ∈ Rn se puede descomponer en el vector de variables


básicas ~xB ∈ Rm y el vector de variables no básicas ~xN ∈ Rn−m :
     
xβ1 xη1 x2  
x1
~xB = . . . y ~xN =
   ...  ~xB = x3 y ~xN =
  .
x4
xβ m xηn−m x5

También podemos dividir el vector de costos ~c en el vector de costos básicos


~cB ∈ Rm y el vector de costos no básicos ~cN ∈ Rn−m :

~cB = (cβ1 , . . . , cβm ) y ~cB = (c2 , c3 , c5 ) = (4, −2, 1) y


~cN = (cη1 , . . . , cηn−m ) ~cN = (c1 , c4 ) = (3, 0).

Entonces, la función objetivo puede escribirse como:


 
z = ~cB · ~xB + ~cN · ~xN x2  
x
z = (4, −2, 1) x3  + (3, 0) 1 .
x4
x5

Asociada a esa base, existe una solución básica única: x∗ ∈ Rn . Llamemos z0 :=


z(x∗ ) al valor de la función objetivo en esa solución básica.

2
 ∗     
Recordemos que: x2 1 −1 0 5 3
x∗B = B −1~b, x∗B = x∗3  = 0 1 02 = 2
x∗N = ~0, x∗5 0 0 1 8 8
∗ ∗ ∗ T T
z0 = ~cB · x∗B + ~cN · x∗N = ~cB · x∗B . xN = (x1 , x4 ) = (0, 0) .
x∗ = (0, 3, 2, 0, 8)T .
z0 = (4, −2, 1) · (3, 2, 8)T = 16.

2.2. La matriz de coordenadas básicas Y .


Nuestro propósito es, dado el problema lineal (3.1) y fijada una base B, cambia-
remos el sistema A~x = ~b en otro equivalente, (B −1 A)~x = B −1~b. Este nuevo sistema,
que obviamente tiene las mismas soluciones que el anterior, es más amigable para di-
cha base, en el sentido de que las variables básicas están listas para ser despejadas.
Veámoslo.
Denotamos Y := B −1 A, y le llamamos matriz de coordenadas básicas. Nótese que el
sistema equivalente se puede escribir Y ~x = x∗B . Además, si denotamos Y = (Y1 , . . . , Yn )
-es decir, Yj es la columna j-ésima de Y - notemos que Yj = B −1 Aj (j = 1, . . . , n).
 
~x cumple A~x = ~b ⇔   x1  
2 1 1 1 0   x2 
 5
0 0 1 3 0 x3  = 2 ⇔
 
1 0 0 1 1  x4  8
x5

~x cumple B −1 A~x = B −1~b  


   x1   
1 −1 0 2 1 1 1 0  x2  1 −1 0 5

0 1 00 0 1 3 0x3 =0 1 02
 
0 0 1 1 0 0 1 1  x4  0 0 1 8
x5
 
(Y ~x = x∗B )   x1  
2 1 0 −2 0  x2 
 3
0 0 1 3 0 x3  = 2
 
1 0 0 1 1  x4  8
x5
           
Y1 x1 + Y2 x2 + . . . + Yn xn = x∗B , (3.4) 2 1 0 −2 0 3
0x1 +0x2 +1x3 + 3 x4 +0x5=2.
con Yj = B −1 Aj j = 1, . . . , n. 1 0 0 1 1 8

Se puede probar1 que las columnas de Y correspondientes a la base son vectores


canónicos de Rm . Es decir Yβi := B −1 Aβi = e~i T .
1
Nótese que B −1 B = Im = (e~1 T , e~2 T , . . . , e~m T ). Como B = (B1 , B2 , . . . , Bm ), se tiene que B −1 B =
(B B1 , B −1 B2 , . . . , B −1 Bm ). Por tanto, la columna de Y correspondiente al i-ésimo elemento base
−1

es Yβi = B −1 Aβi = B −1 Bi = e~i T .


Otra forma más elaborada de probarlo es la siguiente: como B es una matriz regular, sus columnas
forman una base del espacio  vectorial
 Rm . Veamos que a Y se le llama matriz de coordenadas básicas
y1j
 y2j 
porque sus columnas Yj =  . . . son las coordenadas de Aj en la base que forman las columnas de B:

ymj

3
Ası́, en el ejemplo de la derecha, la base estaba formada por las columnas 2,3 y 5
(e.d. β1 = 2, β2 = 3, β3 = 5) y se tiene Yβ1 = Y2 = e~1 T , Yβ2 = Y3 = e~2 T , Yβ3 = Y5 = e~3 T .
Ahora ya podemos concluir el objetivo de este apartado: que el sistema A~x = ~b
(cuyas infinitas soluciones son una variedad afı́n dependiente de n − m parámetros) es
equivalente a Y ~x = x∗B , que es más amigable para B porque agrupando en (3.4) las
columnas correspondientes a la base tiene la forma
         
xβ 1 X x2 2 −2 3
 ...  + ∗
Y j xj = xB ,  x3 + 0 x1 + 3 x4= 2.
     
xβ m j∈{η1 ,...,ηn−m } x5 1 1 8

que está listo para despejar las variables básicas ~xB en función de las n−m variables
no básicas:
 
xβ 1 X
~xB =  · · ·  = x∗B −
       
Y j xj x2 3 2 −2
xβ m j∈{η1 ,...,ηn−m } x3  =2 − 0x1 −  3 x4.
(3.5) x5 8 1 1

Es decir, la solución general del sistema A~x = ~b, fijada una base, se puede escribir
de forma que los xβ1 , . . . , xβm estén despejados en función de la solución básica y los
n − m parámetros xη1 , . . . , xηn−m .

2.3. Costes marginales. Regla de parada.


En el apartado anterior, dado el problema de programación lineal (3.1) y una base
concreta B, hemos escrito el sistema A~x = ~b de un modo Y ~x = B −1~b, más amigable
para dicha base, ya que las variables básicas son trivialmente despejables en función
de las n − m no básicas (ecuación (3.5)).
En este apartado estudiaremos cómo escribir la función objetivo z = ~c · ~x de modo
amigable para la base B: en función únicamente de las variables no básicas. De este
modo obtendremos información muy útil para el método del simplex. Veámoslo:
Sea ~x ∈ Rn es una solución cualquiera (básica o no) de A~x = ~b. El valor de la
función objetivo en ~x valdrá

(ver (3.2) en el ejemplo)


z = 3x1 + 4x2 − 2x3 + x5 =
z = ~c · ~x = ~cB · ~xB + ~cN · ~xN  
x2  
x
= (4, −2, 1) · x3 + (3, 0) 1
 
x4
x5

Por la ecuación (3.5), ponemos las variables básicas en función de n − m variables


no básicas y sustituimos:
 
y1j
 y2j  −1
Aj = y1j B1 + y2j B2 + . . . + ymj Bm ⇔ Aj = B · 
 . . .  ⇔ Aj = BYj ⇔ Yj = B Aj .

ymj
En consecuencia, las coordenadas de la columna básica Aβi = Bi respecto a la base de columnas de
B son todo ceros menos la coordenada i-ésima. Por tanto, Yβi = e~i T .

4
   
3 2
z = (4, −2, 1)2 − (4, −2, 1)0 x1
X 8 1
z = ~cB · x∗B − ~cB Yj xj + ~cN · ~xN | {z } | {z }
j∈{η1 ,...,ηn−m } ~cB x∗B =z0 ~cB Y1

 
−2  
x
− (4, −2, 1) 3  x4 + (3, 0) 1
x4
1
| {z }
~cB Y4

Notar que z0 := ~cB · x∗B es el valor de la función objetivo en la solución básica


asociada a B (x∗ = (x∗B , x∗N ) con x∗N = 0).
X X
z = z0− ~cB Yj xj + 16 −|{z}
cj xj z=|{z} 9 x1−(−13) x4 +|{z}
3 x1 +|{z}0 x4
| {z }
j∈{η1 ,...,ηn−m } j∈{η1 ,...,ηn−m } z0 ~cB Y1 ~cB Y4 c1 c4

X
= z0 + (cj − ~cB Yj )xj . = 16 + (−6) x1 + |{z}
13 x4 .
| {z }
j∈{η1 ,...,ηn−m } c1 −~cB Y1 c4 −~cB Y4

Definición 1. En el contexto de un problema estándar, dada una base, llamamos


coste marginal o coste relativo de una variable no básica xj a la cantidad c0j :=
cj − zj := cj − ~cB Yj .
Entonces: X
z = z0 + c0j xj (3.6)
j∈{η1 ,...,ηn−m }

Ası́, el costo marginal nos indica lo que varı́a el valor de la función objetivo si la variable
xj (no básica) se incrementa desde 0 hasta 1 en una nueva solución factible.
Notar que el coste marginal también se puede definir para variables básicas mediante
la misma fórmula: c0βi := cβi − ~cB Yβi = cβi − ~cB e~i T = cβi − cβi = 0.
Finalmente, por (3.6), notar que si todos los costos marginales de las variables
no básicas son menores o iguales que cero, no existe ninguna solución factible
mejor que la solución básica, que es la solución óptima. Por tanto, terminamos
de ejecutar el algoritmo del simplex.

2.4. Regla de la variable de entrada


Supongamos que estamos en una base factible B y que alguna variable no básica
tiene coste marginal estrictamente positivo. Buscamos ahora una nueva base factible
Be adyacente a la anterior en la que no empeore el valor de la función objetivo.
Para ello debemos determinar cuál de las variables es la que debe dejar de ser básica
(su vector asociado dejará de estar en la base) y qué otra variable es la que debe entrar
en su lugar.
Si B = (Aβ1 . . . Aβm ), y su solución básica factible es x∗ , entonces una base adyacente
coincide en todas las columnas elegidas, menos en una. Supongamos que la nueva
columna es Aj con j ∈ / {β1 , . . . , βm }. Supongamos que la columna que eliminamos es
Bk = Aβk . Entonces, la nueva matriz básica es B e = (Aβ1 . . . Z
Ak . . . Aβm Aj ). Para esta
βZ
nueva base, sea su solución básica factible x̃. Denotemos por θ = x̃j ≥ 0 lo que vale la
nueva variable básica xj en la solución x̃.

5
Debido a (3.6), el nuevo valor de la función objetivo será

z = z0 + c0j θ.

Ası́, el coste marginal c0j de una variable no básica, nos indica la variación del valor
de la función objetivo por cada unidad de xj en la nueva solución básica formada al
introducir dicha variable en la base. Entonces:
Regla de la variable de entrada
La variable que entra en la base, será aquella cuyo costo marginal sea el más positivo.
En caso de empate, se elige arbitrariamente.
Realmente podemos elegir para entrar en la base una variable cualquiera cuyo costo
marginal sea positivo y no empeoraremos el valor de la función objetivo. Pero a priori,
sin hacer más cuentas la que tiene el coste marginal más positivo es la que nos da
expectativas de una mayor mejora (aunque esto no tiene por qué suceder finalmente).

2.5. Regla de la variable de salida


Una vez que hemos decidido qué variable xj entra en la base, nuestro propósito
ahora es elegir qué variable xβk sale de la base para que:

B
e sea efectivamente una base y su solución básica: x̃, sea factible.

No toda colección de m columnas de A forman una base. Han de ser linealmente


independientes. Ası́, que B e sea una base, es equivalente a que el sistema A~x = ~b (ó
−1~
Y ~x = B b) junto con la condición de que sean cero las variables no asociadas a las
columnas de Be tenga solución única. Por (3.5),dicho sistema queda:

xβ1 = x∗β1 − y1j xj


 
xβ 1
··· ...

= x∗βk − ykj xj
 
H
 xβ
k
H
 = xB − Y j xj , xβ
H
 Hk
··· ...
xβm xβm = x∗βm − ymj xj

Si ykj 6= 0, existe solución y es única ya que es fácil de obtener, primero despejando xj


en la k-ésima ecuación y después cada xβi se despeja en función de xj .
Para esta nueva base, la nueva solución básica x̃ pudiera ser no factible. Denotemos
los valores de x̃ por x̃β1 , . . . , x̃βm (uno de ellos, x̃βk = 0) y sea θ := x̃j ≥ 0 el valor de
la nueva variable básica xj . La solución será factible si y sólo si

x∗βk
θ := x̃j = ≥0 ⇔ ykj > 0
ykj

y además, para todo i ∈ {1, . . . , S


k , . . . , m}


x∗βi
x̃βi = x∗βi − yij θ ≥ 0 ⇔θ≤ en caso de que yij > 0
yij

En consecuencia (∗) equivale a que


x∗βi
θ := mı́n{ : i = 1, . . . , m; yij > 0}
yij

6
Regla de la variable de salida.
Si ha entrado en la base xj , tomará en la nueva base el valor de

x∗βi
θ := mı́n { : yij > 0}
1≤i≤m yij

y la variable que sale de la base, xβk , debe ser elegida como la que minimiza la razón
anterior.
Observaciones. Notar que si la columna Yj tuviera todos sus componentes negativos o
nulos, no podemos ejecutar la regla de la variable de salida. No nos preocupemos por
esto ahora, lo trataremos más adelante.
Ejemplo. Para entender mejor cómo se justifican las fórmulas que llevan a la variable
de salida, continuamos con el ejemplo anterior,
z = 16 − 6x1 + 13x3 .
Decidimos que entre en la base la variable x3 . Nótese que cuanto mayor valor tenga x3 ,
mayor será el valor de 13x3 y más incrementaremos el valor de z.
Ahora nos preguntamos qué variable de las básicas: x2 , x3 , x5 , debe salir de la base.
Recordemos que el sistema Y ~x = B −1~b estaba dado por ecuación (3.5), que suponiendo
que son cero las variables que no están en la base anterior {x2 , x3 , x5 } ni la que va a
entrar, x3 , queda
     
x2 3 −2 x2 = 3 −(−2)x4
x3  = 2 −  3  x4 , x3 = 2 −3x4 (3.7)
x5 8 1 x5 = 8 −1x4 .
| {z }
Y4

Como x2 = 3 − (−2)x4 notemos que, como y14 = −2 < 0, para cualquier valor que
demos a x4 ≥ 0, por muy grande que sea, x2 seguirá siendo positivo, nunca se anulará
o se hará negativo. Ası́ que x2 no puede ser la variable que salga de la base.
En la segunda ecuación x3 = 2 − 3x4 , como y24 = 3 > 0, para que x3 ≥ 0 y la
solución sea factible, se tiene que 0 ≤ x4 ≤ 2/3 y no puede ser más grande.
En la tercera ecuación x5 = 8−x4 , ası́ que para que x5 ≥ 0 y la solución sea factible,
como y34 = 1 > 0, se tiene que cumplir 0 ≤ x4 ≤ 8.
En resumen, para que la solución sea factible: 0 ≤ x4 ≤ mı́n{8/1, 2/3} = 2/3, y
para que sea básica, una variable tiene que hacerse cero y salir de la base, y esto sólo
sucede cuando x4 = mı́n{8/1, 2/3} = 2/3 y se hace cero x3 . Una vez fijado x4 , el resto
de variables x3 = 0, x5 = 8 − 2/3 = 22/3, x2 = 3 + 2(2/3) = 13/3 se calculan de modo
único despejando. Luego al asumir x3 = 0, el sistema (3.7) tiene solución única y de
aquı́ se concluye que {x2 , x5 , x4 } forman una base.
Por otro lado, nótese que manteniendo la condición de obtener una solución factible,
si se elimina la restricción de que la nueva solución sea básica y permitimos tener 4
variables {x2 , x3 , x5 , x4 } no nulas, basta con que 0 ≤ x4 ≤ mı́n{8/1, 2/3} = 2/3, y
de las infinitas soluciones posibles, la que mayor valor nos da de la función objetivo
z es x4 = 2/3. Esto es un hecho general. Si simplemente, dada una nueva variable no
nula, buscáramos la solución factible con mayor valor de dicha variable, y por tanto
con mayor valor de función objetivo, dicha variable se puede ir aumentando hasta que
en la ecuación (3.7) una de las variable básica, con yij > 0 se haya hecho tan pequeña
que se anule. Con lo cual, sin buscarlo, hemos obtenido otra solución básica.

7
2.6. Ejemplo
Sea el problema: Max. z = 2x1 + 3x2
(
x1 + x2 ≤ 9
sujeto a
3x1 + x2 ≤ 12

x1 , x2 ≥ 0.
En forma estándar, este problema es:

Max. z = 2x1 + 3x2


(
x1 + x2 + x3 = 9
sujeto a
3x1 + x2 + x4 = 12
x1 , x2 , x3 , x4 ≥ 0.
Podemos obtener fácilmente una base inicial a partir de las variables de holgura. Esta
base es:  
1 0
B = (A3 , A4 ) =
0 1
       
1 0 9 9 x3
con lo que x∗B = B −1~b = · = = ,
0 1  12 12 x4
9
con z0 = ~cB · x∗B = (0, 0) · = 0. Veamos si es posible la mejora, para lo cual
12
tenemos que calcular los Yj y los costos marginales c0j para las variables no básicas:

    
−1 −1 1 0 1 1
Yj = B A j ⇒ Y1 = B A 1 = · =
0 1 3 3
     
−1 1 0 1 1
Y2 = B A 2 = · =
0 1 1 1
 
1
zj = ~cB Yj ⇒ z1 = ~cB · Y1 = (0, 0) =0 ⇒ c01 = c1 − z1 = 2 − 0 = 2
3
 
1
z2 = ~cB · Y2 = (0, 0) =0 ⇒ c02 = c2 − z2 = 3 − 0 = 3
1
Como los costos marginales son positivos, esto nos indica que es posible una mejora en
el valor de la función objetivo. Como 2 < 3 ⇒ x2 es la variable que debe entrar en la
base.
Veamos qué variable debe salir:
x∗βi x∗β x∗β x∗ x∗ 9 12 9 x∗
mı́n{ : i = 1, 2; yi2 > 0} = mı́n{ 1 , 2 } = mı́n{ 3 , 4 } = mı́n{ , } = = 3
yi2 y12 y22 y12 y22 1 1 1 y12
Luego, la primera variable básica x∗β1 = x∗3 , es la que debe salir.
La nueva base es:  
1 0
Be = (A2 , A4 ) =
1 1

8
       
e −1~ 1 0 9 9 x2
con lo que x∗Be=B b= · = = ,
−1  1 12 3 x4
9
con z0 = ~cBe · ~xBe = (3, 0) · = 27. Veamos si es posible la mejora. Volvemos a
3
calcular los Yj y los costos marginales c0j para las variables no básicas:

    
−1 e −1 A1 = 1 0 1 1
Yj = B A j ⇒ Y1 = B · =
−1 1 3 2
     
−1 1 0 1 1
Y3 = B e A3 = · =
−1 1 0 −1
 
1
zj = ~cBe Yj ⇒ z1 = ~cBe · Y1 = (3, 0) =3 ⇒ c01 = c1 − z1 = 2 − 3 = −1
2
 
1
z3 = ~cBe · Y3 = (3, 0) =3 ⇒ c03 = c3 − z3 = 0 − 3 = −3
−1
Como los costos marginales son no positivos (los de la base son nulos), no es posible la
mejora, y la solución actual nos da el valor óptimo de la función objetivo.

x∗ = (0, 9, 0, 3)T con z = 27.

En la resolución del problema anterior, hemos aplicado el método del Simplex, lo que
nos da una idea de los cálculos que son necesarios para su aplicación.
Este enfoque, que a primera vista parece bastante laborioso, veremos que se sim-
plifica considerablemente al desarrollarlo de forma tabular, lo que lo hará más sencillo
y sistemático en su aplicación a problemas de mayor tamaño.

3. Método del Simplex.


En esta sección utilizaremos la notación que apareció en el apartado 2.1. Suponga-
mos un problema de programación lineal planteado en forma estándar:

Max. z = ~c · ~x
s.a. A~x = ~b
~x ≥ 0

con A ∈ Mm×n , Rang(A) = m < n, y donde ~c y ~x son vectores fila y columna


respectivamente ~c = (c1 , . . . , cn ) y ~xT = (x1 , . . . , xn ).
En el método del simplex en forma tabular, dada una base, lleva asociada la tabla:

xβ k xB cB x1 ... xn

B −1~b ~cB B −1 A = Y

z = ~cB · B −1 · ~b c01 ... c0n

donde:

9
- xBk , es el valor de la solución básica

- xB , indica las variables que están en la base. Es la lista de variables básicas.

- z, es el valor de la función objetivo en la solución básica

- ~cB , son los costos de las variables básicas

- c0j , son los costos marginales. c0j = cj − ~cB Yj = cj − zj , con zj = ~cB · Yj , costos básicos
por componentes.

- En la tabla aparece el sistema Y · ~x = B −1~b. Recordemos que cada columna Yβi


correspondiente a la i-ésima variable básica es ei y que c0βi = 0.

Algoritmo del Simplex.


Para poder aplicar el algoritmo del Simplex tiene que existir factibilidad primal,
es decir que se tiene que cumplir que los valores de las variables básicas sean todos no
negativos.
Los pasos que sigue este algoritmo son los siguientes:

P1.- Dado cualquier problema de programación lineal, se transforma a la forma estándar,


introduciendo las variables de holgura y/o artificiales necesarias, para convertir
las desigualdades en igualdades, con lo que tenemos:

Max. z = ~c · ~x
s.a. A · ~x = ~b
~x ≥ 0

y la matriz A tiene una submatriz identidad, que corresponderá a la primera base.


Construimos la tabla inicial con los coeficientes del problema.

P2.- Comprobamos si la solución que tenemos es óptima. Para lo cual, todos los costos
marginales deben ser no positivos. Si algún costo marginal es positivo, entonces
la base no es óptima, y por lo tanto hay que cambiar de base.

P3.- Seleccionamos el vector de entrada en la base, eligiendo aquel cuyo costo marginal
sea mayor. En caso de empate, se coge uno cualquiera.

P4.- Una vez elegida la variable de entrada (xj ), seleccionamos la variable de salida
(xβk ), como aquella que hace mı́nimo el cociente:

x∗βi
mı́n { : yij > 0}
1≤i≤m yij

P5.- Mediante operaciones del método de Gauss, transformamos el vector asociado a


la variable de entrada en unitario2 , y volvemos al paso 2.
2
es decir, si la variable xj entra en la base en la posición i-ésima, esto es xj = xβi , tenemos que
aplicar el método de Gauss para conseguir que la columna Yj = Yβi = ei . Este método no va a afectar
al resto de columnas básicas, ası́ que como resultado obtendremos una submatriz identidad en las
columnas básicas. Notemos que entoces hemos obtenido un sistema de ecuaciones “amigable” para la
nueva base. La ventaja de utilizar el método de Gauss es que como la base no cambia mucho (se pasa

10
Ejemplo.
Max. z = 100x1 + 200x2
s.a. 3x1 + 2x2 ≤ 250
3x1 + 4x2 ≤ 300
2x1 + 6x2 ≤ 300
x1 , x2 ≥ 0
Solución:
Añadimos las variables de holgura:

Max. z = 100x1 + 200x2


s.a. 3x1 + 2x2 + x3 = 250
3x1 + 4x2 + x4 = 300
2x1 + 6x2 + x5 = 300
x1 , x2 , x3 , x4 , x5 ≥ 0

Construimos la tabla:
100 200 0 0 0
xBk xB cB x1 x2 x3 x4 x5
250 x3 0 3 2 1 0 0
300 x4 0 3 4 0 1 0
300 x5 0 2 6 0 0 1
z=0 100 200 0 0 0

Esta solución no es óptima porque hay costos marginales no negativos.


Entra en la base x2 ya que es el que tiene mayor costo marginal.
x∗β
Sale la variable que hace mı́nimo el cociente: k , con yk2 ≥ 0, es decir,
yk2
x∗β1 x∗β2 x∗β3 x3 x 4 x5 250 300 300
mı́n{ , , } = mı́n{ , , } = mı́n{ , , } = mı́n{125, 75, 50} = 50,
y12 y22 y32 y12 y22 y32 2 4 6
luego sale la variable: x5 .
Hacemos el cambio de base y arreglamos la tabla teniendo en cuenta que el vector
asociado a la variable x2 debe ser unitario.
100 200 0 0 0
xBk xB cB x1 x2 x3 x4 x5
150 x3 0 7/3 0 1 0 -1/3
100 x4 0 5/3 0 0 1 -2/3
50 x2 200 1/3 1 0 0 1/6
z=10.000 100/3 0 0 0 -100/3

de una base a otra adyacente), simplemente hay que dejar la columna correspondiente a xj como un
vector canónico, para lo que hay que hacer menos cuentas que como hemos explicado antes (invertir
la nueva base y multiplicar). Nótese que ambos métodos nos llevan al mismo resultado, ya que cada
paso del método de Gauss es equivalente a un producto de matriz a izda. y si el resultado es una
matriz con identidad en las columnas básicas es que hemos multiplicado por la inversa de la base.

11
Esta solución sigue sin ser óptima.
150 100 50 450 300
Entra x1 , y sale el que hace mı́n{ , , } = mı́n{ , , 150} = mı́n{64,3, 60, 150}
7/3 5/3 1/3 7 5
⇒ sale x4 . Reconstruimos la tabla:
100 200 0 0 0
xBk xB cB x1 x2 x3 x4 x5
10 x3 0 0 0 1 -7/5 3/5
60 x1 100 1 0 0 3/5 -2/5
30 x2 200 0 1 0 -1/5 3/10
z=12.000 0 0 0 -20 -20
Esta solución es óptima.
La solución que hemos obtenido es:
x1 = 60, x2 = 30, z = 12 000.
El valor de x3 es 10, y x3 es una variable de holgura, lo que significa que sobran 10
unidades del recurso 1. Además, x4 = x5 = 0.
Veamos que esta solución verifica las restricciones:
1.- 3x1 + 2x2 + x3 = 250 (3 ∗ 60 + 2 ∗ 30 + 10 = 180 + 60 + 10 = 250)
2.- 3x1 + 4x2 + x4 = 300 (3 ∗ 60 + 4 ∗ 30 + 0 = 180 + 120 + 0 = 300)
3.- 2x1 + 6x2 + x5 = 300 (2 ∗ 60 + 6 ∗ 30 + 0 = 120 + 180 + 0 = 300)
Ejercicios propuestos: (Resolverlos primero gráficamente)
1.-
Max z = 5 000x1 + 3 000x2
s. a: 3x1 + 5x2 ≤ 15
5x1 + 2x2 ≤ 10
x1 , x2 ≥ 0
solución: x1 = 20/19, x2 = 45/19, z = 235 000/19.
2.-
Max z = 4x1 + 3x2
s. a: 2x1 + 3x2 ≤ 6
−3x1 + 2x2 ≤ 3
2x2 ≤ 5
2x1 + x2 ≤ 4
x1 , x2 ≥ 0
solución: (x1 , x2 , x4 , x5 ) = (3/2, 1, 11/2, 3), z = 9.

4. Soluciones especiales en los problemas de pro-


gramación lineal.
Además de las soluciones que hemos visto hasta ahora, al resolver un problema se
nos pueden presentar otros tipos de soluciones “especiales”, que son las que vamos a
ver a continuación. También se estudiará cuál es el motivo de que se presente este caso
particular y cómo detectarlo en la tabla del Simplex.

12
§3.- Soluciones especiales en los problemas de programación lineal.

Además de las soluciones reales que hemos visto hasta ahora, al resolver
4.1. Soluciones noseacotadas.
un problema nos pueden presentar otros tipos de soluciones
"especiales", que son las que vamos a ver a continuación. También se
Puede ocurrir que la solución de un problema de programación lineal sea no acotada,
estudiará cuál es el motivo de que se presente este caso particular y cómo
es decir, que ladetectarlo
funciónen laobjetivo pueda tomar valores tan grandes como queramos,
tabla del Simplex.
tendiendo a infinito.
1.- Soluciones no acotadas.
* Esto sólo puede ocurrir cuando la región de factibilidad es no acotada.
Puede ocurrir que la solución de un problema de programación lineal sea
no acotada, es decir, que alguna (o varias) de las variables tomen valor
* En la tabla del Simplex se detecta cuando: al intentar hacer un cambio de base, no
infinito.
podemos hacer el test del cociente por ser todos los elementos de la columna de Y
* Estoa puede
correspondiente ocurrir cuando
la variable la región de
de entrada enfactibilidad
la base es≤no0.acotada.
* En la tabla del Simplex se detecta cuando: al intentar hacer un cambio de
Ejemplo: base, no podemos hacer el test del cociente por ser todos los elementos de
la columna correspondiente a la variable de entrada en la base 0.

Max Ejemplo:
z = 4x1 + 5x2
4
s. a: Max−2x
z =14 + 2xx22 ≥ 2
x1 +5
s. a:−x1 -2+xx1 2+2≤x2 4 2
1
x-ix≥
1 +0 x2  4
xi 0
-4 -1

4 5 0 -M
4 5 0 -M 0 0
xBk xB cB x1 x2 x3 w1 x4
xBk xB 2 cBw1 x1 0 -2x 2 x3 -1 w11 0 x4
2
4 x4 0 -1 1 0 0 1
2 w1 -M
z=0 -2 42 5 -1 0 10 0
4 x4 1 0 x2 -1 5 -11 1 0-1/2 0
1/2 0 1
3 x4 0 0 0 1/2 -1/2 1
z=-2M z=5 4-2M 5+2M
9 0 -M5/2 0
-M-5/2 0 0
4 x2 5 -1 1 0 0 1
1 x2 6
5x -1 0 0
1 0
-1/2 1 1/2
-1 2
0
3
3 x4 0z = 5 0 9
0 0
1/2 0 -1/2
-M -5
1
z=5 9 0 5/2 -M-5/2 0
4 x2 5 -1 1 0 0 1
14
6 x3 0 0 0 1 -1 2
z=20 9 0 0 -M -5

Tendrı́a que entrar x1 en la base, pero no podemos hacer el test del cociente, para ver
qué variable sale de la base. Por lo tanto la solución es NO ACOTADA.

Justificación.
Cuando explicamos la regla de la variable de salida, hicimos una observación de que
tratarı́amos más adelante el caso de que la variable de entrada, xj , tuviera la columna
Yj con todos sus componentes ≤ 0. Este es el momento de tratarlo. Supongamos que
tenemos una base B con solución básica x∗B . Sean (xβ1 , . . . , xβm ) variables básicas y
la variable no básica xj tiene coste marginal c0j > 0. Asumamos que cuando vamos a
meter xj en la base no podemos hacer el test del cociente porque Yj ≤ 0.
Entonces, el sistema  
xβ1
 · · ·  = x∗B − Yj xj ,
xβ m

13
tiene para valores de xj > 0 tan grandes como queramos soluciones factibles con
(xβ1 , . . . , xβmTendría
) cadaque
vezentrar
más xgrandes. Nótese que las soluciones factibles de dicho sistema
1 en la base, pero no podemos hacer el test del
(y el resto decociente,
variables igual a cero) sondepuntos
para ver qué variable sale dellodominio
la base. Por con valor
tanto la solución es de z = z0 + c0j xj
tan grande como NO ACOTADA.
queramos.

4.2. Solución
2.- Soluciónóptima múltiple.
óptima múltiple.
Hay problemas de programación
Hay problemas de programación lineal cuya
lineal cuya solución
solución nopunto,
no es un es un punto, sino infinitos,
sino
los infinitos
ya que el óptimo puedepuntos de un hiperplano
alcanzarse en (recta
variosen vértices
 ).
2
o existir direcciones extremas d~
con ~c · d~ = 0* (recordar
Esto ocurreTeorema
cuando la 7función
de tema 1). coincide en un segmento
objetivo
rectilíneo con alguna de las restricciones.
* En la tabla, se detecta una solución múltiple, si en la solución óptima hay alguna
* En
variable no la tabla,cuyo
básica se detecta
costounamarginal
solución múltiple,
es igualsi en a
la cero.
solución óptima hay
alguna variable no básica cuyo costo marginal es igual a cero.
En este caso, las caso,
En este infinitas soluciones
las infinitas solucionesson losinfinitos
son los infinitos
puntospuntos que se pueden escribir
que se pueden
como combinación lineal
escribir como convexalineal
combinación de convexa
las soluciones básicas
de las soluciones halladas3 .
halladas.
Ejemplo:

Ejemplo: 5

Max z = 5x1 + 2x2 3 A


Max z = 5x1 + 2x2
s. a: 6x1 + 10x2  30
s. a: 6x110x +1 10x+4x22 ≤
20 30 B
10xx11 ,x+2 4x
0 2 ≤ 20
x1 , x2 ≥ 0 2 5

La función objetivo
La función es una
objetivo recta
es una rectaque
que se desplaza
se desplaza paralela
paralela a la segunda restricción,
a la segunda
y alcanza elrestricción,
óptimo ylaalcanza
llegar al punto
el óptimo B.alPero
la llegar a Pero
punto B. la vez quequetoca
a la vez toca en ese punto, toca
en ese punto,
también en todos toca también
los puntos delensegmento
todos los puntos
[A, del
B].segmento [A,B].
Luego lasLuego
soluciones del problema
las soluciones del problema sonsontodos
todos los
los puntos
puntos de dedicho
dicho segmento. E. d.:
2
{soluciones}segmento.
= {x ∈ R | x = λA + (1 − λ)B, λ ∈ [0, 1]}. Veámoslo:
E. d.: {soluciones}={x/ x= A+(1-)B, 5 [0,1]}
2 0 0
Veámoslo:
xBk xB cB x1 x2 x3 x4
30 x3 0 6 10 1 0
20 x4 0 10 4 0 1
15
z=0 5 2 0 0
18 x3 0 0 38/5 1 -3/5
2 x1 5 1 2/5 0 1/10
z=10 0 0 0 -1/2

Hemos obtenido una solución óptima en el punto (2, 0), pero el costo marginal de la
variable x2 es cero, y por lo tanto podemos hacer un cambio de base: entra x2 , y sale
x3 . Entonces:
3
más combinación cónica de las direcciones extremas perpendiculares a ~c, si las hubiera.

14
5 2 0 0
xBk xB cB x1 x2 x3 x4
45/19 x2 2 0 1 5/38 -3/38
20/19 x1 5 1 0 -1/19 5/38
z=10 0 0 0 -1/2
Al hacer este cambio, hemos obtenido otro punto (20/19, 45/19), en el que la función
objetivo alcanza el mismo valor óptimo. Por lo tanto, la función objetivo alcanza el
óptimo en todos los puntos del segmento:
[(2, 0), (20/19, 45/19)] , y ese valor óptimo es z = 10.
E. d. el conjunto de soluciones es:
  
20 45 20 45
{λ(2, 0) + (1 − λ)( , ) : λ ∈ [0, 1]} = 2λ + (1 − λ) , (1 − λ) : λ ∈ [0, 1]
19 19 19 19

4.3. Problemas sin solución.


En alguna ocasión nos podemos encontrar con un problema sin solución.
* Esto ocurre cuando las restricciones del problema son inconsistentes, porque no se
pueden verificar todas a la vez (o lo que es lo mismo, cuando la región de factibilidad
es el vacı́o).
* En la tabla del Simplex se detecta un problema sin solución, cuando se llega a una
solución óptima con variables artificiales no nulas.

4.4. Problemas degenerados.


Cuando hay un empate entre las variables que tienen que salir de la base, la nueva
solución básica resultante, será una solución degenerada.
En este caso, se puede producir un ciclo y no llegar nunca a la solución óptima.
Para evitar esto, a la hora de elegir la variable que sale de la base (en caso de empate),
se utiliza el llamado método léxico-gráfico.
Método léxico-gráfico.
Cuando aplicamos el método del Simplex para resolver un problema de programación
lineal, puede ocurrir que, al aplicar el criterio de salida:
x∗βi
mı́n { : yij > 0},
1≤i≤m yij

obtengamos un empate. Es decir, que haya más de una variable para la que se obtenga
el mı́nimo.
Para deshacer el empate hacemos lo siguiente:
1.- Sea I={ı́ndices de las variables de la base}
x∗
Calculamos mı́n1≤i≤m { yβiji : yij > 0, βi ∈ I}
* Si el mı́nimo es único, esa variable sale de la base.
* En caso contrario, consideramos el conjunto:
I1 = {i ∈ I, para los que (x∗βi /yij > 0), es mı́nimo}, subconjunto de I.

15
2.- Construimos una nueva tabla, con las filas correspondientes a los elementos de I1 ,
y de modo que las m primeras columnas sean las de las variables que tenı́an la
matriz identidad en la primera tabla (normalmente de holgura o artificiales), y la
última sea la de la variable de entrada.

3.- Calculamos : mı́n{ yyi1


ij
/i ∈ I1 }
* Si ese mı́nimo es único, la variable correspondiente sale de la base.
* En caso contrario, consideramos el conjunto:
yi1
I2 = {i ∈ I1 , para los que ( /i ∈ I1 ), es mı́nimo}, subconjunto de I1 .
yij

4.- Calculamos: mı́n{ yyi2


ij
/i ∈ I2 }
y proseguimos de forma análoga al paso 3.

Llegará un momento en el que se deshace el empate.


Ejemplo.
Max. z = 3/4x1 − 20x2 + 1/2x3 − 6x4
s. a: x3 ≤ 1
1/4x1 − 8x2 − x3 + 9x4 ≤ 0
1/2x1 − 12x2 − 1/2x3 + 3x4 ≤ 0
xi ≥ 0

3/4 -20 1/2 -6 0 0 0


xBk xB cB x1 x2 x3 x4 x5 x6 x7
1 x5 0 0 0 1 0 1 0 0
0 x6 0 1/4 -8 -1 9 0 1 0
0 x7 0 1/2 -12 -1/2 3 0 0 1
z=0 3/4 -20 1/2 -6 0 0 0

0 0
Entra x1 , y sale mı́n{ 1/4 , 1/2 } = 0.
Aplicamos el método lexico gráfico:

1.- I1 = {6, 7}.

xB x5 x6 x7 x1
2.- x6 0 1 0 1/4
x7 0 0 1 1/2

3.- mı́n{ yi5


yi1
0
/i ∈ I1 } = mı́n{ 1/4 0
, 1/2 }, no se deshace el empate.
I2 = {6, 7},
mı́n{ yi6
yi1
1
/i ∈ I2 } = mı́n{ 1/4 0
, 1/2 } = 0, luego sale x7 .

16
xB k xB cB x1 x2 x3 x4 x5 x6 x7
1 x5 0 0 0 1 0 1 0 0
0 x6 0 0 -2 -3/4 15/2 0 1 -1/2
0 x1 3/4 1 -24 -1 6 0 0 2
z=0 0 -2 5/4 -21/2 0 0 -3/2
1 x3 1/2 0 0 1 0 1 0 0
3/4 x6 0 0 -2 0 15/2 3/4 1 -1/2
1 x1 3/4 1 -24 0 6 1 0 2
z=5/4 0 -2 0 -21/2 -5/4 0 -3/2

La solución óptima es: x1 = 1, x3 = 1, z = 5/4.


Veamos lo que hubiera pasado si sacamos x6 en lugar de x7 :

xBk xB cB x1 x2 x3 x4 x5 x6 x7
1 x5 0 0 0 1 0 1 0 0
0 x1 3/4 1 -32 -4 36 0 4 0
0 x7 0 0 4 3/2 -15 0 -2 1
z=0 0 4 7/2 -33 0 -3 0
1 x5 0 0 0 1 0 1 0 0
0 x1 3/4 1 0 *8 -84 0 -12 8
0 x2 -20 0 1 3/8 -15/4 0 -1/2 1/4
z=0 0 0 2 -18 0 -1 -1
1 x5 0 -1/8 0 0 21/2 1 3/2 -1
0 x3 1/2 1/8 0 1 -21/2 0 -3/2 1
0 x2 -20 -3/64 1 0 3/16 0 1/16 -1/8
z=0 -1/4 0 0 3 0 2 -3
1 x5 0 5/2 -56 0 0 1 -2 6
0 x3 1/2 -5/2 56 1 0 0 *2 -6
0 x4 -6 -1/4 16/3 0 1 0 1/3 -2/3
z= 0 1/2 -16 0 0 0 1 -1
xBk xB cB x1 x2 x3 x4 x5 x6 x7
1 x5 0 0 0 1 0 1 0 0
0 x6 0 -5/4 28 1/2 0 0 1 -3
0 x4 -6 1/6 -4 -1/6 1 0 0 1/3
z= 0 7/4 -44 -1/2 0 0 0 2

Ahora, entra en la base la variable x7 y sale la variable x4 . Por tanto, hemos vuelto
a llegar a la base de partida (x5 , x6 , x7 ), formando un ciclo.
Nótese que se han producido empates en la regla de la variable de salida, aparte de
en la primera tabla, en otras tablas (*). Si hubiésemos desempatado de modo diferente,
hubiéramos llegado a la solución óptima, evitando el ciclo.

17

También podría gustarte