🎓 レベル:標準 | 重要度:A(必須)
📎 前提:無制約最適化・最適性条件の地図 | 関連:不等式制約とKKT条件
要点(BLUF)
- 等式制約 付きの最適点では、目的の勾配が制約の勾配に平行:。
- 係数 が ラグランジュ乗数。これを使うと制約付き問題が 無制約の停留問題に変わる。
- 乗数の値は「制約の右辺を1単位緩めたときの最適値の感度」(影の価格、感度分析)。
概念 ── 制約上での「下れなさ」
等式制約 は、実行可能領域を 曲面(超曲面)に縛る。最適点では、その曲面に沿ってどちらに動いても目的が下がらない。曲面に沿う方向は制約勾配 に直交する方向。だから「曲面に沿う方向すべてで が改善しない」=「 が曲面に沿う成分を持たない」=「 が と平行」。
ラグランジュ関数と停留条件
s.t. に対し ラグランジュ関数:
最適点では の と に関する停留条件が成り立つ:
最初の式が「勾配が平行」、2番目が「制約を満たす」。要するに:制約付き問題を、 と乗数 を未知数とする 連立方程式(無制約の停留問題) に変換できる。
graph LR A["制約付き min f s.t. h=0"] --> B["ラグランジュ関数 L = f + mu*h"] B --> C["grad_x L = 0 (勾配が平行)"] B --> D["grad_mu L = 0 (制約 h=0)"] C --> E["連立を解けば停留点と乗数"] D --> E
具体例 ── 円周上での距離最小
s.t. 。「直線 上で原点に最も近い点」。ラグランジュ:
停留条件:。前2式から 、制約に代入して すなわち (符号は定義による)、、最適値 。対称性どおり、直線への垂線の足が答え。
Pythonで確認
from scipy.optimize import minimize
# min x^2 + y^2 s.t. x + y = 1
res = minimize(lambda p: p[0]**2 + p[1]**2, x0=[0, 0],
constraints={'type': 'eq', 'fun': lambda p: p[0] + p[1] - 1})
print(f"数値解 x={res.x[0]:.4f}, y={res.x[1]:.4f}, f={res.fun:.4f}")
print(f"解析解 x=0.5, y=0.5, f=0.5, ラグランジュ乗数 |mu|=1")
実行結果:
数値解 x=0.5000, y=0.5000, f=0.5000
解析解 x=0.5, y=0.5, f=0.5, ラグランジュ乗数 |mu|=1
数値解 が解析解と一致。乗数の大きさ 1 は「制約の右辺を に緩めると、最適値が約 変わる」という感度を表す(次節)。
ラグランジュ乗数の意味 ── 感度
制約を と右辺をパラメータ化すると、最適値 について
が成り立つ(包絡線定理)。乗数は 制約を1単位緩めたときの最適値の改善率=制約の「限界価値」。LP の影の価格(感度分析)と同じ概念で、線形・非線形を貫く統一的な解釈。 なら、その制約は最適値に効いていない。
数式の直観的意味
なぜ「勾配が平行」が最適性なのか。制約曲面の接平面( に直交する方向すべて)に沿って を1次で動かすと、変化は 。最適なら、接平面上の任意方向 ()で改善できない、つまり 。これは「 が接平面に直交する= の方向を向く」ことと同値。乗数 はその比例係数で、 を 方向へ分解したときの長さ。複数制約なら が制約勾配たちの 張る部分空間に入る、というのが一般形。不等式制約が加わると、この「平行」が「非負係数の錐の中」に緩み、KKT 条件(不等式制約とKKT条件)になる。
⚠️ よくある誤解・落とし穴
- ラグランジュ条件は必要条件(停留点を出すだけ)。極大・鞍点も満たす。2次条件(縁付きヘッセ)で極小を確認。
- 制約想定(正則性)が要る: が一次独立(LICQ)でないと乗数が定まらない・存在しないことがある。
- 乗数の符号は定義依存: か かで符号が反転。感度の解釈時は定義を確認。
- 等式制約は領域を狭めるだけでなく、非凸な曲面なら局所解が複数生じ得る。
関連ノート
- 前提:無制約最適化・最適性条件の地図
- 不等式へ拡張:不等式制約とKKT条件
- 感度の線形版:感度分析
- 双対理論の基礎:凸最適化問題と双対理論
- 章のハブ:非線形最適化 章目次