概要
不等式制約条件を持つLagrangeの未定乗数法は以下のように表示される(等式条件の場合はこちらを参照)。
(1)
この場合、停留点が制約条件の範囲外にあれば等式条件と同じ問題となり、範囲内にあれば制約条件なしの通常の極値問題となる。
例題
停留点が制約条件の範囲内の場合
停留点が制約条件の境界内にある次のような問題を考える。
(2)
この問題を解くのに、まず停留点が制約条件の範囲内にあるかをチェックする。上の式でと置いて最適化問題を解く。
(3)
上記の解は制約条件を満足する。この停留点が極値だということが分かっていれば、これが問題の解ということになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def f(x, y, a, b): return (x - a)**2 + (y - b)**2 + 10 a, b = 1/2, 1/2 x = np.linspace(-3, 6) y = np.linspace(-3, 6) x, y = np.meshgrid(x, y) t = np.linspace(-np.pi, np.pi) xg = 2 * np.cos(t) yg = 2 * np.sin(t) x4min = 6 / np.sqrt(13) y4min = 4 / np.sqrt(13) fmin = f(x4min, y4min, a, b) x4max = - 6 / np.sqrt(13) y4max = - 4 / np.sqrt(13) fmax = f(x4max, y4max, a, b) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(x, y, f(x, y, a, b), alpha=0.5) ax.plot(xg, yg, 0, c='r') ax.plot(xg, yg, f(xg, yg, a, b), c='r', linestyle='dashed') ax.scatter(a, b, 10, c='b') ax.scatter(a, b, 0, c='b') ax.plot([a, a], [b, b], [0, 10], c='b', linestyle='dotted') ax.plot([x4min, x4min], [y4min, y4min], [0, fmin], c='r', linestyle='dotted') ax.plot([x4max, x4max], [y4max, y4max], [0, fmax], c='r', linestyle='dotted') ax.set_xlabel("x") ax.set_ylabel("y") print("f_max={:8.4f}, for x={:7.4f}, y={:7.4f}".format(fmax, x4max, y4max)) print("f_min={:8.4f}, for x={:7.4f}, y={:7.4f}".format(fmin, x4min, y4min)) plt.show() |
停留点が制約条件の範囲外の場合
今度は目的関数の停留点が制約条件の境界の範囲外にある問題を考えてみる。
(4)
まず停留点が境界条件の範囲内にあるとして、として問題を解いてみる。
(5)
ところがこの解は制約条件を満足しない。解は制約条件の境界上にあることになるので、の条件でLagrangeの未定乗数法によって解く。
(6)
として、
(7)
いずれの解も制約条件を満たしており、このうち最小値となる解と目的関数の値は以下の通り。
(8)
λの符号について
有界でない例
以下、制約条件がで有界でない場合を考える。
最小化問題でgradientが逆向き(極値が制約条件外)
まず、目的関数を最小化する場合を考える。以下の問題では目的関数fの極値が制約条件の範囲外にあり、fとgのgradientがgの境界上で逆向きになる。
(9)
停留点は制約条件の境界上となることから、λ≠0として未定乗数法で解いて以下を得る。λ<0となり、gradientが逆向きであることが現れている(∇f = λ∇g)。
(10)
最小化問題でgradientが同じ向き(極値が制約条件内)
次の問題では極値が制約条件の範囲内にあり、fとgのgradientがgの境界上で同じ向きとなる。
(11)
この場合、fの極値は制約条件(緑色)の範囲内にあり、fとgのgradientがgの境界上で同じ向きになる。停留点は制約条件内にあることから、λ=0として制約条件の効果をなくし、単純にfの極値問題を解いて以下を得る(∇f =0)。
(12)
最大化問題でgradientが同じ向き(極値が制約条件範囲外)
次に目的関数を最大化する場合を考える。以下の問題では目的関数fの極値が制約条件の範囲外にあり、fとgのgradientがgの境界上で同じ向きになる。
(13)
停留点は制約条件の境界上となることから、λ≠0として未定乗数法で解いて以下を得る。λ>0となり、gradientが同じ向きであることが現れている(∇f = λ∇g)。
(14)
最大化問題でgradientが逆向き(極値が制約条件範囲内)
次の問題では極値が制約条件の範囲内にあり、fとgのgradientがgの境界上で逆向きとなる。
(15)
この場合、fの極値は制約条件(緑色)の範囲内にあり、fとgのgradientがgの境界上で逆向きになる。停留点は制約条件内にあることから、λ=0として制約条件の効果をなくし、単純にfの極値問題を解いて以下を得る(∇f =0)。
(16)
λの符号について
以上の4つのパターンをまとめると、以下のようになる。
∇fと∇gが同方向 | ∇fと∇gが逆方向 | |
fを最小化 | 制約条件内 λ = 0, g(x, y) < 0 |
制約条件外(境界上) λ < 0, g(x, y) = 0 |
fを最大化 | 制約条件外(境界上) λ > 0, g(x, y) = 0 |
制約条件内 λ = 0, g(x, y) < 0 |
たとえばfを最大化する場合の条件をまとめて書くと、
(17)
これがKKT条件と呼ばれるもの。
ただし上記の場合分けは、最小化問題か最大化問題かによってλの符号が異なっている。さらに未定乗数を求める関数をここではL = f − λgとしたが、L = f + λgとしている場合もあり、このときはまたλの不等号が逆になってややこしい。
KKT条件では、一般にλ ≥ 0とされるが、元の問題が最小化か最大化か、不等式制約条件を正とするか負とするか、未定乗数法の関数形がf − λgかf + λgか、設定条件によってこの符号が反転する。逆に言えば、もともとのKKT条件がλ ≥ 0と示されているので、最小化(あるいは最大化)に対して−∇gとしたり、L = f ± gを使い分けたり、g ⋚ 0の設定を選んだりしている節がある。
KKT条件
不等式制約条件付きの最適化問題において、Lagrangeの未定乗数法を適用する場合の条件は、一般にKKT条件(Karush-Kuhn-Tucker condition)として示されるが、問題設定の形式を明示する必要がある(あるいは最小化問題と最大化問題でλの不等号を反転させた形で示す)。
最大化問題を基本とし、不等式制約条件は0又は負とする。ラグランジュ関数の制約条件項の符号はマイナスとする。
(18)
この時、ラグランジュ関数を最大化するKKT条件は
(19)
最小化問題の場合には、最大化問題となるように目的関数を反転する。
(20)
あるいは元のままの関数形として、最小化問題とKKT条件を以下のように設定してもよい。
(21)
参考サイト
本記事をまとめるにあたって、下記サイトが大変参考になったことに感謝したい。