Programación lineal Problemas lineales (forma estándar) min cTx s.a Ax = b x0 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 x0 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
x0
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  nn, bb  n, det(Ab )  0,
Ab x = bb , An x  bn
10
Programación lineal
Vértices de
Ax = b, x  0, A  mn

Siempre existen m restricciones activas,
Ax = b

Necesitamos n - m restricciones activas en
x0
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
x0

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
x0
 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
x0

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
x0
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
x0

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
x0
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
x0
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,s0

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,w0
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
x0
Paso 0. Poner en forma estándar
min
s.a
x1 - 2x2 - x3
x1
+ x3 - s1
=1
x1 + 2x2 + 2x3
+ s2 = 2
x,s0
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,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
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
x0
Problema auxiliar:
min
s.a
a
x1
+ x 3 - s1
+a=1
x1 + 2x2 + 2x3
+ s2
=2
x,s,a0
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