高校数学で解く線形最適化 — 直線を動かして最大値を探す
「3x+2y をできるだけ大きくしたい」。ただし、x と y は好き勝手に増やせない。
こんな問題は、一見すると2つの変数を同時に動かす必要があって難しそうに見える。しかし、高校数学で学ぶ「直線」と「領域」だけで解くことができる。
この第1回では、計算よりも図形のイメージを大切にしながら、線形最適化(線形計画法)の入口を見ていく。
1. 何を最大化するのか
今回の問題はこちら。
最大化:制約条件:f(x,y)=3x+2yx+y≤62x+y≤8x≥0,y≥0
f(x,y)=3x+2y を目的関数、不等式を制約条件と呼ぶ。
例えば、x と y を2種類の商品の生産量、3x+2y を利益と考えてもいい。資源には限りがあるため、作れる量に制限がかかるわけだ。
注意したいのは、目的関数だけでは最大値を決められないこと。x,y をいくらでも大きくできるなら、3x+2y に上限はない。今回は制約条件があるからこそ、最大化が意味を持つ。
2. 制約条件を「領域」に変える
まずは各不等式を y について解く。
x+y≤62x+y≤8⟺y≤6−x⟺y≤8−2x
つまり、グラフでは次の条件をすべて同時に満たす部分を探せばいい。
- 直線 y=6−x の下側
- 直線 y=8−2x の下側
- x≥0 かつ y≥0(第1象限)
重なり合った部分を実行可能領域と呼ぶ。今回は四角形になる。
まず1つずつ、直線の下側を見てみましょう。両方を満たす共通部分が、実行可能領域です。
- x + y = 6
- 2x + y = 8
- 実行可能領域
ℹ4つの条件を同時に満たす四角形
緑の四角形の内側と辺の上なら、すべての制約を満たします。頂点は (0,0)、(4,0)、(2,4)、(0,6) です。
表示範囲は x = 0〜5、y = 0〜7。境界も「≤」に含まれます。
3. 目的関数も「直線」に変える
ここが核心だ。目的関数の値を k と置く。
3x+2y=k
これを y について解くと、
y=−23x+2k
傾きが −23、切片が 2k の直線になった。
k を大きくすると、傾きを変えずに直線が上へ平行移動する。
したがって、次の操作をすればよい。
- 3x+2y=k という直線を描く。
- 直線を上へ動かして k を大きくする。
- 実行可能領域と交わる最後の位置を探す。
k を増やすと、黒い直線が上へ動きます。緑の領域に触れたまま、どこまで動かせるでしょうか?
- x + y = 6
- 2x + y = 8
- 実行可能領域
- 3x + 2y = k
- 領域内の交点・線分
ℹまだ領域と交わっています
3x + 2y = 8.0 を満たす点が領域内にあります。k をさらに増やして、最後に触れる位置を探してみましょう。
4つの頂点の値を比べる| 頂点 (x, y) | 3x + 2y | 比較 |
|---|
| (0, 0) | 0 | — |
|---|
| (4, 0) | 12 | — |
|---|
| (2, 4) | 14 | 最大 |
|---|
| (0, 6) | 12 | — |
|---|
領域は固定です。判定は頂点での値の比較に基づきます。この問題では、領域上の目的関数の値は0〜14です。
この考え方を目的関数の等値線(等高線)を動かすという。2変数の最適化を、目で見える問題に置き換えられた。
4. 実際に最大値を求める
図を見ると、最後に直線が触れるのは、2本の境界直線の交点だと予想できる。
{x+y=62x+y=8
上の2式を引けば、
x=2,y=4
この点の目的関数は、
f(2,4)=3⋅2+2⋅4=14
最大値は 14、そのとき (x,y)=(2,4) である。
念のため、実行可能領域の4つの頂点も調べてみよう。
| 頂点 (x,y) | 3x+2y |
|---|
| (0,0) | 0 |
| (4,0) | 12 |
| (2,4) | 14 |
| (0,6) | 12 |
確かに (2,4) が最大になっている。
5. なぜ「頂点」を調べればいいのか
直感的には、直線状の目的関数を多角形の上で最大化すると、少なくとも1つの頂点で最大値が達成されるからだ(実行可能領域が空でない有界な多角形の場合)。
例えば、ある辺の途中の点は、その辺の両端の点を使って
P=(1−t)A+tB(0≤t≤1)
と表せる。目的関数 f(x,y)=3x+2y は一次式なので、
f(P)=(1−t)f(A)+tf(B)
が成り立つ。つまり、辺の途中の値は両端の値の間に収まる。途中だけが両端より大きくなることはない。
この性質を使うと、多角形の内部から境界へ、境界から頂点へと、値を下げずに移動できる。だから頂点を調べれば十分なのだ。
ただし、最適解が必ず1点だけとは限らない。
最適解が無数にある例
例えば、
最大化:制約条件:3x+y3x+y≤2000x≥0,y≥0
なら、最大値は 2000。しかも、
3x+y=2000,0≤x≤32000
を満たす線分上のすべての点が最適解になる。
目的関数の直線と制約の境界が重なっているからだ。頂点で最大値を達成することと、頂点だけが最適解であることは違う。
6. 今回のまとめ
- 目的関数は「何を最大化・最小化したいか」を表す。
- 制約条件が表す領域を実行可能領域という。
- 3x+2y=k のような直線を平行移動すると、最大化を図形的に理解できる。
- 有界な多角形の線形最適化では、少なくとも1つの頂点が最適解になる。
- 辺全体が最適解になる場合もある。
ここまでは高校数学の「図形と方程式」の延長だ。
では、目的関数が 3x+2y のような直線ではなく、曲がった曲面だったらどうするのだろう?
次回:偏微分で解く非線形最適化 — 3D曲面の底を探す