12 - Método Simplex - Simplex Tableau
-
Upload
johnjairoarangoquintero -
Category
Documents
-
view
28 -
download
7
description
Transcript of 12 - Método Simplex - Simplex Tableau
1
Método SimplexMétodo Simplex
Simplex TableauSimplex Tableau
2
IntroducciónIntroducción
● El método simplex como fue descrito anteriormente resulta muy ineficiente computacionalmente: Muchas operaciones redundantes y algunas operaciones computacionalmente costosas como invertir la matrix B.
● La "Simplex Tableau" es una forma de realizar todas las operaciones del método simplex de forma muy eficiente.
3
Simplex TableauSimplex Tableau
● La estructura general es la siguiente:
-Z ck - cBB-1Ak
xiB B-1Ak
Valoresde las
variablesbásicas
Negacióndel valoróptimo
Reduccióndel costo
∆xiB
4
DescripciónDescripción
● n: Número de variables
● m: Número de restricciones
● La "Tableau" tiene n+1 columnas y m+1 filas.
● Filas y columnas se numeran desde 0.
5
InicializaciónInicialización
● Se debe determinar una base inicial (más detalles posteriormente).
● Se inicializan las entradas Tij con los valores
correspondientes:
● Reducción de costo en fila 0
● Valores de la base inicial columna 0
● B-1Ak las columnas k=1..n (cuando B es la matriz identidad, estas son las mismas columnas de A).
● -Z=0
6
IteraciónIteración
● Si todas las reducciones de costo son positivas, terminar.
● Seleccionar una xk correspondiente a la columna k
con reducción de costo negativa para que entre a la base.
● Se calculan las razones xi/∆x
i para la columna k en las
filas con ∆xi>0. La mínima es el valor λ que toma x
k.
● Se actualizan los costos reducidos y los componentes B-1Ak.
7
Actualización de la Tablaeu:Actualización de la Tablaeu:Forma canónicaForma canónica
Forma canónica: La submatriz B es la matriz identidad.
● Supongamos que xk entra a la base, y x
h sale.
● Se divide la fila h por Thk
. Esto garantiza que Thk
sea uno.
● Para todas las filas i≠h, se multiplica la fila h por T
ik y se resta de la fila i. Esto hace los
valores Tik=0. (Pivotar)
9
Justificación fila 0 - (2)Justificación fila 0 - (2)
● Al llevar a la forma canónica la columna de la variable z, la fila cero equivale a la ecuación:
● Se observa además que T0i=0 para i correspondiente
a las variables básicas, y que xj=0 para las variables
básicas. Por lo tanto la canolización arroja el valor
z=Z
que es solución de (*), y que por lo tanto corresponde al negativo del valor óptimo correspondiente a la base actual.
10
EjemploEjemplo
● Retomemos el problema previamente analizado:
11
Configuración inicialConfiguración inicial
● La base inicial es {x4, x
5, x
6}
-Z x1
x2
x3
x4
x5
x6
0 5 -10 8 0 0 0
x4
10 1 3 2 1 0 0
x5
20 -2 4 1 0 1 0
x6
5 1 -1 10 0 0 1
(Observar que cB son ceros, por lo tanto las reducciones de costo coinciden con ck)
12
Primera iteraciónPrimera iteración
● T02
=-10 es el único coeficiente que reduce el costo:
Entra x2
● Las razones xi/∆x
i correspondientes a k=2 y ∆x
i>0 son
10/3 y 20/4. El mínimo es λ=3.33 y la variable que sale es x
4.
-Z x1
x2
x3
x4
x5
x6
0 5 -10 8 0 0 0
x4
10 1 3 2 1 0 0
x5
20 -2 4 1 0 1 0
x6
5 1 -1 10 0 0 1
13
Actualización del TableauActualización del Tableau
● fila1=fila
1/3
● fila0=fila
0-T
0k*fila
2
● fila2=fila
2-T
2k*fila
2
● fila3=fila
3-T
3k*fila
2
-Z x1
x2
x3
x4
x5
x6
33.3 8.33 0 -1.33 3.33 0 0
x2
3.33 0.33 1 0.67 0.33 0 0
x5
6.67 -3.33 0 -2.67 -1.33 1 0
x6
8.33 1.33 0 10.67 0.33 0 1
Base = { x2, x
5, x
6 }
14
Segunda iteraciónSegunda iteración
● Si x3 entra a la base, se reduce el costo.
● Las razones xi/∆x
i son 3.33/0.67=5 y 8.33/10.67=0.78.
El mínimo es λ=0.78 y sale x6.
● Se actualizan el Tableau y se obtiene
-Z x1
x2
x3
x4
x5
x6
34.37 8.5 0 0 3.38 0 0.13
x2
2.81 0.25 1 0 0.31 0 -0.06
x5
8.75 -3.00 0 0 -1.25 1 0.25
x3
0.78 0.13 0 1 0.03 0 0.09
Por lo tanto el valor óptimo es -34.37 y el optimizador es x=(0, 2.81, 0.78, 0, 8.75, 0)
15
Obtención de una BFS inicialObtención de una BFS inicial
● Cuando se agregan m variables slack adicionales la elección de la base inicial es trivial. Qué hacer cuando no?
● Una solución general a este problema es el método de las variables artificiales, o de las dos
fases.
16
Método de las variables artificialesMétodo de las variables artificialesFase 1Fase 1
● Se agregan m variables artificiales al Tableau, xia.
● Fase 1: Se resuelve el problema minimizando la función
17
Método de las variables artificialesMétodo de las variables artificiales
● Se pueden presentar 3 casos:
● ε=0 y todas las xia se hacen 0 (se remueven de la base), y la base
restante es una base del problema original.
● ε>0, indicando que el problema original no es factible. Si el
problema original es factible, el mínimo valor de ε es cero.
● ε=0 pero algunas xia aparecen en la solución.
● Se se da el 1er caso, se borran las columnas correspondientes a xia
(estas variables son ceros), se reemplaza la fila 0 y se continua el método simplex.
● En el 3er caso, se puede "pivotar" una variable original (tal que
∆xi≠0) no presente en la base para reemplazar x
ia. La nueva variable
toma el valor λ=0, por lo que no afecta el valor de la fila 0.
18
Método de las variables artificialesMétodo de las variables artificialesFase 2Fase 2
● Si el problema es factible, la fase 1 siempre arroja como resultado una BFS para el problema original con sus valores.
● Con esta base se procede a resolver el problema original.
19
Situaciones EspecialesSituaciones Especiales
20
Base DegeneradaBase Degenerada
● Si la columna 0 contiene valores 0, se dice que la base actual es una base degenerada.
● En este caso, xk=0 puede entrar a la base
reemplazando a xi, aunque el punto x∈ℝn sigue
siendo el mismo.
xk
-Z
xi
0 ∆xi>0
21
Columna k es negativaColumna k es negativa
● Si todos los valores de ∆xi son negativos,
entonces la variable xk se puede hacer tan
grande como se quiera sin violar ninguna restricción.
● En este caso, el espacio factible no está acotado y se dice que el valor óptimo es -∞.
xk
-Z
xi ∆x
i<0
22
Solución NuméricaSolución Numérica
● Matlab Optimization Toolbox ofrece la siguiente función para resolver problemas de optimización lineal:
● Para detalles completos visitar:
http://www.mathworks.com/help/toolbox/optim/ug/linprog.html
[x,fval] = linprog(c,A,b,Aeq,beq,lb,ub,x0,options)
23
El ejemplo anteriorEl ejemplo anterior
● Asi se puede codificar
y retorna el resultado:
A= [ 1 3 2
-2 4 0
1 -1 10 ];
b = [ 10 20 5 ]';
c = [ 5 -10 -8 ];
lb = zeros(3,1);
[x, fval, exitflag] = linprog(c,A,b,[],[],lb)
x =
0.0000
2.8125
0.7812
fval =
-34.3750