Programación lineal Problemas lineales (forma estándar) min cTx s.a Ax = b x0 Estudiaremos sus propiedades especiales Métodos específicos de solución: Método Simplex Métodos de puntos.
Download
Report
Transcript Programación lineal Problemas lineales (forma estándar) min cTx s.a Ax = b x0 Estudiaremos sus propiedades especiales Métodos específicos de solución: Método Simplex Métodos de puntos.
Programación lineal
Problemas lineales (forma estándar)
min cTx
s.a Ax = b
x0
Estudiaremos sus propiedades especiales
Métodos específicos de solución:
Método Simplex
Métodos de puntos interiores
1
Programación lineal
Propiedades especiales del problema
La región factible es convexa
Toda solución local es global
Las condiciones necesarias de primer orden son
suficientes
Propiedad de convexidad: x e y factibles,
A (x +(1-)y ) = Ax + (1-)Ay = b + (1-)b = b
x +(1-)y 0
2
Programación lineal
Propiedades especiales del problema
La región factible es un politopo :
Figura limitada por hiperplanos
Elementos de un politopo:
Caras, aristas, vértices
Algunos de estos elementos son importantes
para el cálculo de la solución
Cómo identificarlos: caracterización
algebraica
3
Programación lineal
Politopos
4
Programación lineal
Soluciones
5
Programación lineal
Teorema básico:
“Si existe una solución del problema lineal, existe
un vértice solución”
Importancia de los vértices:
Basta con buscar soluciones en vértices
(número finito)
Método Simplex:
Probar vértices eficientemente hasta
encontrar la solución
6
Programación lineal
Justificación:
Resultado básico (teor. de representación)
Todo punto de un conjunto convexo puede
expresarse como combinación convexa de n+1
puntos extremos del conjunto
x = i i xi , i i = 1, i 0
cT x = i i cTxi mini cTxi
7
Programación lineal
Caracterización algebraica de vértices
Representación gráfica solo válida si n 3
Caracterización general basada en la de
otras partes de un politopo
Caras, aristas, etc.
8
Programación lineal
Partes de un politopo, Ax b
Caras: subconjuntos de hiperplanos
Vértices:
Puntos intersección de al menos n caras
Aristas:
Segmentos intersección de n - 1 caras
Comienzan y acaban en un vértice
Vértices contiguos:
unidos por una misma arista
9
Programación lineal
Caracterización algebraica:
Caras: {x | j ajTx = bj , Ax b }
Vértices: existe una partición de A y b,
A=
Ab
An
b=
bb
bn
Ab nn, bb n, det(Ab ) 0,
Ab x = bb , An x bn
10
Programación lineal
Vértices de
Ax = b, x 0, A mn
Siempre existen m restricciones activas,
Ax = b
Necesitamos n - m restricciones activas en
x0
En un vértice al menos n - m variables deben
ser iguales a cero: variables no básicas
Variables distintas de cero: variables básicas
11
Programación lineal
Ejemplo:
min 2x1 + x2 - x3 + 3x4
s.a x1 + 2x2 - x3 + x4 + x5 = 3
2x1 + 4x2 + x3 + 2x4 - x5 = 12
x1 + 4x2 + x3 - x4 + 2x5 = 9
x0
Comprobar si son vértices:
( 1 1 2 1 1 )T , ( -3 4 0 0 -2 )T ,
( 9/2 1/4 5/2 0 1/2 )T , ( 3 1 2 0 0 )T
12
Programación lineal
Procedimiento básico
Método Simplex:
Suponemos conocido un vértice factible
Comprobamos si es solución:
Comprobar condiciones necesarias y suficientes
Si no lo es, buscamos un vértice contiguo
mejor
Criterio de selección entre vértices contiguos
13
Programación lineal
Método Simplex:
Aspectos básicos:
¿Cómo podemos calcular un vértice factible?
¿Qué debemos comprobar para saber si un
vértice es solución?
¿Cómo podemos escoger un vértice contiguo
mejor?
14
Programación lineal
Comprobar si un vértice es óptimo:
Paso 1. ¿Es un vértice factible?
¿Es factible?
¿Tiene al menos n - m variables iguales a cero?
Paso 2. ¿Es solución?
Condiciones de óptimo
Signo de los multiplicadores
15
Programación lineal
Condiciones de óptimo en un vértice
Problema en forma estándar
Versión más eficiente de las condiciones
Sistema de ecuaciones de tamaño reducido
Basado en partición de variables para un
vértice factible
x=
xb
xn
c=
cb
cn
A=(B N )
16
Programación lineal
Derivación de condiciones de óptimo
Condiciones generales de extremo
Condición basada en ausencia de descenso
Estudiar las direcciones factibles en el vértice
Estudiar solo las aristas que salen del vértice
Determinar si la función objetivo decrece
Vértice solución: si la f. objetivo no decrece a
lo largo de ninguna arista
17
Programación lineal
Condiciones necesarias y suficientes:
Ax = b , x 0
c = AT +
0 , Tx = 0
Para comprobar si un punto es solución:
Factibilidad
Existencia de multiplicadores
Signo de multiplicadores
18
Programación lineal
Ejemplo:
min 2x1 + x2 - x3 + 3x4
s.a x1 + 2x2 - x3 + x4 + x5 = 3
2x1 + 4x2 + x3 + 2x4 - x5 = 12
x1 + 4x2 + x3 - x4 + 2x5 = 9
x0
Comprobar
solución
si ( 3 1 2 0 0 )T es
19
Programación lineal
Condiciones simplificadas:
cb
cn
=
BT
+
T
N
0
n
,
n 0
Equivalentes a
cb = BT , cn = NT + n , n 0
o bien
cn - NTB -T cb 0
Se resuelve un sistema de dimensión m m
20
Programación lineal
Comprobación de las condiciones:
Paso 1. Se resuelve el sistema de
ecuaciones
BT = cb
Paso 2. Se calcula el multiplicador como
n = cn - NT
Paso 3. Se comprueba la condición
n 0
21
Programación lineal
Condiciones de óptimo en un vértice
Esfuerzo a realizar:
Factibilidad
Existencia de multiplicadores
Multiplicar matriz por vector
Resolver un sistema de ecuaciones
Dimensión n n
Signo de los multiplicadores
Comparación simple
22
Programación lineal
Cálculo de los multiplicadores para
( 3 1 2 0 0 )T
1 2 -1
B= 2 4 1
1 4 1
N=
1 1
2 -1
-1 2
2
cB = 1
-1
cN =
3
0
B T = cb = ( 5/6 4/3 -3/2 )T
n = cn - NT = ( -2 7/2 )T
Como (n )1 < 0 , el punto no es solución
23
Programación lineal
Método Simplex
Nos dan un vértice factible
Si es solución, se termina
Si no lo es, buscar un nuevo vértice
Cálculo de un nuevo vértice
Para alcanzar la solución más rápidamente, se
calcula un vértice mejor
Para facilitar el cálculo del nuevo vértice, se
elige un vértice contiguo
24
Programación lineal
Cálculo del nuevo vértice
Buscar entre vértices contiguos
Problema en forma estándar:
Un vértice contiguo comparte n - 1
restricciones activas
Un vértice contiguo comparte n - m - 1
variables no básicas
Una variable no básica diferente
Existen n - m vértices contiguos
25
Programación lineal
¿Qué vértice contiguo escoger?
El mejor:
Vértice contiguo con el menor valor de la
función objetivo
Demasiado caro de calcular
El que resulte más prometedor:
Vértice contiguo en la arista con el mayor
descenso en la función objetivo
26
Programación lineal
Vértice más prometedor
?
27
Programación lineal
Selección de vértice contiguo
Clave: valor de los multiplicadores
Multiplicador: cambio en la función objetivo al
alejarse de la restricción
Supongamos que i < 0
Si aumenta xi , la función objetivo disminuye a un
ritmo dado por i
Multiplicador más negativo: decrecimiento
más rápido
28
Programación lineal
Cálculo del vértice contiguo
Si el vértice no es solución, existe algún
multiplicador negativo
Seleccionar el multiplicador más negativo
Desplazarse a lo largo de la arista asociada
Expresión de la arista:
x + p , 0
p vector que representa la dirección de la arista
escalar que indica distancia sobre la arista
Cuanto mayor es , más nos alejamos del vértice
29
Programación lineal
Cálculo de dirección de movimiento, p
Dirección p tal que a lo largo de x + p :
Aumente xi
Las restricciones de igualdad se cumplan
Las demás variables no básicas sean cero
Cálculo de componentes básicas y no básicas:
p=
pb
pn
30
Programación lineal
Información de partida: vértice factible x
x=
xb
, A x = b , x 0 , xn = 0
xn
Condiciones que debe cumplir p :
Debe aumentar (xn)i (pn)i > 0
Demás variables no básicas iguales a cero
(pn)j = 0 j i
31
Programación lineal
Condiciones que debe cumplir p :
Se deben cumplir las restricciones de igualdad
A x = b , A (x + p ) = b Ap = 0
Bpb + Npn = 0 Bpb = -Npn
¿Qué queda por determinar?
Componente no básica a aumentar, i
Valor de la componente (pn)i
Se toma el valor 1
32
Programación lineal
Resumen
Forma de p :
pn = ei , Bpb = -Nei
¿Qué i se selecciona?
Variable no básica con (n)i más negativo
Justificación:
cT (x + p ) = cTx + cTp
cTp = cnTpn + cbTpb = ( cn + N TB -Tcb )T ei = (n )i
33
Programación lineal
Cálculo de p
Dado un vértice factible no solución
Paso 1. Encontrar el multiplicador más
negativo, (n )i
Paso 2. Definir pn como pn = ei
Paso 3. Resolver el sistema de ecuaciones
Bpb = -Nei
34
Programación lineal
Ejemplo:
min 2x1 + x2 - x3 + 3x4
s.a x1 + 2x2 - x3 + x4 + x5 = 3
2x1 + 4x2 + x3 + 2x4 - x5 = 12
x1 + 4x2 + x3 - x4 + 2x5 = 9
x0
Estudiar el punto ( 3 1 2 0 0 )T
n = c n -
NTB -Tc
b
-2
=
7/2
35
Programación lineal
Definición de p
Componentes no básicas: pn = e1
Componentes básicas:
1 2 1
1 1
-1
Bpb = -Ne1 2 4 1 pB = - 2 -1 e1 = -2
1 4 1
1 2
1
-3
pB = 1
0
Dirección de movimiento:
p = ( -3 1 0 1 0 )T
36
Programación lineal
Justificación de la condición de óptimo
¿Se tiene ascenso en el vértice a lo largo
de todas las aristas?
Cálculo de todas las aristas en un vértice:
pn = ei i ,
Bpb = -Npn
Puntos a lo largo de la arista:
x+p
¿Descenso o ascenso?
cT ( x + p ) - cT x = cT p
cT p < 0 descenso, cT p > 0 ascenso
37
Programación lineal
Justificación de la condición de óptimo
Expresión formal
cT p = cnT pn + cbT pb = cnT ei + cbT (-B -1Nei )
= eiT ( cn - NTB -T cb ) = eiT n
donde
n = cn - NTB -T cb
Se tiene una solución (para minimización) si
n 0
38
Programación lineal
Cálculo de la longitud de paso
xk+1 = xk + pk
¿Cómo interesaría moverse?
A lo largo de pk la función objetivo decrece
linealmente
Moverse tan lejos como sea posible
Unica limitación:
Restricciones de cota de las variables básicas
39
Programación lineal
Cálculo de la longitud de paso
Condición:
xi + pi 0 i B
Para cada componente i básica calculamos
el mayor paso factible, -xi /pi
El paso se define como el menor de los
cocientes para los pasos positivos
= min { -xi /pi | pi < 0 }
40
Programación lineal
Ejemplo:
min 2x1 + x2 - x3 + 3x4
s.a x1 + 2x2 - x3 + x4 + x5 = 3
2x1 + 4x2 + x3 + 2x4 - x5 = 12
x1 + 4x2 + x3 - x4 + 2x5 = 9
x0
En ( 3 1 2 0 0 )T hemos obtenido
p = ( -3 1 0 1 0 )T
Solo existe una componente negativa en p
= -3/(-3) = 1 , x’ = x + p = ( 0 2 2 1 0 )T
41
Programación lineal
Cálculo del vértice factible inicial
Para aplicar el método Simplex falta un
vértice inicial
Pero el método Simplex es capaz de
generar vértices factibles
Las soluciones de un problema lineal lo son
Basta con encontrar un problema lineal
con las propiedades adecuadas
42
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
43
Programación lineal
Supondremos que b 0
Problema auxiliar
min cTx
s.a Ax = b
x0
min
eTw
s.a Ax + w = b
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
44
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
45
Programación lineal
Ejemplo:
max 2x1 - 3x2 - x3 + 2x4
s.a
x1 + x2 - x3 - x4 -2
2x1 - x2 + 2x3 + x4 1
-x1 + x2 + x3 - 2x4 = -2
x0
Lado derecho mayor que cero:
max 2x1 - 3x2 - x3 + 2x4
s.a
-x1 - x2 + x3 + x4 2
2x1 - x2 + 2x3 + x4 1
x1 - x2 - x3 + 2x4 = 2
x0
46
Programación lineal
Problema en forma estándar
max 2x1 - 3x2 - x3 + 2x4
s.a
-x1 - x2 + x3 + x4 + s1 = 2
2x1 - x2 + 2x3 + x4 - s2 = 1
x1 - x2 - x3 + 2x4 = 2
x,s0
Problema auxiliar:
min w1 + w2
s.a
-x1 - x2 + x3 + x4 + s1 = 2
2x1 - x2 + 2x3 + x4 - s2 + w1 = 1
x1 - x2 - x3 + 2x4 + w2 = 2
x,s,w0
47
Programación lineal
Ejemplo
Punto inicial del problema auxiliar:
x = ( 0 0 0 0 )T ,
w = ( 1 2 )T
Punto solución del problema auxiliar:
x = ( 0 0 0 1 )T ,
s = ( 2 0 )T ,
s = ( 1 0 )T ,
w = ( 0 0 )T
Vértice factible del problema inicial:
x = ( 0 0 0 1 )T
48
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
49
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
50
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
51
Programación lineal
Ejemplo
min
s.a
x1 - 2x2 - x3
x1
+ x3 1
x1 + 2x2 + 2x3 2
x0
Paso 0. Poner en forma estándar
min
s.a
x1 - 2x2 - x3
x1
+ x3 - s1
=1
x1 + 2x2 + 2x3
+ s2 = 2
x,s0
52
Programación lineal
Paso 1. Vértice factible inicial
Problema auxiliar:
min
s.a
a
x1
+ x 3 - s1
+a=1
x1 + 2x2 + 2x3
+ s2
=2
x,s,a0
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
53
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
54
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
55
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 ?
56
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
57
Programación lineal
Convergencia del método Simplex
Si el problema no tiene solución
Si el problema no es factible:
Basta con poder identificar la situación
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
58
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
59
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
60
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:
Variable que sale de la base:
Primera con el menor valor del multiplicador
Primera con el menor cociente para
Orden de variables: cualquiera pero fijo
Ineficiencia en la práctica
61
Programación lineal
Organización de los cálculos
Para su aplicación manual
Se disponen los datos en una tabla,
cT
A
0
b
En un vértice, la tabla se reajusta como
cT - cbTB -1A
B -1A
-cbTB -1b
B -1b
62
Programación lineal
¿Qué información proporciona la tabla?
cT - cbTB -1A
B -1A
Multiplicadores
Dir. de movimiento
-cbTB -1b
B -1b
Función objetivo
Valores de variables
Cada vértice corresponde a diferentes valores
de B y cB
63
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
64
Programación lineal
B’
-1
La matriz de interés en la tabla es la
inversa,
= 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
65
Programación lineal
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
0 2 -3 1 1 2
1 -1 1 0 -1 2
-3 -2 0 0 2 20
3 -1 0 1 -2 8
1 -1 1 0 -1 2
Propiedad de las columnas básicas:
Matriz identidad más ceros en la fila superior
66
Programación lineal
Ejemplo
min
s.a
x1 - 2x2 - x3
x1
+ x3 1
x1 + 2x2 + 2x3 2
x0
Problema auxiliar:
min
s.a
a
x1
+ x 3 - s1
+a=1
x1 + 2x2 + 2x3
+ s2
=2
x,s,a0
67
Programación lineal
Tablas para el problema auxiliar
1
0
1
1
-2
0
0
2
-1
0
1
2
0
0
-1
0
0
0
0
1
0
1
1
0
0
0
1
2
1
-1
1
1
-2
0
0
2
-1
-1
1
2
0
1
-1
0
0
0
0
1
0 0
0 -1
1 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
68
Programación lineal
Nueva tabla:
1
-1
1
1
-2
0
0
2
-1
-1
1
2
0
1
-1
0
0
0
0
1
0 0
0 -1
1 1
0 2
0
0
1
0
-2
0
0
2
-2
0
1
1
1
0
-1
1
0
0
0
1
-1 -1
1 0
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
69
Programación lineal
De vuelta al problema original:
0 -2 -2 1 0 -1
1 0 1 -1 0 1
0 2 1 1 1 1
0 0 -1
2
1
1 0
1
-1
0
0 1 1/2 1/2 1/2
0
1
1/2
¿Es solución? No
Siguiente vértice:
0 0 -1 2
1
1 0
1 -1
0
0 1 1/2 1/2 1/2
0
1
1/2
0 2 0 1 2
1 -2 0 -2 -1
0 2 1 1 1
1
0
1
70
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
71