720 likes | 1.35k Views
Programación lineal. Problemas lineales (forma estándar) min c T x s.a Ax = b x 0 Estudiaremos sus propiedades especiales Métodos específicos de solución: Método Simplex
E N D
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
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
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
Programación lineal • Politopos
Programación lineal • Soluciones
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
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 = ii xi , ii = 1, i 0 cT x = ii cTxi minicTxi
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.
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
Programación lineal • Caracterización algebraica: • Caras: {x | jajTx = bj , Ax b } • Vértices: existe una partición de A y b, Ab bb A = b = Anbn Ab nn, bb n, det(Ab ) 0, Ab x = bb ,An x bn
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 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
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
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
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?
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
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 xb cb x = c = A = ( BN ) xncn
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
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
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 ( 3 1 2 0 0 )T es solución
Programación lineal • Condiciones simplificadas: cb BT 0 = + , n 0 cnNTn • Equivalentes a cb = BT , cn = NT + n , n 0 o bien cn - NTB -Tcb 0 • Se resuelve un sistema de dimensión m m
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
Programación lineal • Condiciones de óptimo en un vértice • Esfuerzo a realizar: • Factibilidad • Multiplicar matriz por vector • Existencia de multiplicadores • Resolver un sistema de ecuaciones • Dimensión n n • Signo de los multiplicadores • Comparación simple
Programación lineal • Cálculo de los multiplicadores para ( 3 1 2 0 0 )T 1 2 -1 1 1 2 3 B = 2 4 1 N = 2 -1 cB = 1 cN = 1 4 1 -1 2 -1 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
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
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
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
Programación lineal • Vértice más prometedor ?
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
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
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: pb p = pn
Programación lineal • Información de partida: vértice factible x xb x = , 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
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
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 )Tei = (n )i
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
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 -2 n = cn - NTB-Tcb = 7/2
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
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 = eii , 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
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 -Tcb ) = eiTn donde n = cn - NTB -Tcb • Se tiene una solución (para minimización) si n 0
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
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 }
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
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
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 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
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
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