🎓 レベル:発展 | 重要度:A(必須)
📎 前提:等式制約とラグランジュ乗数・最適性条件の地図 | 関連:凸最適化問題と双対理論
要点(BLUF)
- KKT 条件は不等式制約付き最適化の 1次最適性条件。ラグランジュ乗数を不等式へ拡張したもの。
- 4本柱:停留性・原始実行可能性・双対実行可能性()・相補性()。
- 一般には 必要条件だが、問題が 凸なら 十分条件にもなり、KKT 点=大域最適。
概念 ── 効く制約・効かない制約
不等式制約 は、最適点で2通りに分かれる:
- 有効(active):(境界にぴったり)。目的を下げたい力を実際に押し返している。
- 非有効(inactive):(余裕あり)。最適点では無いも同然。
KKT 条件は「有効な制約だけがラグランジュ的に効く」を、相補性という形で表す。
KKT 条件
s.t. 。ラグランジュ関数
に対し、最適点 で(正則性条件のもと)乗数 が存在して:
相補性(4)が肝:(非有効)なら 、 なら (有効)。だから「効いている制約だけが乗数を持つ」。双対実行可能性(3) は「制約は片側からしか押し返さない」を表す(等式制約の は符号自由)。
具体例 ── 制約が解を動かす
s.t. 。無制約なら最小は だが、これは で実行不能。制約 が有効になり、最適は境界 上。対称性から 。
KKT を確認:有効制約 、、。停留性 より 、(双対実行可能、OK)。相補性も で成立。
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, 制約は有効)
無制約最小 が制約に阻まれ、境界上の に押し戻された。乗数 は制約が有効(押し返している)ことを示す。もし制約が なら無制約最小 が実行可能で、(制約は効かない)になる。
凸なら必要が十分に変わる
一般に KKT は 必要条件(最適なら KKT を満たす、逆は不真)。だが と各 が凸、 が線形で、Slater 条件(狭義に実行可能な内点が存在)が成り立てば、KKT は十分条件にもなる ── KKT を満たす点は 大域最適。これは第1章の予告(最適性条件の地図)の回収であり、凸最適化(凸最適化問題と双対理論)が「KKT を解けば終わり」になる理由。
数式の直観的意味
停留性 ()は、「目的を下げたい力 が、有効制約の外向き法線 の 非負結合(凸錐) で打ち消されている」状態。下げたい方向はまだあるのに、それが全部「壁の外」を向いていて動けない ── これが制約付き最適の釣り合い。 は壁が片側にしか押せないこと、相補性は「触れていない壁は押し返さない」ことを表す。等式制約(等式制約とラグランジュ乗数)では壁が両側を縛るので は符号自由。乗数は依然として感度(影の価格)の意味を保ち、双対変数(凸最適化問題と双対理論)として再登場する。
⚠️ よくある誤解・落とし穴
- KKT は無条件に必要ではない:正則性条件(LICQ・MFCQ・Slater など制約想定)が要る。退化した制約では乗数が存在しないことも。
- KKT 点=最適とは限らない(非凸では)。凸性+制約想定があって初めて十分条件。
- 相補性を見落とさない:非有効制約の乗数はゼロ。全制約に正の乗数を付けてはいけない。
- 不等式の向き・乗数の符号規約( で )を取り違えると条件が逆転する。
関連ノート
- 前提:等式制約とラグランジュ乗数
- 予告の回収:最適性条件の地図
- 凸での十分性・双対:凸最適化問題と双対理論
- 制約を目的へ織り込む別路線:ペナルティ法・障壁法
- 章のハブ:非線形最適化 章目次