最適解はなぜ頂点に現れるか
可行領域の頂点で目的値を採点し、標準ケースの最適点と、多重最適解が起きる条件を掴む。
目的関数の直線を平行移動していくと、最後に触れる点が最適解になります。
目的関数は「等高線の束」として見る
目的関数 z = 3x + 5y は、値を固定すると 3x + 5y = 定数 という直線になります。定数を大きくすると、直線は平行のまま右上へ押し出されます。
可行領域からはみ出さない範囲で一番遠くまで押し出したとき、最後に接している点が最適解です。
−c_x / c_y です。係数比が変わると、押し出す向きが変わります。なぜ頂点で触れるのか: 目的関数が線形(直線)であり、可行領域も直線で囲まれた凸多角形だからです。直線を平行移動して凸多角形に最後に触れる位置は、ほぼ必ず角(頂点)になります。例外は、目的関数の直線がたまたま可行領域のある辺と平行になっている場合だけで、このときは辺全体で同時に触れます(多重最適解)。
標準ケースでは頂点を採点すればよい
第 3 章で求めた交点 (6, 4) と、軸上の切片を合わせると、可行領域の主な頂点は次の 4 つです(交点の計算は再掲しません)。
| 頂点 | 意味 |
|---|---|
(0, 0) | 何も作らない |
(8, 0) | 切断工程いっぱいまで A を作る |
(6, 4) | 2 本の工程制約が同時に効く交点(第 3 章で計算済み) |
(0, 7) | 仕上工程いっぱいまで B を作る |
2 変数の入門では、これらの頂点の目的値を直接比べる方法がもっとも理解しやすいです。
理解チェック 1 — 主要な頂点を採点する
可行領域の主な頂点 (0,0)、(8,0)、(6,4)、(0,7) を採点し、最適点を数で選びます。
Q1. 目的関数 z = 3x + 5y で、頂点 (8, 0) の目的値はいくつですか。
3×8 + 5×0 = 24。
Q2. 頂点 (6, 4) の目的値を求めてください。
3×6 + 5×4 = 18 + 20 = 38。
Q3. 頂点 (0, 7) の目的値を求めてください。
3×0 + 5×7 = 35。標準ケースでは (6, 4) の方が大きいことが分かります。
Q4. 標準ケースの最適点 (x, y) の x を入力してください。
目的値は (8,0)→24、(6,4)→38、(0,7)→35 なので最適点は (6, 4)。
Q5. 同じ最適点の y を入力してください。
最適点は (6, 4)。
多重最適解は「平行」で起きる
目的関数の傾きが可行領域の辺とぴったり一致すると、1 点だけではなく辺全体で同じ目的値になります。
2x + y = zは2x + y = 16と平行x + 2y = zはx + 2y = 14と平行
このときは「どの頂点が最適か」ではなく、「どの辺が最適か」と考える必要があります。
理解チェック 2 — 多重最適解を見抜く
目的関数の傾きが制約辺と一致すると、1 点ではなく辺全体で同じ目的値になります。
Q1. 目的関数を maximize z = 2x + y に変えたとき、最適値はいくつですか。
2x + y は制約 2x + y ≤ 16 と平行なので、その制約辺上で z = 16。
Q2. 同じ z = 2x + y のとき、最適解の種類はどれですか。
目的関数の直線が制約辺と平行なので、辺全体で同じ最適値になります。
第 4 章のまとめ
- 2 変数の LP では、可行領域の頂点を採点すると最適解を見つけやすい。
- 標準ケースでは
(6, 4)が最適で、目的値は 38。 - 目的関数が制約辺と平行になると、多重最適解が起きる。