Programación lineal
Problema lineal auxiliar (fase I)
Problema lineal relacionado con el de partida, pero distinto de él
Propiedades deseadas:
Debe tener un vértice factible que se pueda calcular de forma trivial
La solución del problema auxiliar debe ser un vértice factible del problema de partida
Programación lineal
Supondremos que b ? 0
Problema auxiliar
min cTx min eTw
s.a Ax = b ? s.a Ax + w = b
x ? 0 x ,w ? 0
Vértice inicial: ( x , w ) = ( 0 , b )
Si la solución del problema modificado resultase ser ( x , 0 ) , x sería un vértice factible del problema original
Programación lineal
Paso 1. Asegurar que b ? 0
Paso 2. Construir el problema modificado
Paso 3. Resolver dicho problema partiendo de ( 0 , b )
Paso 4. Si en la solución w = 0 , resolver el problema original desde x
Paso 5. Si en la solución w ? 0 , el problema original no es factible
Programación lineal
Ejemplo:
max 2×1 – 3×2 – x3 + 2×4
s.a x1 + x2 – x3 – x4 ? -2
2×1 – x2 + 2×3 + x4 ? 1
-x1 + x2 + x3 – 2×4 = -2
x ? 0
Lado derecho mayor que cero:
max 2×1 – 3×2 – x3 + 2×4
s.a -x1 – x2 + x3 + x4 ? 2
2×1 – x2 + 2×3 + x4 ? 1
x1 – x2 – x3 + 2×4 = 2
x ? 0
Programación lineal
Problema en forma estándar
max 2×1 – 3×2 – x3 + 2×4
s.a -x1 – x2 + x3 + x4 + s1 = 2
2×1 – x2 + 2×3 + x4 – s2 = 1
x1 – x2 – x3 + 2×4 = 2
x , s ? 0
Problema auxiliar:
min w1 + w2
s.a -x1 – x2 + x3 + x4 + s1 = 2
2×1 – x2 + 2×3 + x4 – s2 + w1 = 1
x1 – x2 – x3 + 2×4 + w2 = 2
x , s , w ? 0
Programación lineal
Ejemplo
Punto inicial del problema auxiliar:
x = ( 0 0 0 0 )T , s = ( 2 0 )T , w = ( 1 2 )T
Punto solución del problema auxiliar:
x = ( 0 0 0 1 )T , s = ( 1 0 )T , w = ( 0 0 )T
Vértice factible del problema inicial:
x = ( 0 0 0 1 )T
Programación lineal
Los cálculos del método Simplex:
Paso 1. Obtener un vértice factible inicial
Paso 1.1
Asegurar que b ? 0
Añadir variables auxiliares
Formar problema auxiliar
Paso 1.2 Fase I
Resolver el problema auxiliar
Determinar un vértice factible para el problema original
Programación lineal
Paso 2.
Comprobar si el vértice factible es solución
BT? = cb , ?n = cn – NT?
?n ? 0 ?
Paso 3.
Calcular la dirección de movimiento p
i = arg mink (?n )k
pn = ei , Bpb = -Nei
Programación lineal
Paso 4.
Calcular la longitud de paso ?
? = min { -xi /pi | pi < 0 }
Paso 5.
Obtener el nuevo vértice
x’ = x + ?p
Programación lineal
Ejemplo
min x1 – 2×2 – x3
s.a x1 + x3 ? 1
x1 + 2×2 + 2×3 ? 2
x ? 0
Paso 0. Poner en forma estándar
min x1 – 2×2 – x3
s.a x1 + x3 – s1 = 1
x1 + 2×2 + 2×3 + s2 = 2
x , s ? 0
Programación lineal
Paso 1. Vértice factible inicial
Problema auxiliar:
min a
s.a x1 + x3 – s1 + a = 1
x1 + 2×2 + 2×3 + s2 = 2
x , s , a ? 0
Vértice factible inicial:
x = ( 0 0 0 )T , s = ( 0 2 )T , a = 1
Solución:
x = ( 1 0 0 )T , s = ( 0 1 )T , a = 0
Programación lineal
Paso 2. Solución del problema original
Variables básicas: x1 , s2
¿Es solución el vértice?
? = B -Tcb = ( 1 0 )T , ?n = cn – NT? = ( -2 -2 1 )T
Dirección de movimiento:
pn = ( 1 0 0 )T , pb = -B -1Npn = ( 0 -2 )T , p = ( 0 1 0 0 -2 )T
Longitud de paso: ? = 1/2
Nuevo vértice: x’ = ( 1 1/2 0 0 0 )T
Programación lineal
Siguiente iteración:
Variables básicas: x1 , x2
¿Es solución el vértice?
? = B -Tcb = ( 2 -1 )T , ?n = cn – NT? = ( -1 2 1 )T
Dirección de movimiento:
pn = ( 1 0 0 )T , pb = -B -1Npn = ( -1 -1/2 )T , p = ( -1 -1/2 1 0 0 )T
Longitud de paso: ? = min{ 1/1 , (1/2)/(1/2) } = 1
Nuevo vértice: x’ = ( 0 0 1 0 0 )T
Programación lineal
Siguiente iteración:
Variables básicas: x1 , x3
¿Es solución el vértice?
? = B -Tcb = ( 3 -2 )T , ?n = cn – NT? = ( 2 3 2 )T
El vértice es solución
Vértice degenerado
¿Qué habría sucedido si hubiésemos considerado como variables básicas x2 , x3 ?
Programación lineal
Convergencia del método Simplex
Un problema lineal puede ser:
No factible
No acotado
max x1 + x2
s.a x ? 0
Factible y acotado ? óptimo
Programación lineal
Convergencia del método Simplex
Si el problema no tiene solución
Basta con poder identificar la situación
Si el problema no es factible:
La fase I acaba con una solución w ? 0
Si el problema no está acotado:
El método Simplex encuentra un paso ? = ?
En alguna iteración pb ? 0
Programación lineal
Si el problema es óptimo
En cada iteración la función objetivo decrece
Descenso: cTp = (?n )i < 0
Siempre que ? > 0
Se sigue descendiendo hasta que ?n ? 0
Existe un número finito de vértices
El argumento solo puede fallar si ? = 0
Programación lineal
Vértices degenerados
Para que ? = 0 se debe tener que
?i , (xb )i = 0 y (pb )i < 0
Puede suceder en vértices degenerados
Posibilidad de ciclos:
Intercambiar variables básicas y no básicas
Sin modificar el valor de x
Programación lineal
Cómo evitar ciclos:
Si no hay empate, no pueden existir ciclos
En caso de empates: regla de Bland
Variable que entra en la base:
Primera con el menor valor del multiplicador
Variable que sale de la base:
Primera con el menor cociente para ?
Orden de variables: cualquiera pero fijo
Ineficiencia en la práctica
Programación lineal
Organización de los cálculos
Para su aplicación manual
Se disponen los datos en una tabla,
cT 0
A b
En un vértice, la tabla se reajusta como
cT – cbTB -1A -cbTB -1b
B -1A B -1b
Programación lineal
¿Qué información proporciona la tabla?
cT – cbTB -1A -cbTB -1b
B -1A B -1b
Multiplicadores Función objetivo
Dir. de movimiento Valores de variables
Cada vértice corresponde a diferentes valores de B y cB
Programación lineal
¿Cómo actualizar la tabla al cambiar B ?
Cambio de B
Variable no básica ? básica: multiplicador
Variable básica ? no básica: longitud de paso
Una columna de B cambia por otra
B = ( b1 … bk … bm ) ? ( b1 … bj … bm ) = B’
B’ = B + (bj – bk )ekT = B (I + ( B -1bj – ek )ekT ) = BE
Programación lineal
La matriz de interés en la tabla es la inversa,
B’ -1 = E -1B -1 , E -1 = I – (1/ekTB -1bj )( B -1bj – ek )ekT
N’ = B -1N , nj’ = B -1nj
B’ -1A = B -1A – (1/ekTnj’ )(nj’ – ek )ekTB -1A
Operaciones sobre la tabla:
A cada fila i se le resta la fila k multiplicada por nij’ /nkj’
Se pivota sobre el elemento kj
La misma operación de pivotaje se aplica al lado derecho y a la fila superior
Ejemplo:
Introducir en la base x3 y eliminar x1
0 -5 3 0 -1 26 -3 -2 0 0 2 20
0 2 -3 1 1 2 ? 3 -1 0 1 -2 8
1 -1 1 0 -1 2 1 -1 1 0 -1 2
Propiedad de las columnas básicas:
Matriz identidad más ceros en la fila superior
Programación lineal
Programación lineal
Ejemplo
min x1 – 2×2 – x3
s.a x1 + x3 ? 1
x1 + 2×2 + 2×3 ? 2
x ? 0
Problema auxiliar:
min a
s.a x1 + x3 – s1 + a = 1
x1 + 2×2 + 2×3 + s2 = 2
x , s , a ? 0
Programación lineal
Tablas para el problema auxiliar
1 -2 -1 0 0 0 0 1 -2 -1 0 0 0 0
0 0 0 0 0 1 0 -1 0 -1 1 0 0 -1
1 0 1 -1 0 1 1 ? 1 0 1 -1 0 1 1
1 2 2 0 1 0 2 1 2 2 0 1 0 2
Paso 2.1. ¿Son positivos los multiplicadores?
Paso 2.2. Dir. de movimiento y long. de paso:
Columna multipl. más negativo, fila cociente menor
Se pivota sobre el valor 1
Programación lineal
Nueva tabla:
1 -2 -1 0 0 0 0 0 -2 -2 1 0 -1 -1
-1 0 -1 1 0 0 -1 0 0 0 0 0 1 0
1 0 1 -1 0 1 1 ? 1 0 1 -1 0 1 1
1 2 2 0 1 0 2 0 2 1 1 1 -1 1
Nueva tabla es óptima para problema auxiliar
0 -2 -2 1 0 -1
1 0 1 -1 0 1
0 2 1 1 1 1
Programación lineal
De vuelta al problema original:
0 -2 -2 1 0 -1 0 0 -1 2 1 0
1 0 1 -1 0 1 ? 1 0 1 -1 0 1
0 2 1 1 1 1 0 1 1/2 1/2 1/2 1/2
¿Es solución? No
Siguiente vértice:
0 0 -1 2 1 0 0 2 0 1 2 1
1 0 1 -1 0 1 ? 1 -2 0 -2 -1 0
0 1 1/2 1/2 1/2 1/2 0 2 1 1 1 1
Programación lineal
Resumen:
En la tabla se selecciona:
Columna del multiplicador más negativo
Fila con menor cociente bik’ /nik’ para nik’ > 0
Se pivota sobre el elemento nik’
El proceso se repite hasta que los multiplicadores tienen el signo correcto
Página anterior | Volver al principio del trabajo | Página siguiente |