Mímisbrunnr知恵の泉

← 数理最適化 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:等式制約とラグランジュ乗数最適性条件の地図 | 関連:凸最適化問題と双対理論

要点(BLUF)

概念 ── 効く制約・効かない制約

不等式制約 gi(x)0g_i(x) \le 0 は、最適点で2通りに分かれる:

KKT 条件は「有効な制約だけがラグランジュ的に効く」を、相補性という形で表す。

KKT 条件

minf(x)\min f(x) s.t. gi(x)0 (i=1..m), hj(x)=0 (j=1..p)g_i(x)\le0\ (i=1..m),\ h_j(x)=0\ (j=1..p)。ラグランジュ関数

L(x,λ,μ)=f(x)+iλigi(x)+jμjhj(x)\mathcal{L}(x,\lambda,\mu) = f(x) + \sum_i \lambda_i g_i(x) + \sum_j \mu_j h_j(x)

に対し、最適点 xx^\star で(正則性条件のもと)乗数 λ,μ\lambda,\mu が存在して:

(1) 停留性:f(x)+iλigi(x)+jμjhj(x)=0(2) 原始実行可能性:gi(x)0,hj(x)=0(3) 双対実行可能性:λi0(4) 相補性:λigi(x)=0\begin{aligned} &\text{(1) 停留性:} && \nabla f(x^\star) + \sum_i \lambda_i \nabla g_i(x^\star) + \sum_j \mu_j \nabla h_j(x^\star) = 0 \\ &\text{(2) 原始実行可能性:} && g_i(x^\star) \le 0,\quad h_j(x^\star) = 0 \\ &\text{(3) 双対実行可能性:} && \lambda_i \ge 0 \\ &\text{(4) 相補性:} && \lambda_i\, g_i(x^\star) = 0 \end{aligned}

相補性(4)が肝:gi<0g_i<0(非有効)なら λi=0\lambda_i=0λi>0\lambda_i>0 なら gi=0g_i=0(有効)。だから「効いている制約だけが乗数を持つ」。双対実行可能性(3)λi0\lambda_i\ge0 は「制約は片側からしか押し返さない」を表す(等式制約の μ\mu は符号自由)。

具体例 ── 制約が解を動かす

min(x2)2+(y2)2\min (x-2)^2 + (y-2)^2 s.t. x+y2, x,y0x+y \le 2,\ x,y\ge0。無制約なら最小は (2,2)(2,2) だが、これは x+y=4>2x+y=4>2 で実行不能。制約 x+y2x+y\le2 が有効になり、最適は境界 x+y=2x+y=2 上。対称性から x=y=1x=y=1

KKT を確認:有効制約 g=x+y2=0g=x+y-2=0f=(2(x2),2(y2))=(2,2)\nabla f = (2(x-2),2(y-2)) = (-2,-2)g=(1,1)\nabla g=(1,1)。停留性 f+λg=0\nabla f + \lambda \nabla g = 0 より 2+λ=0-2 + \lambda = 0λ=20\lambda = 2 \ge 0(双対実行可能、OK)。相補性も g=0g=0 で成立。

from scipy.optimize import minimize

# min (x-2)^2+(y-2)^2 s.t. x+y<=2, x,y>=0
res = minimize(lambda p: (p[0]-2)**2 + (p[1]-2)**2, x0=[0, 0],
               constraints={'type': 'ineq', 'fun': lambda p: 2 - p[0] - p[1]},  # 2-x-y>=0
               bounds=[(0, None), (0, None)])
print(f"数値解  x={res.x[0]:.4f}, y={res.x[1]:.4f}, f={res.fun:.4f}")
print(f"解析解  x=1, y=1, f=2, KKT乗数 lambda=2 (>=0, 制約は有効)")

実行結果:

数値解  x=1.0000, y=1.0000, f=2.0000
解析解  x=1, y=1, f=2, KKT乗数 lambda=2 (>=0, 制約は有効)

無制約最小 (2,2)(2,2) が制約に阻まれ、境界上の (1,1)(1,1) に押し戻された。乗数 λ=2>0\lambda=2>0 は制約が有効(押し返している)ことを示す。もし制約が x+y10x+y\le10 なら無制約最小 (2,2)(2,2) が実行可能で、λ=0\lambda=0(制約は効かない)になる。

凸なら必要が十分に変わる

一般に KKT は 必要条件(最適なら KKT を満たす、逆は不真)。だが ff と各 gig_i が凸、hjh_j が線形で、Slater 条件(狭義に実行可能な内点が存在)が成り立てば、KKT は十分条件にもなる ── KKT を満たす点は 大域最適。これは第1章の予告(最適性条件の地図)の回収であり、凸最適化(凸最適化問題と双対理論)が「KKT を解けば終わり」になる理由。

数式の直観的意味

停留性 f=λigi+μjhj-\nabla f = \sum \lambda_i \nabla g_i + \sum \mu_j \nabla h_jλi0\lambda_i\ge0)は、「目的を下げたい力 f-\nabla f が、有効制約の外向き法線 gi\nabla g_i非負結合(凸錐) で打ち消されている」状態。下げたい方向はまだあるのに、それが全部「壁の外」を向いていて動けない ── これが制約付き最適の釣り合い。λi0\lambda_i\ge0 は壁が片側にしか押せないこと、相補性は「触れていない壁は押し返さない」ことを表す。等式制約(等式制約とラグランジュ乗数)では壁が両側を縛るので μ\mu は符号自由。乗数は依然として感度(影の価格)の意味を保ち、双対変数(凸最適化問題と双対理論)として再登場する。

⚠️ よくある誤解・落とし穴

関連ノート