Академический Документы
Профессиональный Документы
Культура Документы
2. El Metodo Simplex
Considere el siguiente problema
Maximize z = 3 x1 + 2 x2
x1,x2
s.t. 5 x1 + 10 x2 +s1 = 30
10 x1 + 5 x2 +s2 = 30
x1 + x2 +s3 = 3.5
Cuya representacion grafica es
x2
6
x1
1 2 3 4 5 6
2 simplex.nb
Veamos como podemos lograr los puntos anteriores basados en lo que ya hicimos con el metodo algebraico. Considere el siguiente problema:
Normal Normalizado
Maximize z = 3 x1 + 2 x2 Maximize z = 3 x1 + 2 x2
x1,x2 x1,x2
s.t. 5 x1 +10 x2 <= 30 s.t. 5 x1 +10 x2 +s1 = 30
10 x1 + 5 x2 <= 30 10 x1 + 5 x2 + s2 = 30
x1 + x2 <= 3.5 x1 + x2 + s3 = 3.5
Supongamos que nos encontramos en la solucion basica inicial xo . El metodo Simplex es una representacion tabular de P, analizemos cada una de las
partes de este tableau. Para esto colorearemos las diferentes partes que lo integran para despues dar una explicacion y si es necesario explicar como son
calculados.
Cj 3 2 0 0 0
CXB XB x1 x2 s1 s2 s3 RHS
0 s1 5 10 1 0 0 30
0 s2 10 5 0 1 0 30
0 s3 1 1 0 0 1 3.5
cj - zj 3 2 0 0 0 0
- Conjunto de variables de P,
Observa que en cada una de las columnas base hay solo un uno, es decir son columnas unitarias y por lo tanto, esta variable basica solo existe en esa
ecuacion. Esto quiere decir que cada una de las variables basicas pueden ser expresadas de manera directa en terminos de las variables no basicas. En este
caso en x0 , tenemos que las variables basicas son s1 , s2 , y s3 , mientras que x1 y x2 seran las variables no basicas. Es decir s1 , s2 , y s3 pueden ser expresados
en terminos de x1 y x2 . Comprobemoslo:
s1 = 30 - 5 x1 - 10 x2
s2 = 30 - 10 x1 - 5 x2
s3 = 3.5 - x1 - x2
Observa que solamente puede haber m variables basicas, y en nuestro caso tenemos n variables, y en este vaso n > m. Solo podemos resolver sistemas de
m m variables. El metodo Simplex se basa en una serie de iteraciones en las cuales esta viajando entre soluciones basicas contiguas hasta que ya no es
posible moverse. A cada una de estas soluciones basicas factibles le corresponde un tableau, recordemos el tableau inicial para este problema.
simplex.nb 3
Cj 3 2 0 0 0
XB x1 x2 s1 s2 s3 RHS
0 s1 5 10 1 0 0 30
HT0L
0 s2 10 5 0 1 0 30
0 s3 1 1 0 0 1 3.5
cj - zj 3 2 0 0 0 0
Necesitamos movernos a otra BFS. Para esto necesitamos entrar una nueva variable a la base y como solo podemos tener m variables, entonces necesitare-
mos sacar otra variable de la base. El criterio para determinar la variable que entra es encontrar el c j - z j positivo mayor si existe sino hemos terminado,
i.e. c j - z j > 0, c j - z j > ci - zi , i ¹ j. En este caso vemos que c1 - z1 = 3 es el que cumple tal condicion y por lo tanto la variable asociada a tal columna
es la que entra i.e. x1 . Por otro lado para saber cual es la variable que sale de la base, tenemos que ver cual es la restriccion que se violaria primero al
movernos en la direccion de la variable que entra, que en este caso es x1 . Este criterio lo evaluamos haciendo la division termino a termino de la columna
RHS entre la columna de la variable que entra, en este caso x1 , y saldra la variable que relacionada con el renglon donde resulte la menor razon. Esto es,
para nuestro caso:
30 5
30 30 3.5
argmax RHS A1 = argmax 30 10 = argmaxJ , , N = argmaxH6, 3, 3.5L = 2
5 10 1
3.5 1
Entra x1 y sale s2, como lo señ alan
las flechas
Cj 3 2 0 0 0
XB x1 x2 s1 s2 s3 RHS
0 s1 5 10 1 0 0 30
HT0L
0 s2 10 5 0 1 0 30
0 s3 1 1 0 0 1 3.5
cj - zj 3 2 0 0 0 0
Ya hemos encontrado cual variable entra y cual variable sale. Entra la variable no basica asociada a la primera columna y sale la variable basica asociada a
la segunda columna, sin embargo como reconfiguramos el tableau con esta informacion? Lo que sabemos es que las columnas asociadas a las variables
basicas son unitarias, con el uno en el renglon asociado a esa variable. La solucion a este problema nos la da el procedimiento conocido como pivoteo
parcial, que consiste en transformar la columna asociada a la variable que entra en una columna unitaria aplicando la eliminacion Gaussiana. Reformamos
todos los renglones de acuerdo a la eliminacion, incluido el renglon c j - z j , para acelerar el proceso de calculo. Aplicando este procedimiento, llegamos al
tableau T1.
Cj 3 2 0 0 0
XB x1 x2 s1 s2 s3 RHS
15 1
0 s1 0 1 - 0 15
2 2
1 1
3 x1 1 0 0 3 (T1)
2 10
1 1
0 s3 0 0 - 1 0.5
2 10
1 3
cj - zj 0 0 - 0 -9
2 10
Aplicando los criterios anteriormente mencionados, concluimos que entra x2 y sale s3, con lo cual el nuevo tableau sera el T2
Cj 3 2 0 0 0
XB x1 x2 s1 s2 s3 RHS
0 s1 0 0 1 1 -15 7.5
1
3 x1 1 0 0 -1 2.5 (T2)
5
1
2 x2 0 1 0 - 2 1.
5
1
cj - zj 0 0 0 - -1 -9.5
5
Como ya todas las entradas en el ultimo renglon son cero o negativas, entonces ya no hay mayor ganancia en cambiar la base. Esto es, hemos llegado a la
solucion optima. Veamos en forma grafica que paso en esta serie de pivoteos que realizamos.
4 simplex.nb
a
Cj 3 2 0 0 0
b XB x1 x2 s1 s2 s3 RHS
0 s1 5 10 1 0 0 30
f
HT0L
0 s2 10 5 0 1 0 30
0 s3 1 1 0 0 1 3.5
x2 cj - zj 3 2 0 0 0 0
6
Cj 3 2 0 0 0
XB x1 x2 s1 s2 s3 RHS
15 1
5 0 s1 0 1 - 0 15
2 2
1 1
3 x1 1 0 0 3 HT1L
2 10
4 1 1
0 s3 0 0 - 1 0.5
2 10
1 3
cj - zj 0 0 - 0 -9
3 2 10
Cj 3 2 0 0 0
2
XB x1 x2 s1 s2 s3 RHS
0 s1 0 0 1 1 -15 7.5
1
3 x1 1 0 0 -1 2.5 HT2L
5
1 T2 1
2 x2 0 1 0 - 2 1.
5
1
cj - zj 0 0 0 - -1 -9.5
T0 T1 5
x1
1 2 3 4 5 6
A ' Î Rm Rn+m
1 simplexPivot(A, r, c)
2 R Length[A];
3 C Length[A[[1]]];
A@@i,jDD A@@r,jDD A@@i,cDD
4 return TableBIf Bi r, , A@@i, jDD - F, 8i, R<, 8j, C<F
A@@r,cDD A@@r,cDD
1 Simplex(A, RHS, c)
2 AH A I L
3 cH c O L
A RHS
4 A'K O
c 0
5 zj = < cB ¬, Aj >
6 j greaterPositiveIcj - zj )
7 si no existe j valido SALIR con SOLUCION
8 i smallestRatioIRHS, Aj )
9 si no existe i SALIR SIN SOLUCION
10 A'simplexPivot(A',i,j)
11 ir a 5
simplex.nb 5
1 Simplex(A, RHS, c)
2 AH A I L
3 cH c O L
A RHS
4 A'K O
c 0
5 zj = < cB ¬, Aj >
6 j greaterPositiveIcj - zj )
7 si no existe j valido SALIR con SOLUCION
8 i smallestRatioIRHS, Aj )
9 si no existe i SALIR SIN SOLUCION
10 A'simplexPivot(A',i,j)
11 ir a 5
Inicializacion
Minimize z = 3 x1 + 2 x2
x1,x2
s.t. 5 x1 +10 x2 <= 30
10 x1 + 5 x2 <= 30
x1 + x2 <= 3.5
20 x1 + 4 x2 >= 20
4 x1 + 20 x2 >= 20
Graficamente, la region factible es mostrada en azul.
6 simplex.nb
x2
6
x1
1 2 3 4 5 6
Ya resolvimos el aspecto de como tratar problemas de Minimizacion con la metodologia hasta ahora desarrollada. Sin embargo, no tenemos una solucion
basica inicial explicita i.e. XB , asumiendo que no tenemos acceso a esta grafica. Como podemos hacer para empezar las iteraciones del Simplex? Recorde-
mos, que el simplex siempre parte de una solucion basica factible y de ahi empieza a recorrer BFSs que mejoran la funcion objetivo. Replanteemos nuestro
problema expresandolas en terminos de desigualdades del tipo "≤".
Maximize z = -3 x1 - 2 x2
x1,x2
s.t. 5 x1 +10 x2 +s1 = 30
10 x1 + 5 x2 + s2 = 30
x1 + x2 + s3 = 3.5
20 x1 + 4 x2 - e1 = 20
4 x1 + 20 x2 - e2 = 20
x1, x2, s1, s2, s3, e1, e2 ³ 0
En el metodo de las dos fases, la primera fase introduce variables artificiales y se crea una nueva funcion objetivo basada en estas variables. El fin de la
primera fase es el de sacar de la base a las variables artificiales. Para nuestro caso, el problema que estamos tratando seria convertido al siguiente:
Maximize z = -a1 - a2
x1, x2, a1,a2
Cj 0 0 0 0 0 0 0 -1 -1
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
0 s1 5 10 1 0 0 0 0 0 0 30
0 s2 10 5 0 1 0 0 0 0 0 30
0 s3 1 1 0 0 1 0 0 0 0 3.5 T0
-1 a1 20 4 0 0 0 -1 0 1 0 20
-1 a2 4 20 0 0 0 0 -1 0 1 20
cj - zj 24 24 0 0 0 -1 -1 0 0 -
Cj 0 0 0 0 0 0 0 -1 -1
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
1 1
0 s1 0 9 1 0 0 0 - 0 25
4 4
1 1
0 s2 0 3 0 1 0 0 - 0 20
2 2
4 1 1
0 s3 0 0 0 1 0 - 0 2.5 T1
5 20 20
1 1 1
0 x1 1 0 0 0 - 0 0 1
5 20 20
96 1 1
-1 a2 0 5
0 0 0 -1 - 1 16
5 5
92 3 23
cj - zj 0 0 0 0 -1 - 0 -
5 20 20
Cj 0 0 0 0 0 0 0 -1 -1
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
5 15 5 15 35
0 s1 0 0 1 0 0 - -
32 32 32 32 2
15 5 15 5 35
0 s2 0 0 0 1 0 - -
32 32 32 32 2
1 1 1 1 T2
0 s3 0 0 0 0 1 - - 1.83333
24 24 24 24
5 1 5 1 5
0 x1 1 0 0 0 0 - -
96 96 96 96 6
1 5 1 5 5
0 x2 0 1 0 0 0 - -
96 96 96 96 6
1 1 23 23
cj - zj 0 0 0 0 0 - - - - -
24 24 24 24
Nota que ahora ya han salido de la base a1 y a2. Hemos completado la primera fase y ahora tenemos que aplicar el simplex normal ya que estamos con una
solucion basica factible en donde XB = 8x1 , x2 , s1 , s2 , s3 < y Xn = 8e1 , e2 <. Podemos olvidarnos entonces de las columnas pertenecientes a a1 y a2 y
restablecer nuestra funcion objetivo inicial en el encabezado. Con esto en mente nuestro nuevo tableau sera T3.
8 simplex.nb
Cj -3 -2 0 0 0 0 0
XB x1 x2 s1 s2 s3 e1 e2 RHS
5 15 35
0 s1 0 0 1 0 0
32 32 2
15 5 35
0 s2 0 0 0 1 0
32 32 2
0 s3 0 0 0 0 1
1 1
1.83333 T3
24 24
5 1 5
-3 x1 1 0 0 0 0 -
96 96 6
1 5 5
-2 x2 0 1 0 0 0 -
96 96 6
1 1 25
cj - zj 0 0 0 0 0 - - -
24 24 6
Observa que no hay ningun valor positivo en el ultimo renglon que nos indique que sea apropiado entrar una nueva variable. Podemos concluir entonces
que la primera fase nos ha llevado a la solucion optima. Este resultado es la excepcion y no la regla.
El metodo Big M
Sin embargo existe una alternativa a este metodo llamado el metodo de la M grande, debido a que utiliza una funcion objetivo modificada en la cual las
variables artificiales si tienen cierto peso en la funcion objetivo. Estos coeficientes son lo suficientemente grandes para hacer que el Simplex las considere
negativas para ser tratadas dentro de la funcion objetivo y las sacara de la base. Veamos que sucede con nuestro ejemplo, este puede ser replanteado como
Maximize z = -3 x1 - 2 x2 - M a1 - M a2
x1,x2
s.t. 5 x1 +10 x2 +s1 = 30
10 x1 + 5 x2 + s2 = 30
x1 + x2 + s3 = 3.5
20 x1 + 4 x2 - e1 + a1 = 20
4 x1 + 20 x2 - e2 + a2 = 20
En esta formulacion, M es un numero lo suficientemente grande que hara que sea rechazado como contribuyente en la funcion objetivo. Obtengamos el
tableau inicial:
Cj -3 -2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
0 s1 5 10 1 0 0 0 0 0 0 30
0 s2 10 5 0 1 0 0 0 0 0 30
0 s3 1 1 0 0 1 0 0 0 0 3.5
-M a1 20 4 0 0 0 -1 0 1 0 20
-M a2 4 20 0 0 0 0 -1 0 1 20
cj - zj 24 M - 3 24 M - 2 0 0 0 -M -M 0 0 -
La variable a entrar a la base es entonces x2, y la variable a salir es a2. Esto nos lleva al siguiente tableau.
Cj -3 -2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
1 1
0 s1 3 0 1 0 0 0 0 - 20
2 2
1 1
0 s2 9 0 0 1 0 0 0 - 25
4 4
4 1 1
0 s3 0 0 0 1 0 0 - 2.5
5 20 20
96 1 1
-M a1 5
0 0 0 0 -1 1 - 16 ®
5 5
1 1 1
-2 x2 1 0 0 0 0 - 0 1
5 20 20
1 1 1
cj - zj H-13 + 96 ML 0 0 0 0 -M H-1 + 2 ML 0 H2 - 24 ML -
5 10 20
Nota que ahora a1 no ingresara a la base ya que el coeficiente en el ultimo renglon es muy negativo. La variable a entrar a la base es entonces x1, y la
variable a salir es a1. Esto nos lleva al siguiente tableau.
simplex.nb 9
Nota que ahora a1 no ingresara a la base ya que el coeficiente en el ultimo renglon es muy negativo. La variable a entrar a la base es entonces x1, y la
variable a salir es a1. Esto nos lleva al siguiente tableau.
Cj -3 -2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
5 15 5 15 35
0 s1 0 0 1 0 0 - -
32 32 32 32 2
15 5 15 5 35
0 s2 0 0 0 1 0 - -
32 32 32 32 2
1 1 1 1
0 s3 0 0 0 0 1 - - 1.83333
24 24 24 24
5 1 5 1 5
-3 x1 1 0 0 0 0 - -
96 96 96 96 6
1 5 1 5 5
-2 x2 0 1 0 0 0 - -
96 96 96 96 6
13 7 1 7
cj - zj 0 0 0 0 0 - - H13 - 96 ML -M -
96 96 96 96
Nota que ahora a2 no ingresara a la base ya que el coeficiente en el ultimo renglon es muy negativo. Observa que ahora es imposible que las variables
artificiales entren a la base. Mas aun ninguna otra variable puede entrar a la base por lo cual podemos afirmar que hemos encontrado la BFS optima. Si no
fuera asi, entonces tendriamos que iniciar con el simplex estandard cuyo tableau inicial es:
Cj -3 -2 0 0 0 0 0
XB x1 x2 s1 s2 s3 e1 e2 RHS
5 15 35
0 s1 0 0 1 0 0
32 32 2
15 5 35
0 s2 0 0 0 1 0
32 32 2
1 1
0 s3 0 0 0 0 1 1.83333
24 24
5 1 5
-3 x1 1 0 0 0 0 -
96 96 6
1 5 5
-2 x2 0 1 0 0 0 -
96 96 6
13 7 25
cj - zj 0 0 0 0 0 - - -
96 96 6
Observa que ahora hemos especificado el valor de la funcion objetivo, ya que este debera ir mejorando conforme mas y mas iteraciones realize el Simplex.
Comprobemoslo con Mathematica
Minimize@3x1+2x2,
5 x1 + 10 x2 £ 30 &&
10 x1 + 5 x2 £ 30 &&
x1 + x2 £ 3.5 &&
20 x1 + 4 x2 ³ 20 &&
4 x1 + 20 x2 ³ 20,
8x1, x2<
D
84.16667, 8x1 ® 0.833333, x2 ® 0.833333<<
Modifiquemos el problema cambiando la direccion de optimizacion convirtiendolo en un problema de Maximizacion restringido por la misma area
factible. Es decir, graficamente, la region factible sigue siendo la azul.
Maximize z = 3 x1 + 2 x2
x1,x2
s.t. 5 x1 +10 x2 <= 30
10 x1 + 5 x2 <= 30
x1 + x2 <= 3.5
20 x1 + 4 x2 >= 20
4 x1 + 20 x2 >= 20
Reformulemos el programa para aplicar la metodologia M grande
10 simplex.nb
Maximize z = 3 x1 + 2 x2 - M a1 - M a2
x1,x2
s.t. 5 x1 +10 x2 +s1 = 30
10 x1 + 5 x2 + s2 = 30
x1 + x2 + s3 = 3.5
20 x1 + 4 x2 - e1 + a1 = 20
4 x1 + 20 x2 - e2 + a2 = 20
En esta formulacion, M es un numero lo suficientemente grande que hara que sea rechazado como contribuyente en la funcion objetivo. Obtengamos el
tableau inicial:
Cj 3 2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
0 s1 5 10 1 0 0 0 0 0 0 30
0 s2 10 5 0 1 0 0 0 0 0 30
0 s3 1 1 0 0 1 0 0 0 0 3.5
-M a1 20 4 0 0 0 -1 0 1 0 20
-M a2 4 20 0 0 0 0 -1 0 1 20
cj - zj 24 M + 3 24 M + 2 0 0 0 -M -M 0 0 -
La variable a entrar a la base es entonces x1, y la variable a salir es a1. Esto nos lleva al siguiente tableau.
Cj 3 2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
1 1
0 s1 0 9 1 0 0 0 - 0 25
4 4
1 1
0 s2 0 3 0 1 0 0 - 0 20
2 2
4 1 1
0 s3 0 0 0 1 0 - 0 2.5
5 20 20
1 1 1
3 x1 1 0 0 0 - 0 0 1
5 20 20
96 1 1
-M a2 0 5
0 0 0 -1 - 1 16
5 5
1 1 3
cj - zj 0 H7 + 96 ML 0 0 0 H3 + 4 ML -M - H1 + 8 ML 0 -3 H1 + 8 ML
5 20 20
La variable a entrar a la base es entonces x2, y la variable a salir es a2. Esto nos lleva al siguiente tableau.
Cj 3 2 0 0 0 0 0 -M -M
XB x1 x2 s1 s2 s3 e1 e2 a1 a2 RHS
5 15 5 15 35
0 s1 0 0 1 0 0 - -
32 32 32 32 2
15 5 15 5 35
0 s2 0 0 0 1 0 - -
32 32 32 32 2
1 1 1 1
0 s3 0 0 0 0 1 - - 1.83333
24 24 24 24
5 1 5 1 5
3 x1 1 0 0 0 0 - -
96 96 96 96 6
1 5 1 5 5
2 x2 0 1 0 0 0 - -
96 96 96 96 6
13 7 13 7
cj - zj 0 0 0 0 0 - -M - -M -
96 96 96 96
Nota que ahora a2 no ingresara a la base ya que el coeficiente en el ultimo renglon es negativo. Mas aun, observa que ahora es imposible que las variables
artificiales entren a la base. Sin embargo, a diferencia del caso de minimizacion, e1 y e2 pueden entrar a la base. Entonces tenemos que seguir con el
simplex estandard cuyo tableau inicial es:
simplex.nb 11
Cj 3 2 0 0 0 0 0
XB x1 x2 s1 s2 s3 e1 e2 RHS
5 15 35
0 s1 0 0 1 0 0
32 32 2
15 5 35
0 s2 0 0 0 1 0 32
32 2
1 1
0 s3 0 0 0 0 1 1.83333
24 24
5 1 5
3 x1 1 0 0 0 0 -
96 96 6
1 5 5
2 x2 0 1 0 0 0 -
96 96 6
13 7 25
cj - zj 0 0 0 0 0
96 96 6
Entra e1 y sale s2
Cj 3 2 0 0 0 0 0
XB x1 x2 s1 s2 s3 e1 e2 RHS
1 5 35
0 s1 0 0 1 - 0 0
3 12 3
32 1 112
0 e1 0 0 0 0 1
15 3 3
4 1
0 s3 0 0 0 - 1 0 36
0.277778
45
1 1 25
3 x1 1 0 0 0 0
9 36 9
1 1 4
2 x2 0 1 0 - 0 0 -
45 18 9
13 1 83
cj - zj 0 0 0 - 0 0
45 36 9
Entra e2 y sale s3
Cj 3 2 0 0 0 0 0 0
XB x1 x2 s1 s2 s3 e1 e2 RHS
0 s1 0 0 1 1 -15 0 0 7.5
16
0 e1 0 0 0 -12 1 0 34.
5
16
0 e2 0 0 0 - 36 0 1 10.
5
1
3 x1 1 0 0 -1 0 0 2.5
5
1
2 x2 0 1 0 - 2 0 0 1.
5
1
cj - zj 0 0 0 - -1 0 0 9.5
5
Dado que todos las entradas del renglon c j - z j son <= 0, entonces podemos decir que ya no hay variables que puedan mejorar el valor de la funcion
objetivo y hemos terminado con la solucion x* = {2.5, 1} y f(x*) = 9.5. Comprobemoslo con Mathematica
Maximize@3x1+2x2,
5 x1 + 10 x2 £ 30 &&
10 x1 + 5 x2 £ 30 &&
x1 + x2 £ 3.5 &&
20 x1 + 4 x2 ³ 20 &&
4 x1 + 20 x2 ³ 20,
8x1, x2<
D
A estas alturas creo que ya apreciaras las bondades de los solvers al permitirte introducir los LPs en cualquier formato e.g. Min, Max, ≥, ≤, , …
Iteracion
12 simplex.nb
Iteracion
Durante esta etapa solo un aspecto debe ser considerado el cual es conocido como
Degeneracion
Maximize z = 3 x1 + 2 x2
x1,x2
s.t. 5 x1 +10 x2 £ 30
10 x1 + 5 x2 £ 60
El tableau inicial es el siguiente:
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
0 s1 5 10 1 0 30 ?
0 s2 10 5 0 1 60 ?
cj - zj 3 2 0 0 0
Es claro que en el problema anterior, debemos entrar a x1, sin embargo esto nos lleva a decidir entre sacar s1 o s2, ya que la razon entre el RHS y ellas es
la misma. Ya que hay un empate este lo resolveremos de manera arbitraria. Veamos que pasa, comenzemos sacando a s1
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
0 s1 5 10 1 0 30
0 s2 10 5 0 1 60
cj - zj 3 2 0 0 0
Pivotendo llegamos se produce el siguiente tableau. Observa que el empate anterior produce un cero en la columna RHS asociado a la variable que no salio
(o no salieron si fue un empate multiple).
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
1
3 x1 1 2 0 6
5
0 s2 0 -15 -2 1 0
3
cj - zj 0 -4 - 0 -18
5
Ahora no hay opcion para entrar variables, ya que todas las entradas del ultimo renglon son negativas. La solucion sera x*={6,0} con un valor para la
funcion objetivo de f(x*)=18.Ahora veamos que habria pasado si hubiesemos optado por sacar primero a s2. Es decir nuestro tableau inicial seria.
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
0 s1 5 10 1 0 30
0 s2 10 5 0 1 60
cj - zj 3 2 0 0 0
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
15 1
0 s1 0 1 - 0
2 2
1 1
3 x1 1 0 6
2 10
1 3
cj - zj 0 0 - -18
2 10
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
2 1
0 x2 0 1 - 0
15 15
1 2
3 x1 1 0 - 6
15 15
1 4
cj - zj 0 0 - - -18
15 15
simplex.nb 13
Cj 3 2 0 0
XB x1 x2 s1 s2 RHS
2 1
0 x2 0 1 - 0
15 15
1 2
3 x1 1 0 - 6
15 15
1 4
cj - zj 0 0 - - -18
15 15
Nota que el ultimo paso fue solo para reafirmar que x2 tiene un valor de cero en la base, hecho que ya era evidente al no pertenecer a la base. Hemos
llegado al mismo resultado que la eleccion anterior, sin embargo hemos realizado una iteracion mas de las estrictamente necesarias. Simplex no fue capaz
de detectar la terminacion del mismo, sin embargo recuerda que esa es la filosofia del simplex: tratar de buscar soluciones no decrecientes como lo fue en
este caso.
Graficamente tenemos
x2
12
10
x1
1 2 3 4 5 6
Lo ocurrido previamente es lo que se conoce como degeneracion. Esta es una anomalia del Simplex el cual se refleja en iteraciones adicionales que no
añ adenvalor a la solucion del problema. Esta siempre se presentara cuando hay empates entre las variables candidatas a dejar la base, ya que eso asegura
que una de las variables de la base tendra un valor de cero. Por tal la razon, esta variable siempre sera candidata a salir ya que ∆i sera cero en ese caso.
Dado que esta sale, la funcion no mejorara. Esto es debido a que el incremento en el valor de la funcion objetivo esta expresado como ∆i Ic j - z j M. en donde
j es el indice de la columna de la variable que entra x j .Esto puede presentarse a la mitad del calculo cuando uno de los RHS se hace cero. Este fenomeno
ocurre durante las iteraciones, sin embargo, si el problema tiene un optimo, entonces Simplex terminara. Es decir, la degeneracion solo añ ade unas
iteraciones mas a la solucion, las cuales no aportan nada a la misma.
Terminacion
En esta seccion discutiremos tres aspectos a evaluar en la terminacion del Simplex los cuales son
Optimos alternados
Considere el siguiente LP
Maximize z = 2 x1 + x2
x1,x2
s.t. 5 x1 +10 x2 £ 30
10 x1 + 5 x2 £ 20
El tableau inicial a este problema (T0), es el siguiente
Cj 2 1 0 0
XB x1 x2 s1 s2 RHS
0 s1 5 10 1 0 30
(T0)
0 s2 10 5 0 1 20
cj - zj 2 1 0 0 0
14 simplex.nb
Cj 2 1 0 0
XB x1 x2 s1 s2 RHS
0 s1 5 10 1 0 30
(T0)
0 s2 10 5 0 1 20
cj - zj 2 1 0 0 0
Al entrar x1 a la base elegimos sacar a s2. Al hacer el pivoteo llegamos al siguiente tableau (T1)
Cj 2 1 0 0
XB x1 x2 s1 s2 RHS
15 1
0 s1 0 1 - 20
2 2 (T1)
1 1
2 x1 1 0 2
2 10
1
cj - zj 0 0 0 - -4
5
Ahora tenemos tres ceros para escoger, sin embargo como x1 acaba de entrar escogemos a x2, por lo cual s1 es elegida para abandonar la base. Al hacer el
pivoteo llegamos al siguiente tableau (T2)
Cj 2 1 0 0
XB x1 x2 s1 s2 RHS
2 1 8
1 x2 0 1 -
15 15 3 (T2)
1 2 2
2 x1 1 0 -
15 15 3
1
cj - zj 0 0 0 - -4
5
En este tableau si metemos a s1 a la base, entonces x2 es el candidato a salir, con lo cual llegamos al siguiente tableau (T3).
Cj 2 1 0 0
XB x1 x2 s1 s2 RHS
15 1
0 s1 0 1 - 20
2 2 (T3)
1 1
2 x1 1 0 2
2 10
1
cj - zj 0 0 0 - -4
5
Como puedes observar T3=T1 i.e. el tableau de la iteracion previa, por lo cual empezariamos a tener optimos alternados. Como se puede apreciar
estariamos alternando soluciones mas no obtendriamos ninguna mejora para z* . Lo anterior quiere decir que Simplex esta detectando dos soluciones
optimas. En realidad hay una infinidad de soluciones. Veamoslo graficamente
simplex.nb 15
x2
6
x1
1 2 3 4 5 6
Para este caso la condicion de terminacion debe ser modificada. Esto es, si alguna de las variables no basicas tienen valor de cero y es introducida a la base,
entonces la funcion no mejorara. Sin embargo, es necesario calcular la otra solucion? En general es mejor calcularla ya que esto quiere decir que podemos
obtener la solucion optima con diferentes combinaciones.
No Acotamiento
Ya hemos visto el problema de no acotamiento en la seccion correspondiente. Este problema se presenta cuando el algoritmo es capaz de determinar la
variable que entra pero no la que sale. Esto se llama no acotamiento porque la variable escogida para entrar puede tomar cualquier valor sin que haya
alguna restriccion que lo limite i.e. todas las restricciones son factibles. Una posible razon para este comportamiento es el orden de eleccion de las variables
que entran el cual lo tenemos muy rigido c j - z j . Pudiesemos introducir algunas otras reglas para hacerlo mas flexible, algunas posibles son:
Recordemos tambien que el no acotamiento depende de la funcion objetivo, ya que algunas de estas estaran acotadas y algunas otras no.
No Factibilidad
La no factibilidad se presenta cuando el problema no tiene solucion. Esto quiere decir que no hay soluciones factibles i.e. XB = 8<. La factibilidad o no de
un problema es reflejada por Simplex al no poder sacar variables artificiales de la base. Por ejemplo considere el siguiente problema:
Maximize z = 2 x1 + x2
x1,x2
s.t. 5 x1 +10 x2 ³ 30
10 x1 + 10 x2 £ 20
16 simplex.nb
Cj 2 1 0 0 -M
XB x1 x2 e1 s1 a1 RHS
-M a1 5 10 -1 0 1 30
0 s1 10 10 0 1 0 20
cj - zj 5 M + 2 10 M + 1 -M 0 0 0
Al entrar x2 a la base elegimos sacar a s1. Al hacer el pivoteo llegamos al siguiente tableau (T1)
Cj 2 1 0 0 -M
XB x1 x2 e1 s1 a1 RHS
0 a1 -5 0 -1 -1 1 10
1
2 x2 1 1 0 0 2
10
1
cj - zj 1 - 5 M 0 -M - -M 0 -
10
Como puedes ver ahora ninguna de las variables no basicas puede entrar a la base, sin embargo la variable artificial a1 aun esta en la base. Simplex no ha
sido capaz de sacarla de la misma, por lo cual el problema no es factible. A proposito, puedes darle una interpretacion a a1=10? Parece que las variables
artificiales aportan informacion util en el caso de que el problema no sea factible.
Veamos esta problema graficamente:
x2
6
x1
1 2 3 4 5 6
simplex.nb 17
è Solucion Óptima : Todas las variables no basicas tienen valores negativos c j - z j . Estas deben ser variables de decision, slack u exceso. El
algoritmo termina con una solucion optima.
è Óptimos alternados: Todas las variables no basicas tienen c j - z j <= 0, pero al menos una de ellas tiene c j - z j = 0. Esto indica optimos
alternados, proceda a encontrar la otra BFS y termine.
è No Acotamiento: Las variables basicas son de decision o tipo slack. El algoritmo es capaz de encontrar la variable que entra pero no la que sale.
Esto indica no acotamiento y el algoritmo termina.
è Infactibilidad: Todas las variables no basicas tienen valores negativos i.e. c j - z j £ 0, pero aun existen variables artificiales en la base. Esto
indica infactibilidad y el algoritmo termina.
Ciclado
El ciclado es un fenomeno muy poco comun que ocurre al simplex en el cual las soluciones basicas factibles estan haciendo un ciclo en las iteraciones i.e.
despues de un determinado numero de iteraciones se llega a un tableau obtenido previamente. Esto hace que el Simplex nunca encuentre la solucion optima
ya que esta atrapado en el ciclo. De hecho, es dificil construir problemas que ciclen. Considere el siguiente ejemplo
3 1
Maximize z = - x1 + 150 x2 - x3 + 6 x4
x1,x2,x3,x4 4 50
1 1
s.t. x1 - 60 x2 - x3 + 9 x4 £ 0
4 25
1 1
x1 - 90 x2 - x3 + 3 x4 £ 0
2 50
x3 £ 0
El tableau inicial sera
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 1
0 s1 -60 - 9 1 0 0 0
4 25
(T0)
1 1
0 s2 -90 - 3 0 1 0 0
2 50
0 s3 0 0 1 0 0 0 1 1
3 1
cj - zj - 150 - 6 0 0 0 0
4 50
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
4
0 x1 1 -240 - 36 4 0 0 0
25
3
(T1)
0 s2 0 30 -15 -2 1 0 0
50
0 s3 0 0 1 0 0 0 1 1
7
cj - zj 0 -30 - 33 3 0 0 1
50
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
8
0 x1 1 0 25
-84 -12 8 0 0
(T2)
1 1 1 1
0 x2 0 1 - - 0 0
500 2 15 30
0 s3 0 0 1 0 0 0 1 1
2
cj - zj 0 0 - 18 1 1 0 1
25
18 simplex.nb
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
8
0 x1 1 0 25
-84 -12 8 0 0
(T2)
1 1 1 1
0 x2 0 1 - - 0 0
500 2 15 30
0 s3 0 0 1 0 0 0 1 1
2
cj - zj 0 0 - 18 1 1 0 1
25
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
25 525 75
0 x3 0 1 - - 25 0 0
8 2 2
1 1 1 1 (T3)
0 x2 - 1 0 40
- 0 0
160 120 60
25 525 75
0 s3 - 0 0 -25 1 0
8 2 2
1
cj - zj 0 0 -3 -2 3 0 1
4
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
125
0 x3 - 10 500 1 0 50 -150 0 0
2
1 1 2
(T4)
0 x4 - 40 0 1 - 0 0
4 3 3
125
0 s3 -10 500 0 0 -50 150 1 0
2
1
cj - zj - 120 0 0 -1 1 0 1
2
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
5 1
0 s1 - 210 0 1 -3 0 0
4 50
1 1 1
(T5)
0 x4 -30 - 1 0 3
0 0
6 150
0 s3 0 0 1 0 0 0 1 0
7 1
cj - zj - 330 0 0 -2 0 1
4 50
3 1
Cj - 150 - 6 0 0 0
4 50
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 1
0 s1 -60 - 9 1 0 0 0
4 25
(T6)
1 1
0 s2 -90 - 3 0 1 0 0
2 50
0 s3 0 0 1 0 0 0 1 0
3 1
cj - zj - 150 - 6 0 0 0 1
4 50
Pero nota que T(6)=T(0), por lo cual llegamos al punto de donde partimos.
Maximize z = 10 X1 - 57 X2 - 9 X3 - 24 X4
x1,x2,x3,x4
s.t. 0.5 X1 - 5.5 X2 - 2.5 X3 + 9 X4 £ 0
0.5 X1 - 1.5 X2 - 0.5 X3 + X4 £ 0
x1 £ 1
El tableau inicial es
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 11 5
0 s1 - - 9 1 0 0 0
2 2 2
(T0)
1 3 1
0 s2 - - 1 0 1 0 0
2 2 2
0 s3 1 0 0 0 0 0 1 1
cj - zj 10 -57 -9 -24 0 0 0 0
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
10 x1 1 -11 -5 18 2 0 0 0
(T1)
0 s2 0 4 2 -8 -1 1 0 0
0 s3 0 11 5 -18 -2 0 1 1
cj - zj 0 53 41 -204 -20 0 0 0
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 3 11
10 x1 1 0 -4 - 0 0
2 4 4
(T2)
1 1 1
-57 x2 0 1 -2 - 0 0
2 4 4
1 3 11
0 s3 0 0 - 4 - 1 1
2 4 4
29 27 53
cj - zj 0 0 -98 - - 0 0
2 4 4
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
3 11
-9 x3 2 0 1 -8 - 0 0
2 2
1 5
(T3)
-57 x2 -1 1 0 2 - 0 0
2 2
0 s3 1 0 0 0 0 0 1 1
cj - zj -29 0 0 18 15 -93 0 0
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 1 9
-9 x3 1 -2 - 0 - 0 0
2 4 4
(T4)
1 1 1 1
-24 x4 0 - - 1 - 0 0
2 4 8 8
1 1 9
0 s3 0 2 0 - 1 1
2 4 4
11 51
cj - zj 0 -49 -10 0 - 0 0
2 2
20 simplex.nb
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 1 9
-9 x3 1 -2 - 0 - 0 0
2 4 4
(T4)
1 1 1 1
-24 x4 0 - - 1 - 0 0
2 4 8 8
1 1 9
0 s3 0 2 0 - 1 1
2 4 4
11 51
cj - zj 0 -49 -10 0 - 0 0
2 2
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
0 s1 -4 8 2 0 1 -9 0 0
1 3 1 (T5)
-24 x4 - - 1 0 1 0 0
2 2 2
0 s3 1 0 0 0 0 0 1 1
cj - zj 22 -93 -21 0 0 24 0 0
Cj 10 -57 -9 -24 0 0 0
XB x1 x2 x3 x4 s1 s2 s3 RHS
1 11 5
0 s1 - - 9 1 0 0 0
2 2 2
1 3 1
(T6)
0 s2 - - 1 0 1 0 0
2 2 2
0 s3 1 0 0 0 0 0 1 1
cj - zj 10 -57 -9 -24 0 0 0 0
Que es con el que comenzamos el simplex i.e. T(6)=T(0). Hemos completado un ciclo dentro del politope. Esto pudiese haber sido resuelto si se hubiese
modificado la manera en que se elige la variable que entra y si el problema fuese factible. Si seguimos aplicando el Simplex con la misma regla para la
entrada y salida de variables seguiremos el mismo camino y haremos otro ciclo. Vemos que dice mathematica acerca de este problema:
Maximize@10x1-57x2-9x3-24x4,
0.5x1-5.5x2-2.5x3+9x4£0&&
0.5x1-1.5x2-0.5x3+x4£0&&
x1£1&&
x1³ 0&&x2³ 0&&x3³ 0&&x4³ 0,8x1,x2,x3,x4<
D
81., 8x1 ® 1., x2 ® 0., x3 ® 1., x4 ® 0.<<
Todo problema de LP es ya sea factible, no acotado o no factible. Si tiene un FS entonces tiene una BFS. Si tiene una solucion optima entonces tiene una
BFS optima.
Variables No Restringidas
Considere el siguiente problema
simplex.nb 21
Maximize z = 3 x1 + 2 x2
x1,x2
s.t. 5 x1 +10 x2 ³ 30
10 x1 + 10 x2 £ 20
x1 Î R, x2 ³ 0
Construyamos un problema equivalente basado en el anterior. Para esto hagamos x1=x3-x4, lo cual nos lleva al siguiente problema
Maximize z = 2 x2 + 3 x3 - 3 x4
x2, x3, x4
s.t. 5 x3 -5 x4 +10 x2 £ 30
10 x3 - 10 x4 + 5 x2 £ 30
x2, x3, x4 ³ 0
Hasta ahora hemos logrado salvar la restriccion de no negatividad de las variables. Resolvamos este problema. El tableau inicial sera:
Cj 2 3 -3 0 0
XB x2 x3 x4 s1 s2 RHS
0 s1 10 5 -5 1 0 30
0 s2 5 10 -10 0 1 30
cj - zj 2 3 -3 0 0 0
Entra x3 y sale s2
Cj 2 3 -3 0 0
XB x2 x3 x4 s1 s2 RHS
15 1
0 s1 0 0 1 - 15
2 2
1 1
3 x3 1 -1 0 3
2 10
1 3
cj - zj 0 0 0 - -9
2 10
Entra x2 y sale s1
Cj 2 3 -3 0 0
XB x2 x3 x4 s1 s2 RHS
2 1
2 x2 1 0 0 - 2
15 15
1 2
3 x3 0 1 -1 - 2
15 15
1 4
cj - zj 0 0 0 - - -10
15 15
x4 trata de entrar a la base, pero no es un movimiento legal ya que hay un cero en la columna correspondiente, lo cual elimina la posibilidad de que haya
optimos alternados. Es decir hemos llegado al optimo con valores x*=(2,2,0,0,0), para el problema modificado. Ahora necesitamos investigar si la variable
original, x1, pertenece a la base. Sabemos que x1=x3-x4, por lo cual x1=2-0=2. Como x1 es mayor de cero, entonces ahora podemos asegurar que
pertenece a la base. La solucion al problema original es x*=(2,2,0,0), con f(x*)=10.
Algunos Miscelaneos
De manera colateral, simplex puede ser usada como una herramienta para la solucion de otros problemas del Algebra Lineal. Aqui son presentados dos de
estos enfoques.
Añ adamos variables artificiales y definamos una nueva funcion objetivo en terminos de estas tal como lo hicimos en el metodo de las dos fases. Entonces
el problema a resolver sera
22 simplex.nb
Maximize z = -a1 - a2
x1,x2
s.t. 10 x1 + 5 x2 +a1 = 30
5 x1 + 10 x2 + a2 = 30
x1, x2, a1, a2 ³ 0
El tableau inicial sera
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
-1 a1 10 5 1 0 30
-1 a2 5 10 0 1 30
cj - zj 15 15 0 0 -
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
15 1
-1 a1 0 1 - 15
2 2
1 1
0 x2 1 0 3
2 10
15 3
cj - zj 0 0 - -
2 10
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
2 1
0 x1 1 0 - 2
15 15
1 2
0 x2 0 1 - 2
15 15
cj - zj 0 0 -1 -1 -
10 x1 + 5 x2 = 30
2 x1 + x2 = 30
Añ adamos variables artificiales y definamos una nueva funcion objetivo en terminos de estas tal como lo hicimos en el metodo de las dos fases. Entonces
el problema a resolver sera
Maximize z = -a1 - a2
x1,x2
s.t. 10 x1 + 5 x2 +a1 = 30
2 x1 + x2 + a2 = 30
x1, x2 £ 0
El tableau inicial sera
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
-1 a1 10 5 1 0 30
-1 a2 2 1 0 1 30
cj - zj 12 6 0 0 -
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
1 1
0 x1 1 0 3
2 10
1
-1 a2 0 0 - 1 24
5
6
cj - zj 0 0 - 0 -
5
Cj 0 0 -1 -1
XB x1 x2 a1 a2 RHS
1
0 x2 2 1 0 6
5
1
-1 a2 0 0 - 1 24
5
6
cj - zj 0 0 - 0 -24
5
Entra x1 y sale x2 pero nos dejaria exactamente en el tableau anterior, con lo cual concluimos que a2 no saldra de la base. Esto es una consecuencias de la
dependencia lineal de las columnas de la matriz.