スライダで体感する
シミュレータで係数や右辺を動かし、手計算で学んだ頂点比較が図と一致するかを確認する。
シミュレータで利益係数と制約上限を動かすと、目的関数の向きと可行領域の形がどう変わるかを、その場で確認できます。
見ているもの
- 青い多角形: すべての制約を同時に満たす可行領域
- 青い線: 境界線
2x + y = b₁とx + 2y = b₂ - 橙の破線: 現在の目的関数
c_x x + c_y y = zの等高線 - 太い赤線または赤い点: 現在の最適解
可行領域と最適点を動かしてみる
A を 1 ロット増やしたときの利益。大きいほど最適点は右側へ寄りやすくなります。
B を 1 ロット増やしたときの利益。大きいほど最適点は上側へ寄りやすくなります。
2x + y ≤ b₁ の右辺です。小さくすると可行領域が左下へ縮みます。
x + 2y ≤ b₂ の右辺です。小さくすると可行領域が内側へ押し込まれます。
可行領域と最適点
| 頂点種別 | x | y | z | 効いている制約 |
|---|
試してほしい 5 つの操作
- A 重視 を押すと、右下寄りの頂点が有利になります。
- B 重視 を押すと、上側の辺全体が最適になる例が見えます。
- 多重最適解 1 では
2x + yが制約辺と平行になります。 - 多重最適解 2 では
x + 2yが制約辺と平行になります。 - 制約を厳しく では、可行領域そのものが縮む様子が分かります。
理解チェック 1 — プリセットで最適点を読む
プリセットを押して、シミュレータの出力から数値を読み取ります。
Q1. 標準 を押し、最適点 (x, y) の x を読み取ってください。
標準ケースでは 2 本の工程制約がちょうど同時に効く交点 (6, 4) が最適になります。
Q2. 同じく標準プリセットの最適点の y を入力してください。
(6, 4)。
Q3. A 重視(c_x = 12, c_y = 5)に切り替えたとき、最適点の x を入力してください。
A の利益係数が大きくなると、目的関数の向きが右側へ傾き、右下の頂点 (8, 0) が最適になります。
Q4. A 重視 の最適点の y を入力してください。
最適点は (8, 0)。
理解チェック 2 — 多重最適解と最適値
B 重視(c_x = 3, c_y = 6)では目的関数が仕上工程の辺と平行になり、多重最適解が発生します。
Q1. B 重視 を押したときの最適解の種類はどれですか。
z = 3x + 6y = 3(x + 2y) となり、制約 x + 2y ≤ 14 と平行です。
Q2. B 重視 での最適値を入力してください。
辺 x + 2y = 14 上で z = 3(x + 2y) = 3 × 14 = 42。
理解チェック 3 — 制約を厳しくすると可行領域が縮む
制約を厳しく(b_1 = 14, b_2 = 10)を押し、最適点の座標と目的値を読み取ります。
Q1. 最適値 z を入力してください(c_x = 3, c_y = 5)。
制約が 2x + y ≤ 14 と x + 2y ≤ 10 に変わると、交点は (6, 2)、目的値は 3×6 + 5×2 = 28。
第 5 章のまとめ
- 利益係数の比が変わると、目的関数の向きが変わる。
- 制約の右辺が変わると、可行領域そのものが縮んだり広がったりする。
- シミュレータは、手計算で見てきた頂点比較を図で再確認するための道具。
次章への橋渡し — シミュレータと実装は同じロジック
このシミュレータは、スライダを動かすたびにブラウザ内部で境界線の交点を全部列挙し、可行な頂点だけを残し、目的関数で採点するという処理を実行しています。これは第 4 章で手計算した手順そのものです。
第 6 章では、この同じロジックを Python のコードで読みます。シミュレータの「最適解の種類」「最適点 / 最適辺」「効いている制約」といった出力が、コードのどの部分から生まれているかを対応させながら読むと理解しやすくなります。