ラグランジュ未定乗数法シミュレーター 戻る
数値解析

ラグランジュ未定乗数法シミュレーター

等式制約のもとで目的関数を最適化する「ラグランジュ未定乗数法」を可視化するツールです。目的関数の係数・制約条件・最小化/最大化を変えると、目的関数の等高線と制約曲線が接する最適点、ラグランジュ乗数 λ、感度(シャドープライス)がリアルタイムで分かります。

パラメータ設定
目的関数の係数 a(f = a·x² + b·y²)
x² 方向の重み。大きいほど x 方向に急なお椀
目的関数の係数 b(f = a·x² + b·y²)
y² 方向の重み。大きいほど y 方向に急なお椀
制約条件
最適化が乗るべき等式制約曲線 g(x,y)=0
制約の定数 c
直線の切片の和、または円の半径を決める定数
最適化
目的関数を最小化するか最大化するか
計算結果
最適解 x*
最適解 y*
目的関数の最適値 f*
ラグランジュ乗数 λ
制約の残差 g(x*,y*)
感度 df*/dc(=λ の確認)
等高線と制約曲線 — 接点と勾配ベクトル

同心の楕円が目的関数 f の等高線、太い曲線が制約 g=0。最適点では等高線が制約曲線に接し、∇f(黄)と ∇g(青)が平行になります。

制約上での目的関数 f
最適値 f* vs 制約定数 c(傾き = λ
理論・主要公式

$$\nabla f=\lambda\,\nabla g,\qquad g(x,y)=0$$

制約付き最適化の条件。最適点では目的関数 f の勾配 ∇f と制約 g の勾配 ∇g が平行になり、その比例係数がラグランジュ乗数 λ。これと制約 g=0 を連立して解く。

$$\lambda=\frac{d f^\star}{dc}\quad(\text{制約緩和の感度・シャドープライス})$$

乗数 λ は制約定数 c を1単位緩めたときの最適値 f* の変化率。資源を1単位増やすと目的関数がどれだけ改善するかを示す「潜在価格」。

$$f=a x^{2}+b y^{2},\qquad x^\star=\frac{b c}{a+b},\;\; y^\star=\frac{a c}{a+b}\;\;(\text{直線制約})$$

目的関数と、直線制約 x+y=c のときの最適解。f* = abc²/(a+b)、λ = 2abc/(a+b)。最適点で f の等高線が制約曲線に接する。

ラグランジュ未定乗数法とは

🙋
「ラグランジュ未定乗数法」って名前は聞いたことあるんですけど、結局なにをする道具なんですか?
🎓
ざっくり言うと「縛りつきで関数の最大・最小を求める道具」だね。ふつうの最適化なら、微分してゼロになる点を探せばいい。でも現実の問題はたいてい「予算はこれだけ」「材料の総量は決まっている」みたいな等式の縛り=制約がついてくる。制約があると、微分してゼロの点(制約なしの最適点)はまず制約を満たしてくれない。そこで使うのがこの方法だよ。
🙋
制約があるとなんで普通のやり方が効かないんですか?左のグラフだと、楕円の中心と直線が離れてますよね。
🎓
まさにそれ。楕円は目的関数 f の「等高線」で、中心が制約なしの最小点。でも直線 x+y=c の上を動かなきゃいけないなら、中心には行けない。じゃあ直線上のどこがベストか。コツは「等高線が制約の直線にちょうど接する点」を探すこと。接していない点なら、直線に沿って動けばもっと小さい等高線にまたがれる。だから接した瞬間がもう改善できない=最適点なんだ。
🙋
なるほど!接するっていうのと、∇f = λ∇g っていう式はどうつながるんですか?
🎓
勾配ベクトル ∇f はいつも等高線に垂直、∇g は制約曲線に垂直なんだ。等高線と制約曲線が接していれば、その点で両方の曲線は同じ接線を持つ。垂直な向きも自動的に同じ直線上に並ぶ。つまり ∇f と ∇g は平行。平行ということは、ある数 λ を使って ∇f = λ∇g と書ける。この λ が「ラグランジュ未定乗数」。あとはこの式と制約 g=0 を連立するだけで最適点が出る。左の図で黄色と青の矢印が重なるのを見てみて。
🙋
λ って計算の途中で出てくる謎の文字、くらいに思ってました。意味あるんですか?
🎓
それが一番面白いところ。λ は「制約をちょっと緩めたら最適値がどれだけ得するか」を表しているんだ。式で言うと λ = df*/dc。経済学だと「シャドープライス(潜在価格)」と呼ぶ。例えば材料をあと1kg使えるなら、利益はいくら増えるか。その答えがそのまま λ。だから λ が大きい制約は「ここを緩めればいちばん効く」という設計のヒントになる。右下のグラフで f* の傾きが λ と一致するのを確認できるよ。
🙋
最後にひとつ。制約を「円」にしたり「最大化」にしたりすると答えが変わりますよね。なにに気をつければいいですか?
🎓
いい質問だ。直線の制約は無限に伸びているから、お椀型の f は直線上で最小値は持つけど最大値は持たない。だから「直線+最大化」を選ぶと f* は無限大になる——これは正しい挙動だよ。一方、円の制約は閉じた有界な曲線だから、最大値も最小値も両方ある。円のときは候補点が (±c,0) と (0,±c) の2組出てきて、最小化なら小さいほう、最大化なら大きいほうを選ぶ。制約の「形」で答えの個数が変わるのがポイントだね。

よくある質問

等式制約 g(x,y)=0 のもとで目的関数 f(x,y) を最大化または最小化するための手法です。制約があると勾配をゼロにするだけでは解けません。なぜなら制約なしの最適点はたいてい制約を破るからです。ラグランジュ未定乗数法は、最適点では f の等高線が制約曲線と接する=両者の勾配が同じ向きを向く、という幾何学的事実を使います。未知のスカラー λ(ラグランジュ乗数)を導入し、∇f = λ∇g と制約 g=0 を連立して最適解を求めます。
λ は単なる計算上の補助変数ではなく、明確な物理的・経済的意味を持ちます。λ は制約を緩めたときに最適値がどれだけ変化するかを表す感度、すなわち df*/dc に等しくなります。これは「シャドープライス(潜在価格)」と呼ばれ、資源を1単位増やしたときに目的関数がどれだけ改善するかを示します。本ツールの直線制約 x+y=c では dfStar/dc = 2abc/(a+b) が乗数 λ と厳密に一致し、結果カードでその一致を確認できます。
制約曲線 g=0 の上を動きながら f を最適化することを考えます。ある点で f の勾配 ∇f が制約曲線の接線方向に少しでも成分を持てば、その方向へ動けば f をさらに改善できます。改善できなくなるのは ∇f が接線と直交するとき、つまり制約曲線の法線方向(=∇g の方向)を向くときだけです。よって最適点では ∇f と ∇g が同一直線上にあり、∇f = λ∇g と書けます。図では f の等高線が制約曲線に接する点として現れます。
目的関数 f = a·x² + b·y² は下に凸の「お椀型」なので、直線 x+y=c の上では1つの停留点(最小値)しか持ちません。直線は無限に伸びているため、直線に沿って x を大きく(または小さく)すれば f はいくらでも大きくなり、有限の最大値は存在しません。本ツールは直線制約+最大化のとき f* を無限大(∞)として表示し、最大化不能であることを明示します。一方、円制約は閉じた有界な曲線なので最大値・最小値の両方が存在します。

実世界での応用

構造最適化と設計:「重量を一定に保ったまま剛性を最大にする」「許容応力という制約のもとで断面を最小化する」といった設計問題は、まさに制約付き最適化です。トラスのトポロジー最適化や形状最適化では、体積制約や応力制約のもとで目的関数(コンプライアンスや質量)を最小化します。このとき各制約に対応するラグランジュ乗数が、その制約をわずかに緩めれば設計がどれだけ改善するかを定量的に教えてくれます。

有限要素法と支配方程式の導出:FEM の理論的な土台である変分原理そのものが制約付き最適化です。例えば非圧縮性流れや接触問題では「非圧縮条件」「貫入禁止条件」を等式・不等式制約として課し、その乗数が物理量(圧力や接触力)として現れます。混合有限要素法における圧力場は、まさに体積保存制約のラグランジュ乗数です。乗数が物理的な意味を持つことを理解すると、なぜその定式化が必要かが腑に落ちます。

経済学・オペレーションズリサーチ:予算制約のもとで効用を最大化する消費者問題、資源制約のもとで利益を最大化する生産計画は、制約付き最適化の典型です。ここで乗数は「シャドープライス」と呼ばれ、その資源を1単位追加で手に入れたときに目的関数がどれだけ増えるかを示します。線形計画法の双対変数も同じ考え方で、どの制約を緩めるべきかという意思決定に直結します。

機械学習と統計:サポートベクターマシンはマージン最大化を制約付き最適化として定式化し、その双対問題の乗数がサポートベクターを特定します。正則化(リッジ回帰など)も「パラメータのノルムを一定以下に抑える」という制約と等価で、正則化係数が乗数の役割を果たします。最尤推定に制約を加える場面でも同じ枠組みが使われ、ラグランジュ未定乗数法は応用数学の共通言語になっています。

よくある誤解と注意点

まず大きな落とし穴が、「∇f = λ∇g を解いて出た点は必ず最適解だ」と思い込むことです。この条件は最適点が満たすべき必要条件であって、十分条件ではありません。条件を満たす点(停留点)は最小値のことも最大値のこともあり、鞍点のこともあります。本ツールの円制約では候補が2組出てきて、どちらが最小でどちらが最大かは f の値を比べて初めて決まります。実務では二階の条件(縁付きヘッセ行列の符号)を確認するか、すべての停留点で目的関数を評価して大小を比較する必要があります。

次に、「λ の符号や大きさを気にしない」こと。λ は感度 df*/dc そのものなので、符号には意味があります。λ が正なら制約を緩めると最適値が増え、負なら減ります。最小化問題で λ が小さい制約は「緩めてもほとんど得しない」ので設計の自由度として後回しでよく、λ が大きい制約は「ここがボトルネック」というシグナルです。また制約が等式でなく不等式の場合、有効でない(束縛していない)制約の乗数はゼロになる——これが KKT 条件の相補性です。λ をただの計算副産物として捨てると、最も価値ある設計情報を捨てることになります。

最後に、「制約の正則性(勾配が消えない)を確認しない」こと。ラグランジュ未定乗数法は ∇g が最適点でゼロでないことを暗黙に仮定しています。もし ∇g = 0 になる点では ∇f = λ∇g が成り立たず、乗数が定義できません。複数の制約が接している点や、制約曲線が尖っている点では制約想定(constraint qualification)が破れ、標準的な手法がそのままでは使えません。実際の最適化では、制約のスケーリングや定式化の見直しでこうした特異点を避けることが、解を安定して得るための重要なテクニックになります。

使い方ガイド

  1. 目的関数の係数aNum、aRange、目的関数の形状を定義します。二次形式 f(x,y) = a·x² + b·y² + c·xy の各パラメータを入力してください。
  2. 等式制約条件g(x,y) = 0を設定します。例えば製造コスト制約「2x + 3y = 12」など実務条件を入力し、bNum・bRangeで制約係数を調整します。
  3. シミュレーション実行後、最適解(x*,y*)、目的関数最適値f*、ラグランジュ乗数λを確認し、制約の感度df*/dcを検証して制約変更時の影響を評価します。

具体的な計算例

自動車フレーム設計で質量最小化問題を想定します。目的関数 f(x,y) = 2x² + 3y² - xy(kg)、制約条件 2x + 3y = 60(mm)の場合、ラグランジュ関数 L = 2x² + 3y² - xy - λ(2x + 3y - 60) を展開します。最適解はx* = 10.8mm、y* = 12.8mm、最適質量f* = 145.6kg、ラグランジュ乗数λ = 8.4kg/mm となり、制約を1mm緩和すると質量が8.4kg削減可能と判定されます。

実務での注意点