合同会社小村ソフト
第 1 章

導入 — なぜ最適化が必要か

利益だけを見ていては計画は決まらない。利益と工程時間の計算を往復し、意思決定変数・目的関数・制約の 3 つに分ける感覚をつくる。

意思決定変数、目的関数、制約の 3 要素を示す図

線形計画法は、何を選ぶか・何を良くしたいか・何が上限かを分けて考える道具です。

「儲かる方を全部作る」では終わらない

製品 A は 1 ロットで 3 万円、製品 B は 1 ロットで 5 万円の利益が出るとします。利益だけを見ると B を増やしたくなりますが、現実には工程時間の上限があります。

項目AB
利益3 万円 / ロット5 万円 / ロット
切断工程2 時間1 時間
仕上工程1 時間2 時間

ここで大事なのは、利益の高低だけではなく、各工程の消費量まで同時に見る必要がある ことです。

「計画法」はコンピュータプログラミングではない

線形計画法(Linear Programming)の「計画法(Programming)」は、コンピュータでコードを書く意味の「プログラミング」ではありません。計画を立てること(planning)を意味する、第二次世界大戦期の数理計画分野の用語です。

つまり線形計画法とは、「線形な式で表された計画問題を解く方法」のことです。本講座でも Python による実装は第 6 章に登場しますが、それは線形計画法の本質ではなく、計算を補助する道具にすぎません。

理解チェック 1 — 目的関数と制約を数で確かめる

利益式と制約式は、どちらも「数字を入れれば値が出る式」です。

Q1. 計画 (x, y) = (2, 3) のとき、利益 z = 3x + 5y を求めてください。

万円

Q2. 製品 B だけを 8 ロット作るとします。仕上工程の使用時間 x + 2y は、上限 14 時間を何時間超えるでしょうか。

時間

最適化問題は 3 つに分ける

どんな LP でも、最初に分けるべき要素は 3 つだけです。

観点この例での意味
意思決定変数x = A を何ロット作るか、y = B を何ロット作るか
目的関数3x + 5y を最大化したい
制約2x + y ≤ 16x + 2y ≤ 14x ≥ 0y ≥ 0

式が増えても、この 3 つに分けて読めれば混乱しにくくなります。

なぜ「線形」なのか

線形とは、係数が固定で、量を 2 倍にすると利益や使用資源も 2 倍になる関係です。

  • 3x + 5y は線形
  • 2x + y ≤ 16 も線形
  • xy が入ると非線形

理解チェック 2 — 制約の左辺と線形の感覚

制約の左辺は「その計画が実際に使う量」、目的関数の係数は「1 ロット増やしたときの効果」です。

Q1. 計画 (x, y) = (3, 4) のとき、切断工程の使用時間 2x + y は何時間でしょうか。

時間

Q2. 利益式が 3x + 5y のとき、y を固定したまま x を 2 ロット増やすと、利益は何万円増えるでしょうか。

万円

第 1 章のまとめ

  • 最適化問題は、意思決定変数・目的関数・制約の 3 つに分ける。
  • 制約式の左辺は、その計画が消費する資源量そのもの。
  • 線形とは、増やした量に比例して利益や消費量も増えること。