Optimización sin restricciones Optimización sin restricciones min J ( x ) Prof. Cesar de Prada Dpt. Ingeniería de Sistemas y Automática UVA prada@autom.uva.es x x ∈ Rn Los métodos sin restricciones son importantes porque: Hay problemas que se pueden formular sin restricciones Permiten introducir muchos conceptos y explorar ideas que se usarán en problemas NLP Muchos problemas de optimización utilizan en alguna fase algoritmos sin restricciones Algunos problemas NLP pueden reformularse como problemas sin restricciones Indice Condiciones de extremo Problemas monovariables – – – Métodos tipo Newton Métodos de reducción de intervalos Métodos de aproximación por polinomios Existen muchos métodos. En el curso solo veremos algunos de los mas significativos – – min J ( x ) x x ∈ Rn Condición necesaria Problemas multivariables – Condiciones de extremo Algoritmos basados en gradientes Algoritmos tipo Newton Algoritmos basados solo en valores de la función ∂J ( x ) =0 ∂x x * Software Condiciones de extremo J( x ) = J( x * ) + ∂J ∂x =0 ∂J ∂x ' ∂ 2 J(x ) 1 ( x − x * ) + .... ( x − x * ) + ( x − x * )' 2 * ∂ x 2 x x* min J ( x ) x x ∈ Rn x* cumpliendo esta ecuación se denomina punto estacionario ∂ 2 J( x ) 1 (x − x* ) ( x − x * )' ∂x 2 x * 2 El hessiano H, o matriz de derivadas segundas determina el carácter del posible óptimo H= ∂ 2J ( x ) ∂x 2 x* Condiciones de extremo x* J( x ) − J( x * ) ≈ En problemas sin restricciones es posible encontrar condiciones analíticas de óptimo Aproximación de 2º orden Si H(x*) es PD o PSD, J(x) presenta un mínimo en x* Si H(x*) es ND o NSD, J(x) presenta un máximo en x* Si H(x*) es indefinida no hay extremo, J(x) presenta un punto de silla en x* ∂J ( x ) =0 ∂x x* La solución analítica de la condición de extremo, para funciones complejas, suele ser una ecuación no lineal difícil de resolver, por lo que suele ser preferible formular métodos numéricos directos para resolver el problema Optimización monovariable Método de Newton (Newton-Raphson) Son problemas importantes porque: min J ( x ) Se usan como un paso intermedio en otros algoritmos x x∈R Muchos problemas son monovariables La solución analítica es J’(x)=0 min J ( x ) x ¿cómo resolver esta ecuación? x∈R Aplicando el método de Newton. Para la solución de f(z) = 0: z k +1 = z k − Existen varios métodos basados en enfoques diferentes: a) Imponer las condiciones analíticas Que conduce a: f (z k ) f ' (z k ) b) Minimizar un intervalo de incertidumbre c) Aproximar la función por un polinomio x k +1 = x k − d) otros J' (x k ) J' ' (x k ) Se parte de un valor inicial x0 y se generan aproximaciones x1, x2, .... hasta que se cumpla un criterio de finalización Supondremos que las funciones J(x) son unimodales y solo presentan un mínimo local Interpretación geométrica J '(x k ) = (x k +1 − x k )J ''(x k ) J’(x) x k +1 = x k − Objetivo x xk Criterios de finalización J '(x k ) J ''(x k ) J' (x k ) J' ' (x k ) Criterios de finalización: | J’(xk) | < ε J’(x) | xk+1 - xk | < ε J’(x) xk+1 | J(xk+1) – J(xk)| < ε k>N x Cada iteración corresponde a una aproximación lineal x xk xk xk+1xk+2 xk+1xk+2 La principal dificultad y empleo de tiempo está en el cálculo de las derivadas Derivadas Convergencia • Si las derivadas no son calculables analíticamente, pueden aproximarse por: J(x k + σ) − J(x k − σ) J '(x k ) = 2σ J ''(x k ) = J(x k + σ) − 2J(x k ) + J(x k − σ) σ2 Por tanto: x k +1 = x k − x k +1 = x k − J ( x k + σ ) − J ( x k − σ) σ2 J ( x k + σ) − 2 J ( x k ) + J ( x k − σ) 2 σ x k +1 = x k − J' (x k ) J' ' (x k ) x* x5 x σ >0 pequeño x0 x1 x3 x4 x2 Diremos que la solución converge a un valor x* cuando la secuencia de valores xk generados por el algoritmo verifican x k +1 − x * ≤ c x k − x * 0 < c <1 A partir de un k. De modo que los puntos xk están cada vez mas próximos a x* Ejemplo J(x) = x2 + 4 cos(x) Método de Newton J’(x) 6 J' (x k ) x k +1 = x k − J' ' (x k ) Minimizar J(x) 5 J’(x*) = 4 xk Ventajas: J(x) x = 2x* - 4sen(x*) = 0 3 xk+1 Necesita resolverse por métodos numéricos 2 1 Converge localmente en forma cuadrática 0 Inconvenientes: -4 -3 -2 Hay que calcular o estimar primeras y segundas derivadas -1 0 1 2 x x* x* Si J’’(x) →0 converge lentamente 3 4 x* = ± 1.895.. , 0 2 mínimos (locales, globales) y un máximo Si x0 esta muy alejado de x* puede no converger, o converger a otro valor Minimizar J(x) = x2 + 4 cos(x) Minimizar J(x) usando Newton 6 5 4 J’(x) = 2x-4sen(x) 4 3 J’’(x) = 2 – 4cos(x) 2 2 1 1 -1 x k +1 = x k − 1 2 x x* 3 4 x k +1 J' (x k ) J' ' (x k ) x − 2sen(x k ) = xk − k 1 − 2 cos(x k ) x0 = 3 Ejemplo J(x) = x2 + 4 cos(x) -2 -1 3 − 2sen(3) = 1 − 2 cos(3) = 2.088 4 2.088 − 2sen(2.088) x 2 = 2.088 − 1 − 2 cos(2.088) = 1.91 x 3 = ...... x1 = 3 − 0 0 x k − 2sen(x k ) 1 − 2 cos(x k ) x0 = 3 3 0 -2 x k +1 = x k − 5 J(x) J(x) 6 Minimizar J(x) = x2 + 4 cos(x) 0 x k +1 = x k − 1 2 x x* J' (x k ) J' ' (x k ) 3 Métodos de Reducción de Intervalos 3,5 3 6 2,5 2 5 1,5 x0 = 3 1 0,5 0 J(x) 4 3 0 1 2 1 -1 4 5 6 7 x0 = 1 20 0 -2 3 k 2 Generar una sucesión de intervalos [x1 , x2], [x3, x4],.... de dentro de cada uno de los cuales esta el óptimo y longitud cada vez menor hasta llegar a la precisión requerida x1 10 0 1 2 x x* 3 J(x) 4 2 pasos: 0 0 5 10 15 -10 Converge a diferentes velocidades y puntos en función del punto inicial k Excel 20 25 30 1. Encontrar un intervalo inicial que contenga a x* 2. Reducir la longitud inicial hasta la precisión requerida x3 x4 x 2 x* 1 (Semi)Intervalo inicial 1 Intervalo inicial Si J(x1) < J(x2) → x* < x2 Si J(x1) > J(x2) → x* > x1 Si J(x1) = J(x2) → x* ∈[ x1, x2] x1 = x 0 + δ x* x 1 J(x) x2 x 2 = x 0 + 2δ J(x) x0 x1 .... xk x 3 = x 0 + 22 δ x k = x0 + 2 x* x2 x1 2 Reducción del intervalo El intervalo inicial es [xk-1 , xk+1] δ Es positivo o negativo según el semiintervalo 2 Reducción del intervalo, ε-minimax J(x) J(x) Si en el paso k el intervalo en el que se encuentra el óptimo es J(xk-1) > J(xk) ≤ J(xk+1) δ Compromiso precisión / nº de iteraciones x2 x* k −1 Criterio: minimizar la longitud del mayor de los intervalos posibles [αk , βk], se puede reducir su longitud Lk = βk - αk evaluando la función J(x) en dos puntos γ1 < γ2 internos al intervalo Min max { γ2 - αk, βk - γ1, γ2 - γ1} Si γ2 = γ1 + ε ε γ1 γ2 αk J ( γ1 ) > J ( γ 2 ) ⇒ [α k +1 , β k +1 ] = [ γ1 , β k ] J ( γ1 ) < J ( γ 2 ) ⇒ [αk +1 , β k +1 ] = [αk , γ 2 ] αk βk γ1 γ2 Min max{γ1 + ε - αk, βk - γ1} βk βk - γ1 γ1 + ε - αk = βk - γ1 ¿Como elegir los dos puntos internos? β k + αk ε − 2 2 β + αk ε γ2 = k + 2 2 γ1 = J ( γ1 ) = J ( γ 2 ) ⇒ [α k +1 , β k +1 ] = [ γ1 , γ 2 ] Simétricos respecto al centro del intervalo J(x) βk αk - ε 6 γ1 γ2 β k γ2 - αk = βk - γ1 β + αk ε γ1 = k − 2 2 βk + αk ε γ2 = + 2 2 β + αk ε L k +1 = γ 2 − αk = k + − αk = 2 2 β k − αk ε L k + ε = + = 2 2 2 J(x) ε = 0.02 3,16 3,339 3 2 Puntos intermedios iniciales: 1 + (3-1)/2 ± ε/2 3,331 1 1,99, 2.01 0 -2 En N pasos: -1 0 1 x 4 L + ( 2 − 1)ε L0 LN = 0 ≈ N 2N 2 Intervalo inicial [1,3] 4 ε debe escogerse tan pequeño como se pueda para reducir la longitud del intervalo N γ1 Minimizar J(x) 5,04 5 alfa, beta αk γ1 + ε - αk Ejemplo J(x) = x2 + 4 cos(x) 2 Reducción del intervalo, ε-minimax ε xk+1 Hasta que: .... x1 J(x) Conocido un semi-intervalo inicial p.e. [x0, ∞) donde esta x*, para localizar un intervalo inicial se puede generar una secuencia de valores: J(x) Se toman dos puntos x1 < x2 3 2 3 1 2,01 1,495 2,01 4 Excel 2 1 0 1 2 3 4 k 5 6 7 Sección dorada Método de la Sección dorada ρLk J(x) ε αk γ1 γ2 ε βk αk γ1 γ2 βk γ αk+1 βk+1 J(x) γk P(x) = a + bx + βk cx2 P(αk) = a + b αk + c αk 2 = J(αk) P(γk) = a + b γk + c γk 2 = J(γk) P(βk) = a + b βk + c βk 2 = J(βk) Si se conoce el valor de J(x) en tres puntos del intervalo [αk , βk] se puede calcular un polinomio P(x) de segundo orden que pase por dichos puntos y que se puede considerar una aproximación de J(x) en el intervalo. J(x) µ αk γk αk γk µ γk µ βk αk γ1 γ1 − α k = ρ(β k − α k ) = ρ L k = β k − γ 2 βk γ 2 − γ1 = (1 − 2ρ)L k γ 2 − α k = (1 − ρ)L k γ1 − α k = δ 2 − α k +1 = (1 − ρ)L k +1 = γ2 = (1 − ρ)( γ 2 − α k ) βk ρL k = (1 − ρ) 2 L k ρ 2 − 3ρ + 1 = 0 3 ± 5 no es < 0.5 = 2 0.382 1 − ρ = 0.618 Lk+1 = 0.618 Lk ρ= L N ≈ 0.618 N L 0 Métodos de aproximación por polinomios (2º orden) P(x) = a + bx + cx2 Sistema de ecuaciones lineales en a, b, c que pueden calcularse: P(αk) = a + b αk + c αk 2 = J(αk) P(γk) = a + b γk + c γk 2 = J(γk) P(βk) = a + b βk + c βk 2 = J(βk) J(x) c= b= J (β k ) − J ( γ k ) + J (αk ) − J ( γ k ) (βk − αk )(βk − γ k ) (βk − αk )(γ k − αk ) J ( γ k ) − J (αk ) − c( γ k + α k ) γ k − αk Mínimo de P(x) = a + bx + cx2 αk γk µ βk µ = - b / (2c) , calcular J(µ) y reducir el intervalo Optimización multivariable min J ( x ) µ= - b / (2c) , calcular J(µ) y reducir el intervalo x ∈Rn Cualquiera de los dos intervalos que pueden resultar de la reducción, contiene un punto interior y puede usarse para una nueva iteración γ2 βk+1 Mínimo de P(x) = a + bx + cx2 Son posibles otros métodos, p.e. de interpolación cúbica usando 4 puntos βk αk+1 El método usa el mínimo analítico del polinomio para estimar un nuevo punto (próximo al óptimo) y reducir la longitud del intervalo de incertidumbre, pero calculando un solo valor nuevo de J(x) en cada iteración Métodos de aproximación por polinomios γ1 δ1 δ2 Puede plantearse el mismo problema imponiendo la condición de que uno de los puntos sirva para la siguiente iteración. El algoritmo de la sección dorada está basado en esta idea Metodos de aproximación por polinomios (2º orden) αk αk El método del ε – minimax evalua la función J en dos puntos internos que no reutiliza en la siguiente iteración x Ejemplo J ( x 1 , x 2 ) = x 12 + x 22 − x 1 x 2 + 2 2 − 1 x 1 1 J ( x 1 , x 2 ) = ( x 1 , x 2 )' + 2 2 − 1 2 x 2 xk = valor del vector x en el paso k Algoritmos de búsqueda del óptimo x k +1 = x k + ∆x k = sk xk xk+1 = x k + σks k Criterios de terminación 1 El gradiente es suficientemente pequeño sk xk+1 xk 2 La solución no avanza significativamente x k +1 − x k ≤ ε2 ε0 + x k Métodos iterativos: Partiendo de un valor inicial x0 , se busca un nuevo punto en una cierta dirección de búsqueda sk que de un mejor valor de J Se continua iterando hasta estar suficientemente cerca del óptimo Curvas de nivel de J(x) Propiedades del algoritmo 3 La función de costo no mejora significativamente xk La longitud del paso es cada vez menor J ( x k +1 ) − J ( x k ) ≤ ε3 ε 0 + J( x k ) ε fija la tolerancia o precisión ε0 > 0 evita divisiones por cero 4 El número de iteraciones excede un máximo N Propiedades del algoritmo Estabilidad / Convergencia sk xk+1 ∂J ( x k ) ≤ ε1 ∂x Velocidad de convergencia al óptimo de orden p sk xk+1 xk c velocidad de convergencia x k +1 − x * Convergencia al optimo x k − x* p ≤c k grande 0 < c <1 Velocidad de convergencia superlineal Convergencia local / global lim El algoritmo es un sistema dinámico discreto Optimización multivariable k →∞ x -g(x) Variedad de enfoques: – – – x k − x* p =0 Métodos basados en el gradiente min J ( x ) x ∈Rn x k +1 − x * Algoritmos basados en el gradiente Algoritmos tipo Newton Algoritmos basados en valores de la función El vector gradiente de J(x) en un punto x indica la dirección en la que la función experimenta el máximo crecimiento a partir de ese punto. El gradiente negativo indica la dirección de máxima disminución g(x) ' = Curvas de nivel de J(x) ∂J ∂x Algoritmo del descenso mas pronunciado (Steepest descent) Algoritmo del descenso mas pronunciado con funciones cuadráticas ∂J(x k ) '= ∂x = x k − σk g(x k ) x k +1 = x k − σk xk+1 J ( x ) = a + b' x + σk Curvas de nivel de J(x) Tienen especial interés porque una función cualquiera continuamente diferenciable, puede aproximarse por una función cuadrática en las proximidades del óptimo: ∂J J(x) = J(x ) + ∂x ∂ 2 J(x) 1 (x − x ) + (x − x * ) ' (x − x * ) + .... 2 ∂x 2 x* x* * 1 J(x) = a + b ' x + x 'Cx 2 C= ¿Converge al óptimo cuando k→∞ ? Velocidad de convergencia Algoritmo del descenso mas pronunciado con funciones cuadráticas Funciones cuadráticas * ∂ 2 J(x) ∂x 2 x* La región x’Cx ≤ 1 es convexa si C es PSD También son las funciones mas sencillas de modo que, si un método no va bien con una de ellas, probablemente no ira bien con otra función mas compleja Algoritmo del descenso mas pronunciado con funciones cuadráticas 1 J(x k − σk g(x k )) = J(x k ) − σk g(x k ) + σ2k g(x k )' Cg(x k ) 2 ∂J(x k − σk g(x k )) =0 min J(x k − σk g(x k )) ⇒ σk ∂σk σ* 1 x ' Cx g ( x ) = b + Cx 2 J ( x k − σ k g ( x k )) = a + b ' ( x k − σ k g ( x k )) + J(x ) = a + b' x + 1 + ( x k − σ k g ( x k ))' C ( x k − σ k g ( x k )) = 2 1 b' = J ( x k ) − 2 σ k g ( x k ) + [ − x k ' σ k Cg ( x k ) − σ k g ( x k )' Cx k + 2 2 1 ( b + Cx k )' σ k g ( x k ) − 1 + σ 2k g ( x k )' Cg ( x k )] = J ( x k ) − = 2 − σ k g ( x k )' ( b + Cx k ) + σ 2k g ( x k )' Cg ( x k ) 2 1 2 = J ( x k ) − σ k g ( x k ) + σ 2k g ( x k )' Cg ( x k ) 2 Ejemplo x2 2 0,9 0,8 0,7 0,6 0,5 0,4 0,3 0,2 0,1 0 J ( x1 , x 2 ) = x12 + x 22 − x1x 2 + 2 0 0,1 0,2 k 2 g(x k )' Cg(x k ) x k +1 = x k − 0,5 2,5 g( x k ) 2 2 g(x k )' Cg(x k ) g( x k ) J(x) σ = 2 0,4 3 * k g(x k ) 0,3 x1 − g(x k ) + σ g(x k )' Cg(x k ) = 0 * k Las funciones cuadráticas son adecuadas para evaluar el algoritmo: muchas funciones pueden aproximarse adecuadamente por ellas cerca del óptimo y tienen solución conocida x k +1 = x k − σ k g ( x k ) min J ( x − σ g ( x )) k k k σ k parar si g(x k ) ≤ ε Avanzar todo lo que sea posible en la dirección de máximo descenso. En cada paso se hace una optimización escalar sobre σk C, simétrica positiva definida g ( x) = b + Cx min J(x k − σk g(x k )) xk 1 x' Cx 2 1,5 1 0,5 0 0 2 4 k 6 8 2 x − x 2 2 − 1 g( x) = 1 C= − 1 2 2 x 2 − x1 0.8 x0 = x k +1 = x k − σ k g( x k ) 0.3 Excel Función de Rosenbrock (banana) J ( x ) = 100( x 2 − x12 ) 2 + (1 − x1 ) 2 Algoritmo del descenso mas pronunciado con funciones cuadráticas ¿Convergencia? Se alcanza el óptimo exactamente cuando g(x)=0 Con funciones cuadráticas, si no se alcanza el óptimo en la primera iteración, no se alcanza nunca xk+1 = xk − σkg(xk ) g(x) = b + Cx g(xk+1) = b + Cxk+1 = b + Cxk − Cσkg(xk ) = = g(xk ) − σkCg(xk ) Supongamos que g(x0)≠ 0, vector propio de C. Algoritmo del descenso mas pronunciado con funciones cuadráticas g ( x k +1 ) = g ( x k ) − σ*k Cg ( x k ) Si g(x0) es vector propio de C: g ( x1 ) = g ( x 0 ) − σ Cg ( x 0 ) = g ( x 0 ) − σ λg ( x 0 ) = * k = g( x 0 ) − Algoritmo del descenso mas pronunciado con funciones cuadráticas En general si g(x0) no es vector propio de C: Cg ( x 0 ) = αg ( x 0 ) + z Cg ( x 0 ) = λg ( x 0 ) * k g( x 0 ) Puede ocurrir que g(x0) sea o no sea z ≠ 0 α ≠ 0 z ⊥ g( x 0 ) g ( x 1 ) = g( x 0 ) − σ Cg ( x 0 ) = g ( x 0 ) − σ1* (αg ( x 0 ) + z) = * k 2 2 g ( x 0 )' λg ( x 0 ) λg ( x 0 ) = 0 Y el optimo se alcanza en una iteración = g( x 0 ) − g( x 0 ) ( αg ( x 0 ) + z ) = g ( x 0 )' (αg ( x 0 ) + z) = g( x 0 ) − 1 z (αg ( x 0 ) + z ) = − ≠ 0 α α Y el optimo no se alcanza en la siguiente iteración Algoritmo del descenso mas pronunciado con funciones cuadráticas y además g(x1) no es vector propio de C: En efecto, si se cumpliera: z z Cg ( x 1 ) = λg ( x 1 ) ⇒ C(− ) = λ(− ) ⇒ Cz = λz ⇒ z' C = λz' α α z' Cg ( x 0 ) = λz' g ( x 0 ) = 0 (*) pero z' Cg ( x 0 ) = z' (αg( x 0 ) + z) = z ≠ 0 2 Lo que es contradictorio con la expresión (*), quedando probado por inducción. En general el algoritmo del descenso mas pronunciado no alcanzará el óptimo exactamente cuando k→∞ Algoritmos tipo Newton Se diseña para una función cuadrática y se aplica a una función cualquiera Supongamos que J(x) es cuadrática. ¿Cómo escogeríamos ∆x para alcanzar el óptimo en un paso? 1 J ( x ) = a + b' x + x ' Cx 2 x k +1 = x k + ∆x k g ( x ) = b + Cx H = C C es el hessiano o matriz de segundas derivadas de J g ( x k + ∆x k ) = b + C( x k + ∆x k ) = g ( x k ) + C∆x k g ( x k + ∆x k ) = 0 ⇒ g ( x k ) + C∆x k = 0 ∆x k = −C −1g ( x k ) x k +1 = x k − C −1g ( x k ) Algoritmo de Newton-Raphson Por analogía, para una función cualquiera J(x) diferenciable dos veces, podemos usar el algoritmo: −1 ∂ J(x k ) −1 s k = − g( x k ) = −H( x k ) g( x k ) 2 ∂x Método de segundo orden min J ( x k − σ k H( x k ) −1 g ( x k )) 2 σk x k +1 = x k + σ k s k sk dirección de busqueda en el paso k A medida que la función se acerque al óptimo se asemejará mas a una cuadrática y el algoritmo convergerá rápidamente al óptimo Ejemplo J ( x1 , x 2 ) = x12 + x 22 − x1x 2 + 2 2 x − x 2 2 − 1 g ( x) = 1 C= − 1 2 2 x 2 − x1 0.8 x0 = 0.3 Al ser cuadrática: x k +1 = x k − Cg ( x k ) −1 0.8 2 − 1 1.3 0.8 0.8 0 x1 = − = − = 0.3 − 1 2 − 0.2 0.3 0.3 0 0 g (x1 ) = 0 Excel s k = −H( x k ) −1 g ( x k ) min J ( x k − σ k H( x k ) −1 g ( x k )) Ventajas / Inconvenientes del método de Newton-Raphson Convergencia Ventajas: En una aproximación de primer orden: Normalmente requiere menos iteraciones σk x k +1 = x k + σ k s k Si el hessiano no es PD no hay garantía de que J(x) vaya disminuyendo en cada iteración ∂J(x k ) ∆x k = ∂x = J(x k ) + g(x k ) ' σk s k = J(x k +1 ) ≈ J(x k ) + Inconvenientes: Requiere conocer el gradiente y el hessiano Requiere invertir el hessiano No hay garantía de que el hessiano sea PD y el algoritmo converja El gradiente y el hessiano pueden aproximarse por diferencias finitas ∂ J( x k ) s k = −g ( x k ) 2 ∂x −1 ∂ 2 J(x k ) = J(x k ) − σk g(x k ) ' g(x k ) 2 ∂x Solo si J(x) es convexa hay garantía de que H es PD -g(xk) 2 La inversión del hessiano puede cambiarse por la resolución de un sistema de ecuaciones lineales en sk: Algoritmo de Marquardt-Levenberg Modifica el Hessiano para asegurar que sea PD en cada paso x k +1 = x k + σ k s k −1 ∂ 2 J( x k ) sk = − + β k I g ( x k ) βk ≥ 0 2 ∂x ∂ 2 J(x k ) escoger β k para que + β k I sea PD 2 ∂x −1 ∂ 2 J(x k ) min J ( x k − σ k + β k I g ( x k )) 2 σk ∂x Comprobación: sk es una dirección de descenso si: − g ( x k )' s k > 0 Algoritmo de Marquardt-Levenberg escoger x 0 , β0 ∂ 2 J(x k ) + β k I s k = −g ( x k ) 2 ∂x si − g( x k )' s k ≤ 0 ⇒ β k = 2β k recalcular s k resolver en s k −1 ∂ 2 J( x k ) min J ( x k − σ k + β k I g ( x k )) 2 σk ∂x x k +1 = x k + σ k s k sk Minimización respecto a σk Métodos quasi-Newton Tratan de evitar el cálculo de la inversa del hessiano, sustituyéndolo por una matriz Ĥk positiva definida que se actualiza en cada paso y debe aproximarse a H(xk)-1 Pueden aplicarse los métodos de optimización monovariable A veces se prefiere usar un procedimiento mas simple con la condición de que J(x´k) decrezca. El menor valor de σk es 0 y el método de Newton puro es con σk =1 Puede evaluarse J para σk 0 y 1, si no decrece: Puede hacerse una interpolación cuadrática conocidos J(xk+sk) J(xk) y g(xk)’sk y calcular su mínimo como estimación de σk J(xk+sk) 1 σˆ k = Si la función J(x) fuera cuadrática, despues de n pasos, se debe verificar que Hn = C-1 pues verifican las mismas ecuaciones. Por tanto, un algoritmo basado en Ĥ alcanzaría el mínimo en n pasos Se La idea se aplica por extensión a una J(x) cualquiera Algoritmo DFP (Davidon, Fletcher, Powell) En particular para: ~ β = H k ∆g ( x k ) ~ ∆x k α' H ∆g( x k )β' − k Tk = β' ∆g( x k ) α' ∆g( x k ) ~ ~ H ∆g ( x k )(H k ∆g ( x k ))' ∆x k ∆x k ' − k Tk = ~ ∆x k ' ∆g ( x k ) ∆g ( x k )' H k ∆g( x k ) α = ∆x k σk −g(x k ) 's k 2[J(x k + s k ) − J(x k ) − g(x k )s k ] Si se encuentra una relación Hk+1 = Hk + Tk que verifique ∆xk = Hk+1∆g(xk) durante n pasos, y la función es cuadrática, entonces Hn = C-1 k = 0,1,2,...n − 1 Dirección de búsqueda Tk matriz de corrección Si J(x) fuese cuadrática, para cualquier ∆xk se verifica: J(xk) - σkg(xk)’sk Métodos quasi-Newton ∆x k = C −1∆g( x k ) ~ ∆x k = H k +1∆g( x k ) ~ s k = −H k g( x k ) ~ ~ H k +1 = H k + Tk J(xk+σksk) Si queremos que Hk+1 se aproxime a C-1 : ∆g( x k ) = g ( x k +1 ) − g ( x k ) = C∆x k ~ ∆x k = C −1∆g ( x k ) ⇒ ∆x k = H k +1∆g ( x k ) ~ (H k + Tk )∆g ( x k ) = ∆x k Métodos quasi-Newton Hay muchas expresiones para Tk que pueden cumplir la relación ~ (H k + Tk )∆g( x k ) = ∆x k p.e. : ∀α, β ∈ R n , ≠ 0 ~ H ∆g ( x k )β' ∆x k α' Tk = − k β' ∆g ( x k ) α' ∆g ( x k ) ∆x k α' ~ ~ (H k + Tk )∆g( x k ) = H k ∆g ( x k ) + ∆g ( x k ) − α' ∆g ( x k ) ~ H k ∆g ( x k )β' ~ ~ ∆g ( x k ) = H k ∆g ( x k ) + ∆x k − H k ∆g ( x k ) = ∆x k − β' ∆g ( x k ) Algoritmo DFP (Davidon, Fletcher, Powell) ~ H 0 PD, simetrica ~ min J ( x k − σ k H k g ( x k )) escoger x 0 σk ~ x k +1 = x k − σ k H k g( x k ) ∆x k = x k +1 − x k ∆g ( x k ) = g ( x k +1 ) − g ( x k ) ~ ~ H ∆g ( x k )(H k ∆g ( x k ))' ∆x k ∆x k ' ~ ~ − k H k +1 = H k + ~ ∆x k ' ∆g ( x k ) ∆g ( x k )' H k ∆g( x k ) Algoritmo BFGS (Broyden, Fletcher, Goldfarb, Shanno) 1970 Algoritmo BFGS (Broyden, Fletcher, Goldfarb, Shanno) 1970 C ∆x k = ∆g ( x k ) ~ escoger x 0 , H 0 ~ s k = −H k g( x k ) Estima recursivamente el Hessiano en lugar de su inversa B k +1∆x k = ∆g ( x k ) ~ ∆x k = H k +1∆g ( x k ) ∆x y ∆g juegan papeles simetricos al caso DFP intercambi ar ∆x k con ∆g ( x k ) en la formula de Tk B k +1 = B k + ~ H k +1 = B k−1+1 ∆g ( x k ) ∆g ( x k )' B k ∆x k ∆x k ' B k − ∆x k ' ∆g ( x k ) ∆x k ' B k ∆x k Bk siempre es PD si J(x) es convexa puede estimarse mediante (A + zv' ) -1 = A −1 − −1 −1 A zv' A 1 + v' A −1z Si Bk es PD y ∆xk’∆g(xk) > 0 entonces Bk+1 es PD, si no se cumple no se actualiza Bk Métodos multivariables basados solo en valores de J(x) (Direct search) Los métodos basados en el gradiente son eficaces con funciones “suaves” y pueden funcionar adecuadamente con muchas variables No obstante, en muchos casos prácticos, la evaluación analítica del gradiente puede ser complicada o imposible en algunos puntos debido a discontinuidades, fuertes no linealidades, etc. En algunos casos, una solución es utilizar estimaciones del gradiente basadas en cocientes de incrementos Otra posibilidad es utilizar algoritmos que no estén basados en el cálculo del gradiente, p.e.: – Método del simplex – Método de las direcciones conjugadas de Powell PD, simétrica En general es mas eficiente que DFP min J ( x k + σ k s k ) σk x k +1 = x k + σ k s k ∆x k = x k +1 − x k ∆g( x k ) = g( x k +1 ) − g( x k ) ∆x k ∆g( x k )' ~ ∆x k ∆g( x k )' ∆x k ∆x k ' ~ H k +1 = I − H k I − + ∆x k ' ∆g ( x k ) ∆x k ' ∆g ( x k ) ∆x k ' ∆g( x k ) Método de la búsqueda Simplex Los métodos de búsqueda directa basados en patrones evalúan la función a minimizar J(x) en una serie de puntos mas o menos regularmente y se usan estos valores para evolucionar hacia un nuevo patrón de puntos mas cercano al óptimo La figura geométrica mas sencilla en un espacio de n dimensiones se denomina un Simplex y tiene n+1 vértices, así por ejemplo en R2 es un triangulo, en R3 un tetraedro, etc. El método de la búsqueda Simplex usa puntos situados en los n+1 vértices de esta figura geométrica para generar otro simplex más próximo al óptimo y continua iterando hasta alcanzarlo con la precisión deseada. No tiene nada que ver, excepto el nombre, con el método Simplex de LP Método de la búsqueda Simplex 1 Se evalua la función en los n+1 vértices del simplex 2 Se escoge el peor vértice y se proyecta una cierta distancia a traves del centroide de los otros vértices 3 Se forma así un nuevo simplex con el vértice proyectado y el resto de los vértices vértice centroide 4 Si se mejora se sigue iterando hasta la tolerancia requerida Método de la búsqueda Simplex A medida que se progresa en las iteraciones es posible que o se alcanza el óptimo o se generen ciclos entre dos o mas simplex. Para evitar estas situaciones cíclicas se pueden aplicar tres reglas: 1 Si el vértice peor se generó en la anterior iteración entonces escoger el vértice con el siguiente valor mayor 2 Si un vértice no cambia durante mas de M iteraciones, reducir el tamaño del simplex por algun factor tomando como base el punto con menor valor. Sugerencia: M = int (1.65n + 0.05n2) 3 La búsqueda se termina cuando el simplex es suficientemente pequeño o la desviación estándar de los valores de J(x) en los vértices es suficientemente pequeña Jm valor inferior del simplex Generación de puntos Método de Nelder - Mead Partiendo del punto base x(0) y un factor de escala α las coordenadas de los otros vertices x(i) , i= 1,...,n de un simplex regular inicial pueden calcularse mediante: x (j i ) x ( j) new = 2x c − x ( j) old Método de Nelder- Mead Ventajas: – – – Cálculos sencillos con evaluaciones de la función únicamente y poco almacenamiento Pocos parámetros ajustables Robusto frente a errores y ruidos en la evaluación de la función al utilizar el peor valor Inconvenientes: – – Se necesita un escalado de las variables Es lento al no utilizar información de iteraciones pasadas ni estructural Direcciones C conjugadas Si una matriz S diagonaliza a C, de modo que S’CS = D diagonal, entonces en las coordenadas z = S-1x : z x JM < J(xr) < J(xold) θ = 0.5 Jm < J(xr)< JM JM < J(xr) ≥ J(xold) θ = - 0.5 J(xr)< Jm θ=2 θ=1 1 n x c = ∑ x (i) n i =0 x ( j) new =x ( j) old + (1 + θ)( x c − x ) ( j) old −1 ≤ θ < 1 i≠ j i≠ j xold xr Si x(j) es el vértice que debe reflejarse, el centroide de los otros puntos xc y el nuevo punto reflejado se encuentra en: 1 n x c = ∑ x (i) n i =0 En lugar de mantener un simplex regular, expande o contrae el simplex en la dirección de avance de acuerdo a una serie de reglas Reflexión normal ( 0 ) n + 1 + n − 1 x j + α si j = i n 2 = x (j 0 ) + n + 1 − 1 α si j ≠ i n 2 JM segundo valor superior del simplex 1 x' Cx = 2 1 1 = a + b' Sz + z ' S ' CSz = a + b' Sz + z ' Dz 2 2 J ( x ) = a + b' x + Como no hay términos cruzados en z , la minimización de J(Sz) puede resolverse como n problemas de minimización respecto a cada componente zj de z z 3 0 z1 2 2 J ( x ) = J (Sz ) = 3 + [2 1] 1 + [z1 z 2 ] = 3 + 2 z1 + z 2 + 3z1 + 2 z 2 = 0 2 z 2 z2 = (3 + 2 z1 + 3z12 ) + (z 2 + 2 z 22 ) = J1 ( z1 ) + J 2 ( z 2 ) Método de las direcciones conjugadas de Powell Al igual que otros métodos, se diseña pensando en una función cuadrática y se aplica a una función cualquiera 1 J ( x ) = a + b' x + x ' Cx 2 Trata de encontrar el mínimo de J(x) sin usar los valores del gradiente o el hessiano La idea básica es buscar el mínimo a lo largo de unas direcciones tales que en cada una la función solo dependa de una componente del vector x facilitando así la búsqueda Estas direcciones se denominan C conjugadas Direcciones C conjugadas z1 z x = Sz = [s1 M s 2 M ... s n M] 2 = z1s1 + z2s 2 + ... + z n s n M z n Minimizar respecto a cada componente zj de z equivale a minimizar a lo largo de cada una de las n direcciones sj a las que se denominan direcciones C conjugadas x2 Los nuevos ejes coinciden z2 con las direcciones z1 principales de la función s2 Así en n iteraciones s1 llegaríamos al óptimo de una función cuadrática x1 Direcciones C conjugadas La condición S’CS = D diagonal equivale a: Propiedad de los subespacios paralelos Dada una función J(x) cuadrática y una dirección d, ∀ x1 ≠ x2 ∈Rn se verifica que si v1 es la solución de s1 ' a 11 0 ... 0 s ' 0 a ... 0 2 22 C[s1 | s 2 | ... | s n ] = 0 ... 0 M 0 s ' 0 ... 0 a n nn min J ( x1 + σd ) σ min J ( x 2 + σd ) y si v2 es la solución de σ Entonces la dirección v2 – v1 es C-conjugada a d s i ' Cs j = 0 i ≠ j x1 d Definición: dada C (n x n) simétrica, las direcciones s1, s2, ...sr r ≤ n son C-conjugadas si son linealmente independientes y verifican x2 s i ' Cs j = 0 i ≠ j Propiedad de los subespacios paralelos Demostración g( x ) = b + Cx J ( x ) = a + b' x + 1 x ' Cx 2 J ( w ) = J ( x + σd ) en el óptimo : ∂J ∂J ∂w = (b'+ w' C )d = 0 = ∂σ ∂w ∂σ (b'+ v 2 ' C )d = 0 (v '− v ' )Cd = 0 (b'+ v1 ' C)d = 0 2 1 2. 3. 4. 5. 6. 7. Escoger x0 y n direcciones linealmente independientes, p.e. si = ei Formar el conjunto de n+1 direcciones de búsqueda sn, s1, s2, s3, ...,sn Minimizar J(x) a lo largo de las n+1 direcciones de búsqueda sucesivamente. Sea vj el optimo en la iteración j Calcular una nueva dirección de búsqueda como sn+1= vn+1 – v1 que será conjugada a sn (y a las anteriores que se hayan generado) Usar como nuevo conjunto de n+1 direcciones de búsqueda sn+1, s2, s3, ...,sn ,sn+1 donde s1 se ha eliminado y se ha introducido sn+1= vn+1 – v1 Comprobar las condiciones de optimo y de indep. lineal de las n si diferentes Volver a 3 v2 Para generar dos direcciones conjugadas se han usado 2 puntos de partida y dos minimizaciones en una dirección d. Puede obtenerse el mismo resultado con un punto de partida y mas minimizaciones: En la figura, minimizando sucesivamente a lo largo de las direcciones de los n ejes de x, la minimización en la iteración n+1 es paralela a la 1, con lo cual el vector xn+1 – x1 es Cconjugado al del primer eje. Minimizando en esa dirección y aplicando el procedimiento sucesivamente puede hacerse la minimización a lo largo de n direcciones C-conjugadas y, por tanto, llegar al óptimo. Puede extenderse a n direcciones: Si partiendo de x1 y x2 se obtienen v1 y v2 a través de m < n búsquedas a lo largo de las m direcciones conjugadas s1, s2,...,sm entonces v2 – v1 es C-conjugado con todas las direcciones s1, s2,...,sm 1. v2-v1 d Método de las direcciones conjugadas de Powell Luego la dirección v2 – v1 es C conjugada a d Método de las direcciones conjugadas de Powell v1 x2 x0 x3 x1 Método de las direcciones conjugadas de Powell Si la función es cuadrática, después de n bucles, las n+1 búsquedas se hacen sobre direcciones conjugadas y se alcanzará el optimo • Si no lo es, se puede probar que converge de forma superlineal a un óptimo • Es un método eficiente y fiable Ajuste de datos por mínimos cuadrados y Ajuste de datos Encontrar la recta que mejor se ajusta a un conjunto de N parejas de datos (xi, yi). Puede plantearse como un problema de optimización: Buscar los parámetros de la recta (m , b) que minimiza la suma de los cuadrados de las desviaciones entre los datos y el valor de la recta y = mx+b (xi, yi) x La idea se puede extender al ajuste del conjunto de las N parejas de datos (xi , yi) por una función cualquiera y= f(x,p) que contiene un conjunto de parámetros a estimar p y y = f(x,p) (xi, yi) N min ∑ ( y i − f ( x i , p)) 2 x p N min ∑ ( y i − (mx i + b)) 2 m,b i =1 ∂ ∑ ( y i − (mx i + b)) i =1 ∂m Tiene solución analítica El problema se plantea como la minimización de la suma de los cuadrados de los residuos yi – f(xi,p) respecto a los parametros p de la función N N 2 =0 ∂ ∑ ( y i − (mx i + b)) i =1 ∂b 2 =0 Ecuación de Redlich-Kwong Relación empírica entre la P= Presión P Temperatura T Volumen molar v Resolución de ecuaciones RT a − v − b v( v + b) T En muchos problemas aparece la necesidad de resolver ecuaciones del tipo f(x) = 0 O sistemas de ecuaciones del tipo: a y b son coeficientes que deben ajustarse a datos experimentales volumen molar X1 Ejemplo, datos de CO2 Excel Temperatura X2 Presión Y 500 273 33 500 323 43 600 373 45 700 273 26 600 323 37 700 373 39 400 272 38 400 373 63,6 Newton Secante Bisección Pero también pueden resolverse como problemas de optimización Método de Newton Newton-Raphson f (x) = 0 F( x ) = 0 ∂f ( x i +1 − x i ) + ... = 0 f ( x i +1 ) = f ( x i ) + ∂x x i F( x i+1 ) = F( x i ) + f (x i ) f ' (x i ) f ( x , y) = 0 g( x , y) = 0 Existen métodos para resolverlas tales como: de un gas real x i +1 = x i − i =1 f(x) ∂F ( x i+1 − x i ) + ... = 0 ∂x x i −1 ∂F x i+1 = x i − F( x i ) ∂x x i x xk+1 xk Exige estimar e invertir el Jacobiano en cada iteración Método de la secante xi +1 = Problema de valores iniciales F(x) xi −1 f ( xi ) − xi f ( xi ) F(x)=0 f ( xi ) − f ( xi −1 ) f(x) f(x) f(xi) f(xi) x f(xi-1) xi-1 x xi+1 xi-1 xi+1 xi x xi f(xi-1) Resolución por optimización El problema puede formularse como: min ε12 + ε 22 x,y f ( x , y ) = ε1 g( x , y) = ε 2 f ( x , y) = 0 g( x , y) = 0 El mínimo de ε12 + ε22 , si existe, esta en (0,0), con lo que x e y verifican el sistema de ecuaciones Resolución numérica de problemas de optimización Una vez que se ha formulado un problema de optimización, suele ser conveniente ponerlo en forma tal que se facilite su resolución numérica y se aumente la eficiencia de la búsqueda de esa solución. Entre las modificaciones posibles están: El escalado de las variables independientes Las transformaciones para evitar cálculos fuera de rango log(x), x½, … Las transformaciones para evitar no diferenciabilidades Las transformaciones para mejorar la convexidad del problema Además es importante un ajuste adecuado de las precisiones, tolerancias, nº de pasos, etc. del algoritmo de optimización Escalado Convexificación El escalado se refiere a los valores relativos de las variables del problema, los cuales no deberían ser muy diferentes para evitar problemas numéricos ocasionados por sensibilidades distintas en distintas direcciones. Ejemplo: x1 toma valores en torno a 100 y x2 en torno a 0.1 J ( x1 ,x 2 ) = 10 x1 + 5 x 2 − x1 x 2 J( x1 , x 2 ) = x1x 2 x 1 = e v1 Función no convexa en x x 2 = e v2 x1x 2 = e e v1 v2 =e min J ( x 1 , x 2 ) = min J ( v1 , v 2 ) x1 , x 2 v1 , v 2 Pueden ser reformulado en términos de las variables u1, u2 escaladas x x x x J (u 1 , u 2 ) = 1000 1 + 0.5 2 − 10 1 2 = 1000u 1 + 0.5u 2 − 10u 1u 2 100 0.1 0.1 100 x1 x2 Ahora u1 y u2 toman valores en torno a 1 u1 = u2 = 100 0 .1 Cambio de variable v1 + v 2 Problema de rango! Función convexa en v