본문 바로가기
AI 수학/최적화

프라이멀-듀얼 내부점 방법 (Primal-Dual Interior-Point Method)

by 깊은대학 2022. 4. 15.

제약조건이 있는 컨벡스(convex) 최적화 문제에 대해서

 

(1)minxf(x)subject to :   gi(x)0,  i=1,...,m                     Ax=b

 

KKT(Karush-Kuhn-Tucker) 수정식은 다음과 같다.

 

(2)xf(x)+i=1mμixgi(x)+ATλ=0(3)gi(x)0,  i=1,...,m(4)Ax=b(5)μi0,  i=1,...,m(6)μigi(x)=1t,  t>0,  i=1,...,m

 

여기서 t 는 KKT 식을 수정식으로 바꾸기 위한 파라미터이다.

 

 

장벽 내부점 방법(barrier interior-point method)에서는 식 (6)을 (2)에 대입하였다. 그러면 식 (3)과 (5)가 자동으로 만족되는 로그 장벽함수가 되었다.

반면에 프라이얼-듀얼 내부점 방법(primal-dual interior-point method)에서는 식 (2), (4), (6)을 뉴턴방법(Newton's method)을 이용하여 직접 푸는 방식을 택한다.

 

 

우선 다음과 같은 잔차(residual) 벡터 rt(x,μ,λ) 를 정의한다.

 

(7)rt(x,μ,λ)=[xf(x)+xTg(x)μ+ATλdiag(μ)g(x)1t1Axb]

 

여기서

 

g(x)=[g1(x)gm(x)],  μ=[μ1μm],  diag(μ)=[μ100μm]

 

이다. 그러면 잔차 벡터가 모두 0 일 때 식 (2), (4), (6)이 만족된다. 식 (7)의 첫번째 벡터 성분을 듀얼 잔차(dual residual) rdual, 두번째 벡터 성분을 중심성 잔차(centrality residual) rcent, 세번째 벡터 성분을 프라이멀 잔차(primal residual) rprim 라고 한다.

이제 rt(x,μ,λ)=0 을 뉴턴방법을 이용하여 풀어보자. 이 때 주의할 점은 뉴턴방법의 매 이터레이션 단계에서 g(x)<0, μ>0 이 만족되도록 해야 한다는 것이다.

여기서 잠시 표기를 간단하게 하기 위해서 y=[xμλ], Δy=[ΔxΔμΔλ], rt(y)=[rdual(y)rcent(y)rprim(y)] 로 쓴다. 그리고 rt(y+Δy) 를 1차 테일러 시리즈로 전개하면 다음과 같다.

 

(8)rt(y+Δy)rt(y)+yTrt(y)Δy

 

뉴턴방법에 의하면 r(y+Δy)=0 으로 만드는 Δy 값을 구해야 한다.

 

(9)yTrt(y)Δy=rt(y)

 

위 식을 다시 풀어 쓰면 다음과 같다.

 

(10)[x2f(x)+i=1mμix2gi(x)xTg(x)ATdiag(μ)xg(x)diag(g(x))0A00][ΔxΔμΔλ]          =[xf(x)+xTg(x)μ+ATλdiag(μ)g(x)1t1Axb]

 

프라이멀-듀얼 내부점 방법에서는 식 (10)을 사용하여 뉴턴스텝 Δx 와 중심성스텝 Δμ, 듀얼스텝 Δλ 를 잔차 벡터가 0 이 될 때까지 업데이트 한다.

그렇다면 특정 t 에서 구한 최적값 f(x(t)) 와 식 (1)의 최적값 p 의 차이는 어떻게 계산할 수 있을까. 이터레이션을 어딘가에서 멈추려면 이 값을 아는 것이 중요하다. 장벽방법에서는 이 값이 듀얼리티 갭(duality gap) mt 이었다. 하지만 장벽방법과는 다르게 프라이멀-듀얼 방법에서는 이터레이션 단계에서 x,μ,λ 값이 실현가능(feasible)하다는 보장이 없으므로 듀얼리티 갭을 계산하기가 쉽지 않다. 대신 아래 식으로 표현되는 대체(surrogate) 듀얼리티 갭을 사용한다.

 

(11)κ^(x,μ)=g(x)Tμ

 

여기서 xg(x)<0μ>0 의 조건을 만족해야 한다. 만약 Ax=b 이고 μi=1tgi(x) 이라면 식 (11)은 듀얼리티 갭 mt 과 일치한다. 이를 이용하면 대체 듀얼리티 갭 κ^ 가 듀얼리티 갭인 mt 과 일치하도록 파라미터 t 를 계산할 수 있다.

 

(12)t=mκ^

 

이처럼 t 를 계산하면 t 에 대한 이터레이션 루프가 필요 없어지고 뉴턴방법에 의한 이터레이션만 남게 된다. 프라이멀-듀얼 내부점 방법을 정리하면 다음과 같다.

 

 

     0. g(x)<0 인 시작값 xμ>0, 파라미터 종료조건 값 ϵ>0, ϵfeas>0, t 의 증가팩터 γ>1 을 설정한다.

     1. 다음을 반복한다.

         [1] t 를 계산한다.

                     tγt=γmκ^

         [2] Δy 를 계산한다.

         [3] 스텝사이즈 η 를 계산한다.

         [4] y 를 업데이트 한다.

                     yy+ηΔy

         [5] 다음 종료조건을 모두 만족하면 이터레이션을 중지한다.

                     rprim2ϵfeas,   rdual2ϵfeas,   κ^ϵ

프라이멀-듀얼 내부점 알고리즘에서 [1]은 파라미터 t 를 증가시키기 위한 것으로 장벽방법에서도 사용되는 업데이트 방식이다. 알고리즘 [5]의 종료조건은 프라이멀과 듀얼 잔차 벡터의 크기가 모두 0 에 근접하고 대체 듀얼리티 갭이 미리 설정한 값 이하로 작아질 때이다.

알고리즘 [3]의 스텝사이즈 계산은 g(x)<0μ>0 이 성립할 수 있도록 표준 백트래킹 라인서치(backtracking line search) 방법을 수정해서 사용한다. 먼저 μ+ηΔμ>0 이 되도록 크기가 1 이내인 범위에서 η 의 최대값을 구한다.

 

(13)ηmax=max{η[0,1] | μ+ηΔμ>0}

 

그런 후 η=0.99ηmax 에서부터 시작하여 g(x)<0 이 얻어질 때까지 β(0,1)η 에 곱한다. 그리고 나서 다음과 같은 표준 백트래킹 라인서치 방법을 사용한다.

     0. α(0.01,0.1), β(0,1) 을 설정한다.

     1. 다음을 반복한다.

         [1] r(x+ηΔx,μ+ηΔμ,λ+ηΔλ)2(1αη)r(x,μ,λ)2 이면 이터레이션을 종료한다.

         [2] ηβη

프라이멀-듀얼 내부점 방법의 장점은 이터레이션 루프가 1개라는 것이다. 뿐만 아니라 LP, QP, SOCP(second-order cone programming), SDP(semidefinite programming) 문제에서는 장벽방법의 성능을 훨씬 능가한다고 한다.

 

 

댓글