You are on page 1of 71

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) Probar vértices eficientemente hasta encontrar la solución 6  Método Simplex:  .

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 ≥ 0 cT x = ∑i ωi cTxi ≥ mini cTxi 7 . ∑i ωi = 1.Programación lineal Justificación:  Resultado básico (teor.

etc. 8 .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.

Ax ≥ b   Caras: subconjuntos de hiperplanos  Vértices: Puntos intersección de al menos n caras  Aristas: Segmentos intersección de n .Programación lineal Partes de un politopo.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 . det(Ab ) ≠ 0. Ax ≥ b } Ab An bb bn Vértices: existe una partición de A y b. Ab x = bb . bb ∈ ℜn. A= b= Ab ∈ ℜn×n. An x ≥ bn 10 .

m restricciones activas en x≥0 En un vértice al menos n . A ∈ ℜm×n  Siempre existen m restricciones activas. Ax = b  Necesitamos n .Programación lineal Vértices de Ax = b.m variables deben ser iguales a cero: variables no básicas  Variables distintas de cero: variables básicas  11 . x ≥ 0.

x3 + x4 + x5 = 3 2x1 + 4x2 + x3 + 2x4 . ( -3 4 0 0 -2 )T . ( 3 1 2 0 0 )T 12 .a x1 + 2x2 . ( 9/2 1/4 5/2 0 1/2 )T .x3 + 3x4 s.x5 = 12 x1 + 4x2 + x3 .x4 + 2x5 = 9 x≥0  Comprobar si son vértices: ( 1 1 2 1 1 )T .Programación lineal Ejemplo: min 2x1 + x2 .

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 .

m variables iguales a cero? Condiciones de óptimo   Paso 2.Programación lineal Comprobar si un vértice es óptimo:  Paso 1. ¿Es solución?  Signo de los multiplicadores 15 . ¿Es un vértice factible?   ¿Es factible? ¿Tiene al menos n .

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 .

x ≥ 0 c = ATλ + σ σ ≥ 0 . σT x = 0  Para comprobar si un punto es solución: Factibilidad  Existencia de multiplicadores  Signo de multiplicadores σ  18 .Programación lineal Condiciones necesarias y suficientes: Ax = b .

Programación lineal Ejemplo: min 2x1 + x2 .a x1 + 2x2 .x3 + 3x4 s.x3 + x4 + x5 = 3 2x1 + 4x2 + x3 + 2x4 .x4 + 2x5 = 9 x≥0  Comprobar solución si ( 3 1 2 0 0 )T es 19 .x5 = 12 x1 + 4x2 + x3 .

σn ≥ 0 Equivalentes a cb = BTλ .NTB -T cb ≥ 0 Se resuelve un sistema de dimensión m × m 20 . cn = NTλ + σn .Programación lineal Condiciones simplificadas: cb cn  = BT NT λ+ 0 σn . σn ≥ 0 o bien  cn .

Programación lineal Comprobación de las condiciones:  Paso 1. Se resuelve el sistema de ecuaciones BTλ = cb Paso 2. Se comprueba la condición σn ≥ 0 21   .NTλ Paso 3. Se calcula el multiplicador como σn = cn .

Programación lineal Condiciones de óptimo en un vértice  Esfuerzo a realizar:  Factibilidad  Multiplicar matriz por vector Resolver un sistema de ecuaciones Dimensión n × n Comparación simple  Existencia de multiplicadores    Signo de los multiplicadores  22 .

el punto no es solución 23 .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 cB = 2 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 .

se elige un vértice contiguo  24 . 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.Programación lineal Método Simplex  Nos dan un vértice factible Si es solución. se termina  Si no lo es.

m vértices contiguos  25 .1 variables no básicas  Una variable no básica diferente  Existen n .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 .m .1 restricciones activas  Un vértice contiguo comparte n .

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 .

α ≥ 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 . 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 .Programación lineal Cálculo del vértice contiguo Si el vértice no es solución.

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 .

A x = b . x ≥ 0 . xn = 0  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  Información de partida: vértice factible x x= xb xn .

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 (p ) n i   Se toma el valor 1 32 .

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 Resumen  Forma de p : pn = ei .

(σn )i Paso 2. Encontrar el multiplicador más negativo. Resolver el sistema de ecuaciones   Bpb = -Nei 34 .Programación lineal Cálculo de p  Dado un vértice factible no solución  Paso 1. Definir pn como pn = ei Paso 3.

Programación lineal Ejemplo: min 2x1 + x2 .x4 + 2x5 = 9 x≥0  Estudiar el punto ( 3 1 2 0 0 )T σn = cn .x3 + x4 + x5 = 3 2x1 + 4x2 + x3 + 2x4 .a x1 + 2x2 .x3 + 3x4 s.N B cb = T -T -2 7/2 35 .x5 = 12 x1 + 4x2 + x3 .

Programación lineal Definición de p   Componentes no básicas: pn = e1 Componentes básicas: 1 2 1 1 1 -1 -3 Bpb = -Ne1 ⇔ 2 4 1 pB = .2 -1 e1 = -2 ⇒ pB = 1 1 4 1 1 2 1 0  Dirección de movimiento: p = ( -3 1 0 1 0 )T 36 .

cT p > 0 ascenso  37 . Bpb = -Npn  Puntos a lo largo de la arista: x+αp  ¿Descenso o ascenso? cT ( x + α p ) .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 .cT x = α cT p cT p < 0 descenso.

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 Justificación de la condición de óptimo Expresión formal cT p = cnT pn + cbT pb = cnT ei + cbT (-B -1Nei )  = eiT ( cn .

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 .

-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 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.

x3 + x4 + x5 = 3 2x1 + 4x2 + x3 + 2x4 .a x1 + 2x2 .Programación lineal Ejemplo: min 2x1 + x2 .x3 + 3x4 s. x’ = x + p = ( 0 2 2 1 0 )T 41 .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 .

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 .

w ) = ( 0 . b )  Si la solución del problema modificado resultase ser ( x .a Ax + w = b x . x sería un vértice factible del problema original 44 .Programación lineal Supondremos que b ≥ 0  Problema auxiliar  min cTx s.a Ax = b x≥0  → min eTw s. 0 ) .w ≥ 0 Vértice inicial: ( x .

Resolver dicho problema partiendo de (0. Asegurar que b ≥ 0 Paso 2. Si en la solución w ≠ 0 . el problema original no es factible   45 .b) Paso 4. Construir el problema modificado Paso 3. resolver el problema original desde x Paso 5. Si en la solución w = 0 .Programación lineal    Paso 1.

x2 + 2x3 + x4 ≥ 1 x1 .a x1 + x2 .3x2 .x3 .2x4 = -2 x≥0 max 2x1 .x2 .x3 + 2x4 s.a -x1 .x3 + 2x4 s.Programación lineal Ejemplo: max 2x1 .3x2 .x4 ≥ -2 2x1 .x3 + 2x4 = 2 x≥0  Lado derecho mayor que cero: 46 .x2 + 2x3 + x4 ≥ 1 -x1 + x2 + x3 .x2 + x3 + x4 ≤ 2 2x1 .

x2 + 2x3 + x4 .a -x1 .x3 + 2x4 + w2 = 2 x.x3 + 2x4 s.s2 = 1 x1 .s≥0 min w1 + w2 s.w≥0 47 .x2 .x3 + 2x4 = 2 x.Programación lineal  Problema en forma estándar  Problema auxiliar: max 2x1 .s.x2 + x3 + x4 + s1 = 2 2x1 .x2 + 2x3 + x4 .s2 + w1 = 1 x1 .3x2 .a -x1 .x2 .x2 + x3 + x4 + s1 = 2 2x1 .

 48 . s = ( 1 0 )T .  Punto solución del problema auxiliar: Vértice factible del problema inicial: x = ( 0 0 0 1 )T x = ( 0 0 0 1 )T .Programación lineal Ejemplo  Punto inicial del problema auxiliar: s = ( 2 0 )T . w = ( 1 2 )T w = ( 0 0 )T x = ( 0 0 0 0 )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 Resolver el problema auxiliar Determinar un vértice factible para el problema original

Paso 1.2 Fase I
 

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

x3 x1 + x 3 .a x1 .s≥0  Paso 0.Programación lineal Ejemplo min s.a 52 .x3 x1 + x3 ≥ 1 x1 + 2x2 + 2x3 ≤ 2 x≥0 x1 . Poner en forma estándar min s.2x2 .2x2 .s1 =1 x1 + 2x2 + 2x3 + s2 = 2 x.

Vértice factible inicial  Problema auxiliar: min s.s1 +a=1 x1 + 2x2 + 2x3 + s2 =2 x. s = ( 0 2 )T .s.a a x1 + x 3 . a = 0 53 .a≥0  Vértice factible inicial: x = ( 0 0 0 )T . s = ( 0 1 )T .Programación lineal  Paso 1. a = 1  Solución: x = ( 1 0 0 )T .

Programación lineal  Paso 2.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 . Solución del problema original   Variables básicas: x1 . σn = cn . s2 ¿Es solución el vértice? λ = B -Tcb = ( 1 0 )T .

x2 ¿Es solución el vértice? Dirección de movimiento: Longitud de paso: α = min{ 1/1 . pb = -B -1Npn = ( -1 -1/2 )T .NTλ = ( -1 2 1 )T  pn = ( 1 0 0 )T .Programación lineal  Siguiente iteración:   Variables básicas: x1 . (1/2)/(1/2) } = 1 Nuevo vértice: x’ = ( 0 0 1 0 0 )T 55 λ = B -Tcb = ( 2 -1 )T . σn = cn . p = ( -1 -1/2 1 0 0 )T   .

NTλ = ( 2 3 2 )T    .Programación lineal  Siguiente iteración:   Variables básicas: x1 . x3 ? 56 λ = B -Tcb = ( 3 -2 )T . x3 ¿Es solución el vértice? El vértice es solución Vértice degenerado ¿Qué habría sucedido si hubiésemos considerado como variables básicas x2 . σn = cn .

a x≥0 Factible y acotado ⇒ óptimo   57 .Programación lineal Convergencia del método Simplex  Un problema lineal puede ser:  No factible No acotado max x1 + x2 s.

Programación lineal Convergencia del método Simplex  Si el problema no tiene solución  Basta con poder identificar la situación La fase I acaba con una solución w ≠ 0 El método Simplex encuentra un paso α = ∞ En alguna iteración pb ≥ 0 58  Si el problema no es factible:   Si el problema no está acotado:   .

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 σ ≥ 0 n 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:  Primera con el menor valor del multiplicador Primera con el menor cociente para α  Variable que sale de la base:   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 -cbTB -1b B -1b 62 En un vértice. la tabla se reajusta como cT .cbTB -1A B -1A .

Programación lineal ¿Qué información proporciona la tabla? cT . de movimiento  -cbTB -1b B -1b Función objetivo Valores de variables Cada vértice corresponde a diferentes valores de B y cB 63 .cbTB -1A B -1A Multiplicadores Dir.

bm ) → ( b1 .ek )ekT ) = BE 64 . bk . bj .... bm ) = B’ B’ = B + (bj ..bk )ekT = B (I + ( B -1bj .....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 .

Programación lineal  La matriz de interés en la tabla es la inversa. B’ -1 = E -1B -1 . nj’ = B -1nj B’ -1A = B -1A .(1/ekTnj’ )(nj’ .ek )ekT N’ = B -1N .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  .(1/ekTB -1bj )( B -1bj . E -1 = I .

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 .

2x2 .s1 +a=1 x1 + 2x2 + 2x3 + s2 =2 x.Programación lineal Ejemplo min s.x3 x1 + x3 ≥ 1 x1 + 2x2 + 2x3 ≤ 2 x≥0  Problema auxiliar: min s.a a x1 + x 3 .a≥0 67 .s.a x1 .

¿Son positivos los multiplicadores?  Paso 2. de movimiento y long.1. Dir.2. de paso:   Columna multipl.Programación lineal  Tablas para el problema auxiliar 1 -2 -1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 -1 0 1 1 1 2 2 0 1 0 2  1 -2 -1 0 0 0 0 -1 0 -1 1 0 0 -1 → 1 0 1 -1 0 1 1 2 2 0 1 0 1 2 Paso 2. fila cociente menor Se pivota sobre el valor 1 68 . más negativo.

Programación lineal  Nueva tabla: 1 -2 -1 0 0 0 0 → 0 -2 -2 1 0 -1 -1 0 0 0 0 0 1 1 0 1 -1 0 1 0 2 1 1 1 -1 0 1 1 -1 0 -1 1 0 0 -1 1 0 1 -1 0 1 1 1 2 2 0 1 0  2 Nueva tabla es óptima para problema auxiliar 0 -2 -2 1 0 -1 1 0 1 -1 0 0 2 1 1 1 1 1 69 .

Programación lineal  De vuelta al problema original: 0 -2 -2 1 0 -1 1 0 1 -1 0 0 2 1 1 1  0 0 → -1 2 1 0 1 1/2 1 1 1 0 1 -1 0 0 1 1/2 1/2 1/2 ¿Es solución? No  Siguiente vértice: 0 0 -1 2 1 0 1 → 1/2 0 2 0 1 2 1 0 1 1 0 1 -1 0 0 1 1/2 1/2 1/2 1 -2 0 -2 -1 0 2 1 1 1 70 .

Programación lineal Resumen:  En la tabla se selecciona: Columna del multiplicador más negativo  Fila con menor cociente b ’ /n ’ para n ’ > 0 ik ik ik    Se pivota sobre el elemento nik’ El proceso se repite hasta que los multiplicadores tienen el signo correcto 71 .