Algoritmos para Optimización con Resticciones
Penalización cuadrática, Lagrangiano Aumentado y el Direcciones Alternadas de los Multiplicadores de Lagrange (ADMM)
Mariano Rivera
septiembre 2018
Sea el problema de optimización con restricciones
(1)
xminf(x)s.a.Ax−b=0
Entonces el Lagrangiano esta dado por
L(x,λ)=f(x)−λ⊤(Ax−b)
y las KKTs serán
(KKTa)∇xL(x,λ)=0⇒∇f(x)−A⊤λ=0(KKTb)∇λL(x,λ)=0⇒Ax−b=0
Penalización Cuadrática
Una estrategia para resolver (1), es cambiar un la solución del problema de optimización con restricciones a la solución de una secuencia de problemas sin restricciones.
Los mas simple es cambiar la restricción por pona penalización, la cual se hace muy grande si se viola la factibilidad del punto actual.
Mediante método de penalización cuadrática (1) se transforma en
(2)
xminq(x;ρ(k))=f(x)+2ρ(k)∥Ax−b∥2
para k=1,2,…, y ρ(k) un parámetro que se incrementa conforme pasan las iteraciones k; lo representamos como ρ↑k.
La solución del problema (2) consiste en iterar:
- Resolver ∇xq(x;ρ(k))=0 para x con $ \rho^{(k)}$ fija y como condición inicial para x=x(k). Esto es
x(k+1)=xargminq(x;ρ(k))
- Actualizar ρ:
ρ(k+1)=ηρ(k)
con η>1, digamos η=1.1.
El propósito de no iniciar con un valor ρ alto (sino irlo incrementandolo gradualmente) es que para una ρ>>1, el gradiente de la penalización puede dominar y algoritmo de descenso puede tener convergencia temprana muy lejos del mínimo local.
En el óptimo se cimple que gradiente de la función de penalización esta dado por
(3)
∇xq(x∗;ρ∗)=∇f(x∗)+A⊤[ρ∗(Ax∗−b)]=0
como el óptimo de la función de penalización debe ser el mismo que el óptimo del problema con restricciones, mediante la igualación de términos de (3) con la primera KKT (KKTa) notamos que
(4)
λ∗≈ρ∗(Ax∗−b)
Desafortunadamente esta approximación es en general muy mala, la razón es que estamos multiplicando un termino muy grande (ρ∗) con uno muy pequeño ((Ax∗−b)). Si queremos estimar el multiplicador de Lagrange, es mejor resolver (KKTa) para λ con x∗ fija y calculada como la solución de la secuencia de penalización cuadrática.
Lagrangiano Aumentado
El método del lagrangiano Aumentado se propuso con la finalidad de solventar la deficiencia de la Penalización Cuadrática para estimar los multiplicadores de Lagrange. La motivación es estimar simultáneamente x y λ en el proceso iterativo. Para ello debemos pedir que la (KKTa) también se satisfaga. Esto se logra combinando los términos que involucran a las restricción en el Lagrangiano y en la Penalización Cuadrática. La nueva función que optimizaremos iterativamente es
(5)
xminLA(x;y(k),ρ(k))=f(x)+y(k)⊤(Ax−b)+2ρ(k)∥Ax−b∥2
donde hemos definido y(k)=−λk para simplificar el algebra.
Luego, resolvemos para x
(6)
∇xLA=∇xf(x)+A⊤y(k)+ρ(k)A⊤(Ax−b)=∇xf(x)+A⊤[y(k)+ρ(k)(Ax−b)]=0
Comparamos (6) con (KKTa) y notamos que para mantener la factibilidad dual, debemos elegir elegir y(k+1) tal que satisfaga (KKTa). Por ello hacemos y(k+1)=y(k)+ρ(k)(Ax−b).
En resumen, debemos iterar hasta convergencia:
-
Asignar a x(k+1) la solución (aproximada) para x de
∇xf(x)+A⊤[y(k)+ρ(k)(Ax−b)]=0
-
Actualizar la estimación del multiplicador de Lagrange con
y(k+1)=y(k)+ρ(k)(Ax(k+1)−b)
-
Actualizar (incrementar) ρ(k) y poner k=k+1
La forma aditiva del Lagrangiano Aumentado se obtiene de podemos añadir términos constantes en x al LA(k) sin mofdificar el óptimo x(k+1):
LA(x;u,ρ)=f(x)+2ρ[∥Ax−b∥2+2ρ1y⊤(Ax−b)+ρ21y⊤y]
Donde para simplicar la notación hemos quitado la indicación de la iteración para y y ρ. Luego podemos reescibir el lagrangiano aumentado como
(7)
LA(x;y,ρ(k))=f(x)+2ρ(k)∥Ax−b+u∥2
y hemos redefinido
(8)
u=defρ(k)y
Luego
(9)
∇xLA=∇xf(x)+ρkA⊤(Ax−b+u)=0
Para mantener la factibilida dual, elegimos y=ρ(k)(Ax−b+u) y sustituyendo y de (8) en (9), tenemos:
u=u+(Ax−b)
En este caso, el algoritmo consiste en iterar hasta convergencia
-
Asignar a x(k+1) la solución (aproximada) para x de
∇xf(x)+ρ(k)A⊤[Ax−b+u(k)]=0
-
Actualizar la estimación del multiplicador de Lagrange con
u(k+1)=u(k)+(Ax(k+1)−b)
-
Poner k=k+1
Método de los Multiplicadores de Lagrange con Direcciones Alternadas (ADMM)
Si bien, la actualización de la forma aditiva del Lagrangiano Aumentado es legeramente mas simple, no se pueded apreciar, por el momento, una ventaja mayor de esta forma.
Sin ambargo, esta forma nos ayudará a escribir un algoritmo mas simple para el método ADMM.
Considere ahora el problema con función objetivo separable de la forma
(10)
xminf(x)+g(x)s.a.Ax−b=0
Cuyo el Lagrangiano esta dado por
L(x,y)=f(x)+g(x)+y⊤(Ax−b)
y con KKTs
(KKTa2)∇xL(x,y)=0⇒∇xf(x)+∇xg(x)+A⊤y=0(KKTb2)∇λL(x,y)=0⇒Ax−b=0
(note que estamos usando y=−λ).
La solución a (10) consiste en encotrar los vectores x y y que satisfagan las KKTa2 y KKTb2.
Ahora, reescribimos el problema (1) en usaremos una nueva variable z que es equivalente.
(11)
xminf(x)+g(z)s.a.Ax−b=0x−z=0
Cuyo el Lagrangiano esta dado por
L(x,z,y)=f(x)+g(z)+y⊤(Ax−b)+γ(x−z)
y con KKTs
(KKTa3)∇xL(x,z,y)=0⇒∇xf(x)+A⊤y+γ=0(KKTb3)∇zL(x,z,y)=0⇒∇zg(z)−γ=0(KKTc3)∇yL(x,z,y)=0⇒Ax−b=0(KKTc4)∇γL(x,z,y)=0⇒x−z=0
Aparentemente no hemos hecho nada, puesto que x=z. Pero la estrategia para resolver el problemas es alternar minimizaciónes con respecto a x y z; pero usando Lagrangiano Aumentado.
Primero escribimos la formulación de Lagrangiano aumentado.
(12)
L(x,z,y)=f(x)+g(z)+2ρ(k)∥Ax−b+u∥2+2η(k)∥x−z+v∥2
Y calculamos los gradientes parciales:
De ∇xLA=0 tenemos
(13)
∇xf(x)+ρ(k)A⊤(Ax−b+u)+η(k)(x−z+v)=0
De ∇zLA=0 tenemos
(14)
∇zg(z)−η(k)(x−z+v)=0
Y las actualizaciones para u y v quedan:
u(k+1)=u(k)+(Ax−b)
y
v(k+1)=v(k)+(x−z)
Luego, el algorimto consiste en iterar hasta convergencia
-
Asignar a x(k+1) la solución (aproximada) para x de
∇xf(x)+ρ(k)A⊤(Ax−b+u(k))+η(k)(x−z(k)+v(k))=0
-
Asignar a z(k+1) la solución (aproximada) para z de
∇zg(z)−η(k)(x(k+1)−z+v(k))=0
-
Actualizar u y v:
u(k+1)=u(k)+(Ax(k+1)−b)v(k+1)=v(k)+(x(k+1)−z(k+1))
-
Poner k=k+1
(15)
xminf(x)+g(x)s.a.Ax+Bx−b=0
Se transforma a
(11)
xminf(x)+g(z)s.a.Ax+Bz−b=0x−z=0
con lagrangiano Aumentado
LA(x,z;u,v)=f(x)+2ρ∥Ax+Bz−b+u∥2+2η∥x−z+v)∥2
Se resuelve iterando
-
Asignar a x(k+1) la solución (aproximada) para x de
∇xLA(x,z(k);u(k),v(k))=0
-
Asignar a z(k+1) la solución (aproximada) para z de
∇zLA(x(k+1),z;u(k),v(k))=0
-
Actualizar u y v:
u(k+1)=u(k)+(Ax(k+1)+B(z+1)−b)v(k+1)=v(k)+(x(k+1)−z(k+1))
con ρ,η↑k