[ENAI601] 09 — Geometric Programming, 곱과 거듭제곱을 로그로 바꾸어 풀기

SERIES: ENAI601 Numerical Methods(11)

  1. [ENAI601] 01 — 벡터에서 정사영까지, 직교성이 계산을 바꾸는 이유
  2. [ENAI601] 02 — 행렬에서 PSD까지, 사라지는 방향과 복원하는 방법
  3. [ENAI601] 03 — Convex Set, 제약조건을 공간의 모양으로 읽기
  4. [ENAI601] 04 — Convex Function, 기울기의 변화에서 Hessian까지
  5. [ENAI601] 05 — Basic Optimization, 무엇을 어디에서 최소화할까?
  6. [ENAI601] 06 — Convex Optimization, Local에서 Global로 이어지는 이유
  7. [ENAI601] 07 — Linear Programming, 등고선과 꼭짓점에서 Chebyshev Center까지
  8. [ENAI601] 08 — Quadratic Programming, 곡률과 제약에서 최소제곱·거리 문제까지
  9. [ENAI601] 09 — Geometric Programming, 곱과 거듭제곱을 로그로 바꾸어 풀기
  10. [ENAI601] 10 — Lagrangian Duality Part 1: 하한에서 Dual Problem까지
  11. [ENAI601] 11 — Duality Part 2: Strong Duality에서 Complementary Slackness와 KKT까지
이 글의 목차

LP와 QP에서는 목적함수와 제약의 모양을 보고 볼록 문제인지 판단했다. 그런데 식에 곱, 나눗셈, 제곱근이 섞여 있으면 그대로는 볼록 문제처럼 보이지 않을 수 있다. 그때 식 자체를 포기하기 전에 변수를 다른 좌표로 표현하면 계산하기 쉬워지는가?를 물을 수 있다.

Geometric Programming(기하계획법, GP)는 양수 변수의 곱과 거듭제곱으로 된 특정 문제를 로그 변수로 바꾸어 볼록 문제로 푸는 방법이다. 이 글에서는 두 설계변수의 곱을 유지하면서 비용을 줄이는 작은 예제에서 시작한다. 함수의 종류를 구별하고, 로그 변환을 한 줄씩 적용한 뒤, 답을 원래 변수로 되돌리는 것까지 마친다.

Part A. 곱과 거듭제곱이 있는 문제 알아보기

1. 작은 문제: 곱은 16 이상, 비용은 작게

두 부품의 성능을 나타내는 양수 x1,x2x_1,x_2를 정한다고 하자. 결합 성능은 두 값의 곱이고, 비용은 각 성능의 제곱근을 더한 값이라는 모형을 생각한다.

minimize⁡x1,x2>0x1+x2subject tox1x2≥16.\begin{aligned} \operatorname{minimize}_{x_1,x_2>0}\quad&\sqrt{x_1}+\sqrt{x_2}\\ \text{subject to}\quad&x_1x_2\ge16. \end{aligned}

먼저 가능한 선택 몇 개의 비용을 계산해 보자.

선택 (x1,x2)(x_1,x_2)곱 x1x2x_1x_2비용 x1+x2\sqrt{x_1}+\sqrt{x_2}
(1,16)(1,16)161655
(4,4)(4,4)161644
(16,1)(16,1)161655

균형 있게 나눈 (4,4)(4,4)가 좋아 보인다. 하지만 세 후보만 비교해서는 모든 양수 중 최적이라고 결론 내릴 수 없다. 이 문제를 어떤 구조로 읽고 풀 것인지가 GP의 출발점이다.

목적함수에는 제곱근이 있고 제약에는 두 변수의 곱이 있다. LP나 QP의 표준형에 바로 들어맞지 않는다. 특히 제곱근은 오목함수이므로, 이 목적함수를 최소화하는 원래 형태는 볼록 최적화의 표준 조건을 만족하지 않는다. GP에서는 이런 곱과 거듭제곱을 로그로 바꿀 수 있는지 살펴본다.

2. Monomial: 양의 계수 하나와 거듭제곱들의 곱

GP의 monomial(단항함수)는 다음 모양이다.

m(x)=cx1a1x2a2⋯xnan,c>0,ai∈R,xi>0.m(x)=c x_1^{a_1}x_2^{a_2}\cdots x_n^{a_n}, \qquad c>0,\quad a_i\in\mathbb R,\quad x_i>0.

cc는 양의 계수, aia_i는 지수다. 지수는 양의 정수뿐 아니라 0, 음수, 소수 같은 모든 실수가 가능하다. 예를 들어 다음은 모두 monomial이다.

3x12x2−1,x1=x11/2,16x1x2=16x1−1x2−1.3x_1^2x_2^{-1},\qquad \sqrt{x_1}=x_1^{1/2},\qquad \frac{16}{x_1x_2}=16x_1^{-1}x_2^{-1}.

첫 식에서 x1=2x_1=2, x2=4x_2=4를 대입하면 3⋅4/4=33\cdot4/4=3이다. 나눗셈은 음의 지수로 쓸 수 있어도 함수의 종류가 달라지지 않는다. 양의 상수도 모든 지수가 0인 monomial이다.

학교에서 다항식을 배울 때의 “단항식”보다 지수의 범위가 넓다. 대신 계수와 변수는 반드시 양수다. −3x1-3x_1은 계수가 음수이므로 여기서의 monomial이 아니다.

R++n\mathbb R_{++}^n은 모든 성분이 엄격하게 양수인 벡터들의 집합이다. xi≥0x_i\ge0와 다르게 0도 포함하지 않는다. 이 정의역 덕분에 음의 지수와 실수 지수를 일관되게 쓰고, 뒤에서 로그도 취할 수 있다.

3. Posynomial: monomial들을 양의 계수로 더하기

Posynomial(포지노미얼)은 monomial을 유한 개 더한 함수다.

f(x)=∑k=1Kckx1a1k⋯xnank,ck>0.f(x)=\sum_{k=1}^{K}c_k x_1^{a_{1k}}\cdots x_n^{a_{nk}}, \qquad c_k>0.

KK는 더하는 항의 개수이고, kk는 그 항을 구별하는 번호다. 각 항마다 지수도 달라도 된다. 예를 들어

f(x)=2x1+3x2+x1x2f(x)=2\sqrt{x_1}+\frac3{x_2}+x_1x_2

는 세 항의 posynomial이다. x1=x2=1x_1=x_2=1이면 값은 2+3+1=62+3+1=6이다. 항이 하나인 monomial도 posynomial에 포함된다.

교안 발췌 · Module 6 — Geometric Program: Monomial / Posynomial

m(x)=cx1a1⋯xnan,c>0,ai∈R,m(x)=c x_1^{a_1}\cdots x_n^{a_n},\qquad c>0,\quad a_i\in\mathbb R, f(x)=∑k=1Kckx1a1k⋯xnank,ck>0,dom⁡f=R++n.f(x)=\sum_{k=1}^{K}c_kx_1^{a_{1k}}\cdots x_n^{a_{nk}},\qquad c_k>0, \qquad \operatorname{dom}f=\mathbb R_{++}^n.

핵심은 지수가 정수인지가 아니라 양의 계수인 곱의 항들을 더했는가다. 일반적인 polynomial(다항식)과 같은 말이 아니다. 양의 함수값을 가진다는 사실만으로 posynomial인 것도 아니다. 각 항의 계수 조건을 확인해야 한다.

식의 모양을 정리할 때 다음 규칙을 쓸 수 있다.

연산결과
monomial × monomial, monomial ÷ monomialmonomial
posynomial + posynomial, posynomial × posynomialposynomial
posynomial ÷ monomialposynomial
양수 상수 × posynomialposynomial
posynomial의 뺄셈 또는 posynomial로 나누기일반적으로 보장되지 않음

예를 들어 (x1+x2)/x1=1+x2/x1(x_1+x_2)/x_1=1+x_2/x_1은 posynomial이다. 반대로 1/(x1+x2)1/(x_1+x_2)는 분모가 합이므로 이 규칙으로 posynomial이라고 할 수 없다. 서로 다른 monomial의 합도 보통은 monomial이 아니지만, 2x1+3x1=5x12x_1+3x_1=5x_1처럼 같은 지수의 항은 합쳐질 수 있다. 엄격한 양의 계수 정의에서는 0을 곱해 얻은 영함수는 별도로 구별한다.

4. GP의 표준형: 왜 오른쪽이 0이 아니라 1일까?

GP의 posynomial form은 다음과 같다.

교안 발췌 · Module 6 — Geometric Program

minimize⁡xf0(x)subject tofi(x)≤1,i=1,…,m,hj(x)=1,j=1,…,p.\begin{aligned} \operatorname{minimize}_x\quad&f_0(x)\\ \text{subject to}\quad&f_i(x)\le1,\quad i=1,\ldots,m,\\ &h_j(x)=1,\quad j=1,\ldots,p. \end{aligned}

f0,…,fmf_0,\ldots,f_m are posynomials and h1,…,hph_1,\ldots,h_p are monomials.

D=R++n.D=\mathbb R_{++}^n.

목적함수와 부등식 왼쪽은 posynomial, 등식 왼쪽은 monomial이어야 한다. 등식에 posynomial을 마음대로 넣지 않는 이유는 로그를 취한 뒤 등식을 affine으로 만들어야 하기 때문이다.

첫 예제의 성능 제약은 양수인 곱으로 나누면 된다.

x1x2≥16⟺16x1x2≤1.x_1x_2\ge16 \quad\Longleftrightarrow\quad \frac{16}{x_1x_2}\le1.

목적함수 x1+x2\sqrt{x_1}+\sqrt{x_2}는 posynomial이고, 제약 왼쪽은 monomial이면서 posynomial이기도 하다. 모든 변수도 양수이므로 GP 표준형을 만족한다. 오른쪽 1은 로그를 취하면 0이 된다. 이것이 나중에 볼록 최적화의 표준 제약 형태로 돌아가는 연결점이다.

GP 표준형에 들어맞는다는 말과 원래 변수에서 이미 볼록하다는 말은 다르다. GP는 로그로 바꾼 뒤의 볼록성을 이용한다.

Part B. 로그 변환이 식을 바꾸는 과정

5. 먼저 변수만 바꾼다: 양수 x와 실수 y

로그가 곱을 덧셈으로 바꾸는 성질을 이용한다. 여기서 log⁡\log는 자연로그이며, ee를 밑으로 한다.

log⁡(ab)=log⁡a+log⁡b,log⁡(xr)=rlog⁡x(a,b,x>0).\log(ab)=\log a+\log b,\qquad \log(x^r)=r\log x\quad(a,b,x>0).

새 변수를 다음처럼 정의한다.

yi=log⁡xi⟺xi=eyi.\boxed{y_i=\log x_i\quad\Longleftrightarrow\quad x_i=e^{y_i}}.

yiy_i는 “ee를 몇 제곱해야 xix_i가 되는가”를 나타낸다. xi=1x_i=1이면 yi=0y_i=0이고, xi=4x_i=4이면 yi=log⁡4y_i=\log4다. 0<xi<10<x_i<1이면 yiy_i는 음수가 될 수 있다. 양수라는 제한은 x에 대한 것이며, y는 모든 실수를 움직일 수 있다.

이 변환은 양수 xix_i 하나마다 실수 yiy_i 하나를 정확히 대응시킨다. 따라서 변환한 문제를 푼 뒤 xi=eyix_i=e^{y_i}로 돌아갈 수 있다. 0이나 음수 xix_i는 이 대응에 포함되지 않는다.

6. Monomial에 변수를 대입하고 로그까지 취하면 affine이 된다

작은 함수 하나로 두 단계를 구별해 보자.

m(x)=3x12x2−1.m(x)=3x_1^2x_2^{-1}.

먼저 xi=eyix_i=e^{y_i}를 대입한다.

m(ey)=3e2y1−y2.m(e^y)=3e^{2y_1-y_2}.

여기서 eye^y는 각 성분에 지수를 취한 벡터다. 아직 함수는 지수함수다. 그 함수값에 로그를 취하는 단계까지 하면

log⁡m(ey)=log⁡3+2y1−y2\boxed{\log m(e^y)=\log3+2y_1-y_2}

가 되어 affine 함수가 된다. x=(2,4)x=(2,4)의 원래 함수값은 3이고, 변환된 식에 y=(log⁡2,log⁡4)y=(\log2,\log4)를 넣으면 log⁡3\log3이다. 변수뿐 아니라 함수값의 눈금도 달라졌다는 점에 주의한다.

제곱근 함수는 원래 변수에서는 오목하지만, 변수와 함수값에 로그를 취하면 직선이 된다.

그림은 더 간단한 m(x)=xm(x)=\sqrt{x}를 보여 준다. 오른쪽은 단순히 가로축 이름만 바꾼 그림이 아니다. x=eyx=e^y를 대입하고 함수값에도 로그를 취해 log⁡ey=y/2\log\sqrt{e^y}=y/2로 만든 것이다.

일반적인 monomial에도 같은 계산을 적용한다. a=(a1,…,an)Ta=(a_1,\ldots,a_n)^T, b=log⁡cb=\log c라고 쓰면

교안 발췌 · Module 6 — Geometric Program: Convex Form

yi=log⁡xi,xi=eyi,y_i=\log x_i,\qquad x_i=e^{y_i}, cx1a1⋯xnan⟶eaTy+b,b=log⁡c.cx_1^{a_1}\cdots x_n^{a_n} \quad\longrightarrow\quad e^{a^Ty+b},\qquad b=\log c.

따라서 로그까지 취한 결과는 aTy+ba^Ty+b다. 특히 monomial 등식 hj(x)=1h_j(x)=1은 로그 좌표에서 affine 등식이 된다.

7. Posynomial의 로그는 Log-Sum-Exp가 된다

합에는 곱에서 쓴 로그 규칙을 적용할 수 없다.

log⁡(a+b)≠log⁡a+log⁡bin general.\log(a+b)\ne\log a+\log b\quad\text{in general}.

예를 들어 a=b=1a=b=1이면 왼쪽은 log⁡2\log2이고 오른쪽은 0이다. 그래서 posynomial은 항들을 따로 로그로 바꾸어 더하는 것이 아니라, 지수함수들의 합 전체에 로그를 취한다.

f(x)=2x1+3x2−1⟹log⁡f(ey)=log⁡(2ey1/2+3e−y2).f(x)=2\sqrt{x_1}+3x_2^{-1} \quad\Longrightarrow\quad \log f(e^y)=\log\left(2e^{y_1/2}+3e^{-y_2}\right).

계수도 지수 안으로 넣으면 2=elog⁡22=e^{\log2}, 3=elog⁡33=e^{\log3}이므로 다음과 같다.

log⁡f(ey)=log⁡(ey1/2+log⁡2+e−y2+log⁡3).\log f(e^y) =\log\left(e^{y_1/2+\log2}+e^{-y_2+\log3}\right).

이 모양이 log-sum-exp다. 일반적으로 지수 안의 affine 식들을 akTy+bka_k^Ty+b_k라고 쓰면

F(y)=log⁡(∑k=1KeakTy+bk).\boxed{F(y)=\log\left(\sum_{k=1}^{K}e^{a_k^Ty+b_k}\right)}.

이 함수는 볼록하다. Convex Function 글에서 배운 볼록함수의 한 예가 실제 문제 변환에 쓰이는 지점이다. 로그는 오목함수이지만, 여기서는 지수함수의 합과 결합한 이 특정 모양 전체가 볼록하다. 아무 양수 함수에 로그를 취하면 볼록해진다는 규칙은 없다.

심화: Log-Sum-Exp의 볼록성을 확인하는 이유

tk=akTy+bkt_k=a_k^Ty+b_k라고 쓰고, 각 지수항이 전체 합에서 차지하는 양의 비율을 pk=etk/∑letlp_k=e^{t_k}/\sum_l e^{t_l}로 둔다. 이 비율의 합은 1이다. 벡터 aˉ=∑kpkak\bar a=\sum_kp_ka_k는 이 가중치로 평균한 방향이다.

미분하면 Hessian은 다음과 같다.

∇2F(y)=∑kpkakakT−aˉaˉT.\nabla^2F(y)=\sum_kp_ka_ka_k^T-\bar a\bar a^T.

임의의 방향 vv에 대해 이 이차형식을 계산하면

vT∇2F(y)v=∑kpk(vTak−vTaˉ)2≥0.v^T\nabla^2F(y)v =\sum_kp_k\left(v^Ta_k-v^T\bar a\right)^2\ge0.

양의 가중치를 곱한 편차의 제곱 합이므로 음수가 될 수 없다. 따라서 Hessian이 PSD이고 FF는 볼록하다. 이 유도를 외우지 않아도, GP를 변환한 목적함수와 부등식이 이 모양이라는 사실을 알아보면 된다.

Part C. 볼록 문제로 바꾸고 원래 답까지 구하기

8. 첫 예제에 변환을 한 줄씩 적용하기

처음 문제의 목적함수와 표준형 부등식은 다음 두 함수였다.

f0(x)=x1+x2,f1(x)=16x1x2≤1.f_0(x)=\sqrt{x_1}+\sqrt{x_2},\qquad f_1(x)=\frac{16}{x_1x_2}\le1.

첫째, 변수만 바꾼다. x1=ey1x_1=e^{y_1}, x2=ey2x_2=e^{y_2}를 대입하면

f0(ey)=ey1/2+ey2/2,f1(ey)=16e−y1−y2≤1.f_0(e^y)=e^{y_1/2}+e^{y_2/2},\qquad f_1(e^y)=16e^{-y_1-y_2}\le1.

둘째, 양수인 함수값에 로그를 취한다. 로그는 엄격하게 증가하므로 작은 비용을 더 큰 비용보다 먼저 선택하는 순서를 바꾸지 않는다. 부등식의 방향도 유지한다.

minimize⁡y1,y2∈Rlog⁡(ey1/2+ey2/2)subject tolog⁡16−y1−y2≤0.\begin{aligned} \operatorname{minimize}_{y_1,y_2\in\mathbb R}\quad &\log\left(e^{y_1/2}+e^{y_2/2}\right)\\ \text{subject to}\quad &\log16-y_1-y_2\le0. \end{aligned}

목적함수는 log-sum-exp라서 볼록하고 제약은 affine이다. 이제 볼록 최적화 문제다.

원래 좌표의 곱 제약은 로그 좌표에서 직선 경계로 바뀌며, 최적점은 (4,4)에서 (log4,log4)로 대응된다.

초록 영역은 조건을 만족하는 부분이고, 파랑·갈색 등고선은 원래 비용이 각각 4·5인 점들을 나타낸다. 회색 비용 3.5의 등고선은 가능집합에 닿지 못한다. 오른쪽에서는 같은 점들을 로그 좌표로 옮겼다. 변환된 목적함수의 등고선 값은 각각 log⁡4\log4, log⁡5\log5이지만 원래 비용의 순서는 그대로다.

왼쪽의 가능집합도 이 예제에서는 볼록하다. 원래 형태가 볼록 최적화가 아니었던 이유는 목적함수가 볼록하지 않았기 때문이다. 오른쪽에서는 목적함수와 제약을 함께 볼록 최적화의 조건에 맞췄다. 왼쪽 좌표축 위의 점들은 xi>0x_i>0 정의역에 포함되지 않는다.

9. 손으로 끝까지 풀고 x로 돌아오기

목적함수는 두 변수가 커질수록 증가한다. y1+y2>log⁡16y_1+y_2>\log16인 여유가 있다면 두 값을 조금씩 함께 줄여도 제약을 지키며 비용을 낮출 수 있다. 따라서 최적점은 경계에 있다.

y1+y2=log⁡16.y_1+y_2=\log16.

합을 고정한 채 두 값의 균형만 바꾸도록 새 실수 tt를 하나 쓰자.

y1=log⁡4+t,y2=log⁡4−t.y_1=\log4+t,\qquad y_2=\log4-t.

어떤 tt에도 두 값의 합은 2log⁡4=log⁡162\log4=\log16이다. t=0t=0이면 균형 잡힌 배분이고, 양수면 첫 번째 쪽으로, 음수면 두 번째 쪽으로 치우친다. 목적함수를 이 변수 하나로 쓰면

F(t)=log⁡(2et/2+2e−t/2).F(t)=\log\left(2e^{t/2}+2e^{-t/2}\right).

성능 제약의 경계를 따라 비용을 비교하면 t=0에서 변환된 비용 log4가 가장 작다.

양수 w=et/2w=e^{t/2}라고 두면 다음 계산으로 최소값을 알 수 있다.

w+1w−2=(w−1)2w≥0.w+\frac1w-2=\frac{(w-1)^2}{w}\ge0.

따라서 et/2+e−t/2≥2e^{t/2}+e^{-t/2}\ge2이고, 등호는 w=1w=1, 즉 t=0t=0에서만 성립한다. 로그는 증가하므로

F(t)≥log⁡4,y1∗=y2∗=log⁡4.F(t)\ge\log4,\qquad \boxed{y_1^*=y_2^*=\log4}.

이것은 로그 좌표에서의 답이다. 원래 성능값으로 돌아가려면 성분마다 지수를 취한다.

x1∗=ey1∗=4,x2∗=ey2∗=4.\boxed{x_1^*=e^{y_1^*}=4,\qquad x_2^*=e^{y_2^*}=4}.

곱은 4⋅4=164\cdot4=16으로 제약을 지킨다. 원래 비용은 4+4=4\sqrt4+\sqrt4=4다. 두 목적함수의 최적값을 구분하면 다음과 같다.

무엇을 계산했는가?값
로그 좌표의 최적점 y∗y^*(log⁡4,log⁡4)(\log4,\log4)
원래 변수의 최적점 x∗x^*(4,4)(4,4)
변환된 목적함수의 최적값log⁡4\log4
원래 목적함수의 최적값44

변환된 비용을 원래 비용으로 보고 끝내면 안 된다. 로그를 목적함수에 적용했으므로 원래 비용은 그 값의 지수다. 최적점도 xi=eyix_i=e^{y_i}로 복원한다. 이 예제에서는 변환과 역변환 모두 정확하므로 근사 문제를 푼 것이 아니다.

10. 일반 GP에도 같은 변환을 적용한다

각 posynomial fif_i의 항을 번호 kk로 구분하고, 그 지수 벡터를 aika_{ik}, 양의 계수의 로그를 bikb_{ik}라 쓰자. KiK_i는 그 함수의 항 개수다. 그러면

f~i(y)=log⁡fi(ey)=log⁡(∑k=1KieaikTy+bik).\widetilde f_i(y)=\log f_i(e^y) =\log\left(\sum_{k=1}^{K_i}e^{a_{ik}^Ty+b_{ik}}\right).

등식용 monomial hjh_j의 지수 벡터를 djd_j, 양의 계수를 cjc_j라 쓰면 log⁡hj(ey)=djTy+log⁡cj\log h_j(e^y)=d_j^Ty+\log c_j다. 따라서 변환된 문제는

minimize⁡y∈Rnf~0(y)subject tof~i(y)≤0,i=1,…,m,djTy+log⁡cj=0,j=1,…,p.\begin{aligned} \operatorname{minimize}_{y\in\mathbb R^n}\quad&\widetilde f_0(y)\\ \text{subject to}\quad&\widetilde f_i(y)\le0,\quad i=1,\ldots,m,\\ &d_j^Ty+\log c_j=0,\quad j=1,\ldots,p. \end{aligned}

목적함수와 부등식은 log-sum-exp, 등식은 affine이다. 이것이 GP in convex form(볼록 형태의 GP)이다. 로그의 단조성은 같은 답을 고른다는 것을, log-sum-exp의 볼록성은 변환된 문제의 구조가 볼록하다는 것을 보장한다. 두 이유는 역할이 다르다.

모든 함수가 monomial이면 항이 하나뿐이라 로그를 취한 함수가 전부 affine이 된다. 이 경우 변환된 문제는 LP로 줄어든다. 예를 들어

minimize⁡x1,x2>0x12x2subject to4x1x2≤1,x22=1\begin{aligned} \operatorname{minimize}_{x_1,x_2>0}\quad&x_1^2x_2\\ \text{subject to}\quad&\frac4{x_1x_2}\le1,\qquad \frac{x_2}{2}=1 \end{aligned}

의 로그 변환은 다음 LP다.

minimize⁡y1,y22y1+y2subject tolog⁡4−y1−y2≤0,y2−log⁡2=0.\begin{aligned} \operatorname{minimize}_{y_1,y_2}\quad&2y_1+y_2\\ \text{subject to}\quad&\log4-y_1-y_2\le0,\\ &y_2-\log2=0. \end{aligned}

등식에서 y2=log⁡2y_2=\log2, 부등식에서 y1≥log⁡2y_1\ge\log2다. 목적함수는 y1y_1이 작을수록 작아지므로 y1∗=log⁡2y_1^*=\log2다. 복원하면 x∗=(2,2)x^*=(2,2), 원래 최적 비용은 22⋅2=82^2\cdot2=8이다. 로그 문제의 비용 3log⁡2=log⁡83\log2=\log8과도 대응한다.

Part D. 직접 정식화하고 풀어 보기

11. GP인지 판별할 때 확인할 것

식에 곱이 있다고 모두 GP인 것은 아니다. 먼저 양수 정의역을 확인하고, 각 함수가 어떤 종류인지 구별한 뒤 제약을 표준형으로 정리한다.

주어진 식GP 표준형으로 정리하기
posynomial f(x)≤bf(x)\le b, b>0b>0f(x)/b≤1f(x)/b\le1
posynomial f(x)≤f(x)\le monomial m(x)m(x)f(x)/m(x)≤1f(x)/m(x)\le1
monomial m1(x)=m2(x)m_1(x)=m_2(x)m1(x)/m2(x)=1m_1(x)/m_2(x)=1
monomial m(x)m(x) 최대화양수인 역수 1/m(x)1/m(x) 최소화
posynomial f(x)≥1f(x)\ge1 또는 f(x)=1f(x)=1일반적으로 표준 GP 조건을 만족하지 않음

예를 들어 x1+x2≤x3x_1+x_2\le x_3는 (x1+x2)/x3≤1(x_1+x_2)/x_3\le1로 쓸 수 있다. 분모가 monomial이므로 왼쪽은 posynomial이다. 반면 x1+x2=6x_1+x_2=6은 로그로 바꾸면 ey1+ey2=6e^{y_1}+e^{y_2}=6이어서 affine 등식이 되지 않는다. 이 식이 다른 방법으로 풀 수 없는 제약이라는 뜻은 아니며, 주어진 형태가 표준 GP 등식 규칙에는 들어맞지 않는다는 뜻이다.

LP·QP는 주로 원래 식의 affine·이차 구조를 보고 분류하고, GP는 양수 변수와 monomial·posynomial 구조를 본다. 따라서 이름의 순서만으로 GP가 QP의 차수를 더 높인 문제라고 생각하지 않는다. GP에서는 로그 변환 뒤의 구조가 중요하다.

12. 혼자 풀어 보는 확인 문제

문제 1. 주어진 형태가 표준 GP에 들어갈까?

모든 변수가 양수라고 하자. 다음을 각각 판별하고 이유를 설명하라.

  1. 목적함수 x1+x2x_1+x_2를 최소화하고 x1x2≥4x_1x_2\ge4를 만족한다.
  2. 목적함수 x1−x2x_1-x_2를 최소화한다.
  3. 등식 제약 x1+x2=4x_1+x_2=4를 둔다.
정답과 해설 펼치기

1번은 GP다. 목적함수는 posynomial이고 제약은 4/(x1x2)≤14/(x_1x_2)\le1로 쓸 수 있다.

2번의 목적함수는 음의 계수 항이 있어 posynomial이 아니다. 함수값이 일부 영역에서 양수라는 것만으로 계수 조건을 대신할 수 없다.

3번의 왼쪽은 posynomial이지만 monomial은 아니다. 로그 변환 후의 등식도 affine이 아니므로 이 형태는 표준 GP 등식에 해당하지 않는다. x1+x2≤4x_1+x_2\le4라면 (x1+x2)/4≤1(x_1+x_2)/4\le1로 쓸 수 있어 GP 부등식으로는 허용된다.

문제 2. 합의 로그와 monomial 등식 변환하기

f(x)=2x1+3/x2f(x)=2\sqrt{x_1}+3/x_2와 등식 x1x22=8x_1x_2^2=8을 yi=log⁡xiy_i=\log x_i로 변환하라.

정답과 해설 펼치기

함수값에 로그까지 취하면

log⁡f(ey)=log⁡(2ey1/2+3e−y2).\log f(e^y)=\log\left(2e^{y_1/2}+3e^{-y_2}\right).

두 항을 따로 로그로 바꿔 더하면 다른 함수가 된다. 등식은 곱의 로그 규칙을 적용할 수 있으므로

log⁡(x1x22)=log⁡8⟺y1+2y2−log⁡8=0.\log(x_1x_2^2)=\log8 \quad\Longleftrightarrow\quad y_1+2y_2-\log8=0.

합은 log-sum-exp로, 곱 하나는 affine으로 바뀌는 차이를 확인할 수 있다.

문제 3. 첫 번째 비용에 가중치가 생기면?

목적함수를 2x1+x22\sqrt{x_1}+\sqrt{x_2}로 바꾸고, 같은 성능 제약 x1x2≥16x_1x_2\ge16을 둔다. GP인지 확인하고 최적점을 구하라. 여전히 (4,4)(4,4)가 답인가?

정답과 해설 펼치기

목적함수는 두 항의 posynomial이고 제약도 같으므로 GP다. 변환된 목적함수는 log⁡(2ey1/2+ey2/2)\log(2e^{y_1/2}+e^{y_2/2}), 제약은 y1+y2≥log⁡16y_1+y_2\ge\log16이다.

손계산에서는 양수 a=x1a=\sqrt{x_1}, b=x2b=\sqrt{x_2}로 쓰면 ab≥4ab\ge4이고 비용은 2a+b2a+b다. 제곱이 0 이상인 사실에서

(2a−b)2≥0⟹2a+b≥22ab≥42.(\sqrt{2a}-\sqrt b)^2\ge0 \quad\Longrightarrow\quad 2a+b\ge2\sqrt{2ab}\ge4\sqrt2.

등호가 성립하려면 2a=b2a=b이고 ab=4ab=4여야 한다. 따라서 a=2a=\sqrt2, b=22b=2\sqrt2이며

x1∗=2,x2∗=8,f0(x∗)=42.\boxed{x_1^*=2,\qquad x_2^*=8,\qquad f_0(x^*)=4\sqrt2}.

첫 번째 성능의 비용이 더 비싸져 그 값을 줄이고 두 번째를 늘린다. 양쪽 계수가 같을 때의 대칭성만 보고 항상 같은 양을 배분하면 안 된다. 로그 좌표의 답은 (log⁡2,log⁡8)(\log2,\log8)이다.

문제 4. 변환된 해를 원래 해로 읽기

문제 3의 로그 좌표 해가 y∗=(log⁡2,log⁡8)y^*=(\log2,\log8)이고 변환된 최적 비용이 log⁡(42)\log(4\sqrt2)다. 원래 변수와 비용을 각각 어떻게 복원하는가?

정답과 해설 펼치기

변수는 성분마다 지수를 취한다.

x∗=(elog⁡2,elog⁡8)=(2,8).x^*=(e^{\log2},e^{\log8})=(2,8).

원래 목적함수값도 로그를 취했으므로 지수로 되돌린다.

f0(x∗)=elog⁡(42)=42.f_0(x^*)=e^{\log(4\sqrt2)}=4\sqrt2.

원래 식에 직접 대입하면 22+8=422\sqrt2+\sqrt8=4\sqrt2이고 곱은 16이다. 점과 비용의 역변환을 각각 수행한 뒤 원래 제약에 대입하는 순서다.

문제 5. 양수 정의역이면 최적점이 항상 존재할까?

min⁡x\min x subject to 0<x≤10<x\le1은 GP다. 최적점이 x=0x=0이라고 해도 될까? 로그 문제는 어떻게 되는가?

정답과 해설 펼치기

0은 정의역 밖이므로 최적점이라고 할 수 없다. 비용을 0에 한없이 가깝게 할 수 있지만 실제로 0을 달성하는 양수는 없다. 원래 문제의 infimum은 0이며 최소점은 없다.

로그 변환은 min⁡y\min y subject to y≤0y\le0이다. y→−∞y\to-\infty로 비용이 끝없이 내려가고, 복원한 x=eyx=e^y가 0에 가까워진다. GP가 볼록 문제로 변환된다는 사실만으로 최적점의 존재나 유일성까지 보장되지는 않는다.

GP를 풀 때 남겨 둘 순서는 양수 정의역 확인 → monomial·posynomial 구별 → 오른쪽 1로 정리 → 로그 변수 대입 → 함수값에 로그 → 볼록 문제 풀이 → 원래 변수와 비용 복원이다.

GP에서는 표현을 바꿔 풀기 쉬운 등가 문제를 만들었다. 다음 Duality Part 1에서는 최적값을 아직 몰라도 그보다 낮다고 보장할 수 있는 값을 만들어, 답의 품질과 최적성을 판단하는 방법을 배운다.

참고 자료

  • ENAI601 Module 6 — LP, QP, GP: Geometric Program, Geometric Program — Convex Form.
  • 2026년 10월 7일·10월 14일 수업.
  • Boyd, Kim, Vandenberghe, Hassibi, A tutorial on geometric programming, §2.