最適化一口話

仕事として数理最適化を実践している立場から、その中身や可能性について概説しております。

「習うより慣れろ」で始める数理最適化:「生産計画」の例題 (2)

前回は Excel による集計表をベースに数理最適化のモデルを記述して、

f:id:optimizationTanabe:20161003092234p:plain

という表を得るところまで進みました。 丸で囲った「生産量」のところの数字が数理最適化の答です。 タイトル通り、面倒な解説は抜きで、どんどん数字を変えて数理最適化の応答を見てみましょう。 製品 A,B に対して同じ利益というのも面白くないので、適当に A は B の 2 倍の利益という設定にしてみます。

f:id:optimizationTanabe:20161003011121p:plain

利益は 80 とぴったりですが、 製品 A,B の生産量はなんだか微妙な数の答が出てきました。 在庫残りも絶妙(?)に調整されている風な値です。 製品Aの生産量、どうにも半端な 34.7 を 30 に切り捨ててみましょう。

f:id:optimizationTanabe:20161003011153p:plain

利益は減るところからみて、たぶん先ほどのは最適解だろうとは思うのですが、試みに製品Aの生産量を30のまま、残り原料在庫で製品Bを作れるだけ作ることにするとどうでしょう。 原料 q に着目すると (320-8×30)/4 = 20 だけ作れます。書き込んでみましょう。

f:id:optimizationTanabe:20161003011350p:plain

おっと、数理最適化の出した「最適解」と同じ利益 80 の解がもう一つ作れてしまいました! 実はこの場合、製品 A,B が原料 q を使う比率(8:4=2:1)と利益の比率(2:1)が一致しているので、一旦利益 80 の答を得てしまえば、原料 q を使い切るように比率を保ったままA,B の生産量を操作すれば、「最適解」が量産できてしまいます。 製品 A だけ作って原料 q を使い切る答もありそうです。320 / 8 = 40 作ればよいわけです。入れて確かめてみましょう。

f:id:optimizationTanabe:20161003011501p:plain

これでも利益 80 が得られます。 一般に数理最適化ソルバーが「最適解」だと言って答を返してきたからといって同等に良い答が他に存在しない訳ではないことにどうかご注意ください。言えているのはこれ以上良い答が存在しないことのみで、同等の答がこうして沢山あるのは実務的な数理最適化モデルを試行錯誤しているときには決して珍しいことではありません。

このような場合には「最適」の定義を見直してみましょう。上で示した3通りの答の原料の残り方を見てみます。最初に数理最適化が出した答 (製品A,製品B) = (34.7,10.7)だと

f:id:optimizationTanabe:20161003011559p:plain

(製品A,製品B) = (30,20)だと

f:id:optimizationTanabe:20161003011612p:plain

(製品A,製品B) = (40,0)だと

f:id:optimizationTanabe:20161003011624p:plain

実現されている利益は同じ 80 でも、こうして残り在庫を見ると決して等価な答とは言えません。「最適」の尺度が「利益」だけ、と単細胞なのでその実現方法は沢山あり、その結果として多くの「最適解」が出現してきてしまったのだとも言えます。そもそも残せばよい原料の在庫は数理最適化が「全自動」で決めるべきものではありません。今後の需要予測に基いて人間が行うものであり、数理最適化は人間のポリシーに従って実現値を導く役回り(意思決定の補佐)を振られるのが一般的です。試しに利益を固定して、原料r の在庫残りが 25 になるようにしてみましょう。実験は数理モデルを若干改修すればよいので実に手軽(数式表現が気になる方へ: 利益を 80 に固定し、原料rの在庫残りと 25 の差の絶対値を目的関数にします)。

f:id:optimizationTanabe:20161003092317p:plain

丁度合わせてきました。では、在庫残り 30 ではどうか?

f:id:optimizationTanabe:20161003092335p:plain

これでもぴったり合わせて来ます。 こうしてモデルが出す便宜上の「最適解」を見ながら、人間が対話的に条件を設定して結果を絞り込むのが数理最適化の実践的な使い方です。あれ、と思ったら人間が結果を打ち込むこともできる。これはまさに Excel の使いどころではないでしょうか。

次回はこの表の構造は同じまま数を拡張して別の問題にしてみましょう。