Guı́a para el Ejemplo 1 de otimización con restricciones de igualdad Programación Matemática Licenciatura en Ciencias y Técnicas Estadı́sticas Trabajaremos resolviendo el siguiente problema de optimización no lineal con restricciones de igualdad. 2x1 + log(x2 ) mı́n 2−x 1 2 s.a.: x1 + x22 = 1 El hessiano es: L(x, λ) = 2x1 + log(x2 ) + λ(x21 + x22 − 1) 2 − x1 Calcula su gradiente y su hesiano: • Gradiente del lagrangiano ∇L(x, λ) = ... ... • Hesiano del lagrangiano 2 ... ... H = ∇ L(x, λ) = ... ... La restricción es c(x) = x21 + x22 = 1. El gradiente de la restricción vale: A = ∇c(x) = ( La función objetivo es f (x) = 2x1 2−x1 ... , ... ) + log(x2 ). Calcula su gradiente: g = ∇f (x) = ... ... Ahora vamos a realizar una función que, dado un punto x y un valor λ, nos calcule f, c, g, H y A. La llamaremos ej igualdad1 y la guardaremos en un fichero ej igualdad1.m . 1. Método de Newton. α = 1 Ahora vamos a aplicar el método de Newton para un problema con restricciones de igualdad. Para simplificar, tomaremos como longitud de paso el valor α = 1. 1 1.1. PASO 0 Inicializamos los valores de x0 y λ0 : x0 = 1 1 λ0 = −1 %PASO 0: x = [1 1]’; lambda = -1; 1.2. PASO 1. Iteración 0 La solución actual, ¿es una buena solución? Tenemos que ver si son casi cero: c(x0 ) ∇f (x0 ) + ∇c(x0 )> λ0 Usamos la función que creamos antes: %PASO 1: [f,c,g,A,H] = ej_igualdad1(x,lambda); norm(c) norm(g+A’*lambda) Solución: f = 2, c = 1, g = (4, 1)> , A = (22) 6 0 H= quadkck = 1, kg + A0 ∗ lambdak = 2,2361 0 −3 NOTA: Fijaos que ∇L(x, λ) = ∇f (x) + ∇c(x)> λ = g + A> λ = (2, −1)> 1.3. PASO 2. Iteración 0 Resolver el sistema de ecuaciones: d ∇L(x, λ) H A> =− ∆λ c A 0 Es decir, 6 0 2 2 d 0 −3 2 = − −1 ∆λ 2 2 0 1 Para resolverlo, usamos el comando ’\’. Guardamos el resultado en la variable de Matlab sol. Las primeras componentes de sol corresponden a el vector de dirección d, mientras que las últimas corresponden al vector incremento de λ (en este caso de dimensión uno) ∆λ. %PASO 2: sol = [H A’; A zeros(size(A,1),size(A,1))] d=[sol(1); sol(2)] delta=sol(3) 2 \ ( - [g+A’*lambda; c] )} Las soluciones son: d= 1.4. −0,5 0,0 , ∆λ = 0,5 PASO 3. Iteración 0 En este caso, por simplicidad, tomaremos α = 1. En la sección siguiente vemos un ejemplo de cómo calcular un α adecuado. %PASO 3: %longitud de paso alpha=1 1.5. PASO 4. Iteración 0 Una vez tenemos las direcciones de mejora para x y para λ, es decir tenemos d y ∆λ, calculamos el nuevo punto x1 = x0 + αd, y volvemos al paso 1. %PASO 4: %nuevo punto x=x+alpha*d lambda=lambda+alpha*delta Solución: x0 = 1.6. 0,5 1 λ0 = −0,5 PASO 1. Iteración 1 Repetimos: %PASO 1: [f,c,g,A,H] = ej_igualdad1(x,lambda); norm(c) norm(g+A’*lambda) Solución: f = 0,6667, c = 0,2500, g = (1,7778, 1,0000)> , A = (12) 1,3704 0 H= quadkck = 0,25, kg + A0 ∗ lambdak = 1,2778 0 −2 1.7. PASO 2. Iteración 1 Ahora resolvemos el sistema: 1,3704 0 1 1,2778 d 0 −2 2 0 = − ∆λ 1 2 0 0,25 Repetimos: 3 %PASO 2: sol = [H A’; A zeros(size(A,1),size(A,1))] d=[sol(1); sol(2)] delta=sol(3) Solución: d= 1.8. −,3245 0,5372 \ ( - [g+A’*lambda; c] )} λ0 = 0,5372 PASO 3. Iteración 1 α=1 1.9. PASO 4. Iteración 1 Repetimos: %PASO 4: %nuevo punto x=x+alpha*d lambda=lambda+alpha*delta Solución: x0 = −0,8245 1,5372 λ0 = 0,0372 ............................... 2. EJERCICIO 1 Continúa y haz una iteración completa más. ¿Cuánto vale la función objetivo en ese punto? ¿Por qué crees que ocurre? ¿Cómo lo solucionarı́as? 3. Método de Newton. Cálculo de α Aquı́ vamos a ver más detenidamente cómo calcular una longitud de paso adecuada cuando estamos optimizando un problema con restricciones de igualdad. Para un problema sin restricciones, la idea era comparar el valor de la función objetivo en el punto actual, con el valor en el nuevo punto. Ahora no sólo la función objetivo es importante, también lo son las restricciones. ¿Cómo podemos medir el cumplimiento de las restricciones? Una buena medida es kc(x)k. (Recuerda que si tenemos varias restricciones, c(x) es un vector.) Idealmente, queremos que en el nuevo punto, tanto f como kc(x)k sean más pequeñas. A veces no es posible hacerlas decrecer a la vez, ası́ que se busca un compromiso entre ambas. A la función que valora el compromiso entre la mejora de f (x) y de kc(x)k se le llama función de mérito. Ejemplos: mE (x) = f (x) + ρkc(x)k mA (x) = f (x) + c(x)> λ + 12 ρkc(x)k2 4 Nosotros usaremos la primera, y tomaremos ρ = 0,1. Queremos que el valor de la función de mérito mE (x) en el nuevo punto xi + αd sea menor que en el punto anterior. Ası́ tenemos que comparar mE (xi + αdi ) y mE (xi ). Para ser más exigentes, a mE (xi ) le añadimos una cantidad proporcional a α y al producto escalar entre la dirección di y el gradiente de la función de mérito ∇mE (xi ). Tenemos que comprobar si: mE (xi + αdi ) < mE (xi ) + σα∇mE (xi )> di Como ∇mE (xi ) = ∇f (xi ) + ρ kc(x1 i )k ∇c(xi )> c(xi ), tenemos que comparar: mE (xi + αdi ) < mE (xi ) + σα(∇f (xi ) + ρ 1 ∇c(xi )> c(xi ))> di kc(xi )k En el ejemplo anterior. En la iteración 0, tenemos la solución d = (−0,5, 0,0)> y ∆λ = 0,5. Estamos en el punto xi = (1, 1)> y el nuevo punto es x1 = (0,5, 1)> con λ1 = −0,5. Fijaremos el valor de ρ = 0,1 y el valor de σ = 0,1. PASO 3.0 Inicializamos α = 1. PASO 3.2 Comparamos a y b, • a = mE (x1 ) = f (x1 ) + ρkc(x1 )| = 0,6667 + 0,1 × 0,25 = 0,6917 • b = mE (x0 ) + ∇mE (xi )t opd0 • Como mE (x0 ) = 2,1 y ∇mE (x0 ) = (4,2, 1,2)> , −0,5 = 1,89 • b = 2,1 + 0,1 ∗ 1 ∗ (4,2, 1,2) 0 %PASO 3: %longitud de paso alpha=1 rho=10 % funcion de penalizacion % m(x)=f(x) + 0.1 norm( c(x) ) [f,c,g,A,H] = ej_igualdad3(x+alpha*d,lambda+alpha*delta) a = f + rho * norm(c) [f,c,g,A,H] = ej_igualdad3(x,lambda) %derivada de m es g + rho * 1/norm(c) * A’ * c dm = g + rho * 1/norm(c) * A’ * c m = f + rho * norm(c) b = m + 0.1 * alpha * dm’*d % alpha=alpha/2 4. EJERCICIO 2 Repite los pasos de la Sección 1 introduciendo el cálculo de la longitud de paso. Empieza en el punto x0 = (0,51)> . ¿Ocurre algo raro? ¿Por qué crees que pasa esto? 5