理解度チェック — 総合演習と全問レビュー
通し例題とは係数が違う別ケースで、交点計算 → 頂点採点 → 多重最適解 の手順を総復習する。
総合演習で新しい例題を解く
最後は、通し例題とは係数が違う別ケースで一連の流れをやり直します。ここで解ければ、単なる暗記ではなく手順そのものが理解できているはずです。
| 項目 | 内容 |
|---|---|
| 目的関数 | maximize z = 7x + 4y |
| 制約 1 | x + y ≤ 8 |
| 制約 2 | 2x + y ≤ 10 |
| 非負条件 | x ≥ 0, y ≥ 0 |
総合演習 1 — 新しい LP を通しで解く
maximize z = 7x + 4y、x + y ≤ 8、2x + y ≤ 10、x ≥ 0, y ≥ 0
という LP を考えます。交点 → 目的値 → 最適点の順に追います。
Q1. 境界線 x + y = 8 と 2x + y = 10 の交点の x を入力してください。
2 本目から 1 本目を引くと x = 2。
Q2. 同じ交点の y を入力してください。
x + y = 8 に戻して y = 6。交点は (2, 6)。
Q3. 交点 (2, 6) の目的値 z = 7x + 4y はいくつですか。
7×2 + 4×6 = 14 + 24 = 38。
Q4. 頂点 (5, 0) の目的値はいくつですか。
7×5 + 4×0 = 35。交点だけでなく、軸上の頂点も必ず比べます。
総合演習 2 — 最適点と多重最適解
最適点を決めたあと、目的関数だけを変えて多重最適解を確認します。
Q1. 標準の z = 7x + 4y で最適になる頂点の x を入力してください。
目的値は (0,0)→0、(5,0)→35、(2,6)→38、(0,8)→32 なので最適点は (2, 6)。
Q2. 同じく最適点の y を入力してください。
最適点は (2, 6)。
Q3. 目的関数を z = 10x + 5y に変えたときの最適解の種類はどれですか。
10x + 5y = 5(2x + y) なので、制約 2x + y ≤ 10 と平行です。辺 (5,0) 〜 (2,6) 全体で同じ最適値になります。
Q4. 同じ z = 10x + 5y での最適値を入力してください。
2x + y = 10 上で z = 5 × 10 = 50。
この講座の着地点
- 文章から変数・目的関数・制約を切り出せる。
- 切片・交点・目的値を自分で計算し、可行領域と最適点を説明できる。
- 2 変数の最小ソルバが何をしているかをコードで追える。
次に学ぶべきこと
本講座は 2 変数に絞って「図 → 手計算 → コード」を一通り体験するための入門です。実務やより高度な学習へ進む際の地図として、次のステップを挙げておきます。
| テーマ | 本講座との関係 |
|---|---|
| 単体法(シンプレックス法) | 3 変数以上では、本講座の「頂点を全部列挙する」方針は組合せ爆発で破綻します。単体法は可行領域の頂点を 1 つずつ賢く渡り歩いて最適解にたどり着くアルゴリズムで、現代の汎用 LP ソルバの基礎です。 |
| 双対性(duality) | 「制約 1 単位を緩めると目的値はいくら改善するか」という影の価格(shadow price)の概念。本講座で残量や効いている制約を見たときに感じた直観の、数学的な裏付けです。 |
| 整数計画法(IP / MIP) | 「ロット数は整数しか取れない」など、変数を整数に限定する拡張。LP の連続最適解とは答えが変わり、解くのに格段に手間がかかります。 |
| 非線形計画法 | x² や xy など二次以上の項が入る最適化。スケールメリットや混雑コストを表現したいときに必要になります。 |
| 実用ソルバ | Python では scipy.optimize.linprog、PuLP、cvxpy、商用では Gurobi や CPLEX。本講座のミニソルバの代わりに、これらに変数・目的関数・制約を渡せば数千変数まで現実的な時間で解けます。 |
2 変数の手触りが残っているうちに次のステップへ進むと、抽象的なアルゴリズムも「図のあれをやっている」と読み解きやすくなります。