Mímisbrunnr知恵の泉

← 数理最適化 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:無制約最適化最適性条件の地図 | 関連:不等式制約とKKT条件

要点(BLUF)

概念 ── 制約上での「下れなさ」

等式制約 h(x)=0h(x)=0 は、実行可能領域を 曲面(超曲面)に縛る。最適点では、その曲面に沿ってどちらに動いても目的が下がらない。曲面に沿う方向は制約勾配 h\nabla h に直交する方向。だから「曲面に沿う方向すべてで ff が改善しない」=「f\nabla f が曲面に沿う成分を持たない」=「f\nabla fh\nabla h と平行」。

ラグランジュ関数と停留条件

minf(x)\min f(x) s.t. hj(x)=0 (j=1,,p)h_j(x)=0\ (j=1,\dots,p) に対し ラグランジュ関数

L(x,μ)=f(x)+j=1pμjhj(x)\mathcal{L}(x, \mu) = f(x) + \sum_{j=1}^p \mu_j\, h_j(x)

最適点では L\mathcal{L}xxμ\mu に関する停留条件が成り立つ:

xL=f(x)+jμjhj(x)=0,μL=h(x)=0\nabla_x \mathcal{L} = \nabla f(x) + \sum_j \mu_j \nabla h_j(x) = 0, \qquad \nabla_\mu \mathcal{L} = h(x) = 0

最初の式が「勾配が平行」、2番目が「制約を満たす」。要するに:制約付き問題を、xx と乗数 μ\mu を未知数とする 連立方程式(無制約の停留問題) に変換できる。

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

具体例 ── 円周上での距離最小

minx2+y2\min x^2 + y^2 s.t. x+y=1x + y = 1。「直線 x+y=1x+y=1 上で原点に最も近い点」。ラグランジュ:

L=x2+y2+μ(x+y1)\mathcal{L} = x^2 + y^2 + \mu(x + y - 1)

停留条件:2x+μ=0, 2y+μ=0, x+y=12x + \mu = 0,\ 2y + \mu = 0,\ x+y=1。前2式から x=y=μ/2x=y=-\mu/2、制約に代入して μ=1-\mu = 1 すなわち μ=1\mu = -1(符号は定義による)、x=y=1/2x=y=1/2、最適値 f=1/2f = 1/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

数値解 (0.5,0.5)(0.5,0.5) が解析解と一致。乗数の大きさ 1 は「制約の右辺を x+y=11+ϵx+y=1 \to 1+\epsilon に緩めると、最適値が約 1ϵ1\cdot\epsilon 変わる」という感度を表す(次節)。

ラグランジュ乗数の意味 ── 感度

制約を h(x)=ch(x)=c と右辺をパラメータ化すると、最適値 f(c)f^\star(c) について

dfdc=μ\frac{d f^\star}{d c} = -\mu^\star

が成り立つ(包絡線定理)。乗数は 制約を1単位緩めたときの最適値の改善率=制約の「限界価値」。LP の影の価格(感度分析)と同じ概念で、線形・非線形を貫く統一的な解釈。μ=0\mu=0 なら、その制約は最適値に効いていない。

数式の直観的意味

なぜ「勾配が平行」が最適性なのか。制約曲面の接平面(h\nabla h に直交する方向すべて)に沿って ff を1次で動かすと、変化は fd\nabla f^\top d。最適なら、接平面上の任意方向 ddhd=0\nabla h^\top d=0)で改善できない、つまり fd=0\nabla f^\top d=0。これは「f\nabla f が接平面に直交する=h\nabla h の方向を向く」ことと同値。乗数 μ\mu はその比例係数で、f\nabla fh\nabla h 方向へ分解したときの長さ。複数制約なら f\nabla f が制約勾配たちの 張る部分空間に入る、というのが一般形。不等式制約が加わると、この「平行」が「非負係数の錐の中」に緩み、KKT 条件(不等式制約とKKT条件)になる。

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

関連ノート