プロセス最適化問題
【問題】
ある化学工場では、原料 A, B, C, D を混合して製品を作成するプロセスがあります。
原料の価格は以下の通りです。
🔹A: 30 円/kg
🔹B: 20 円/kg
🔹C: 10 円/kg
🔹D: 5 円/kg
製品の販売価格は 50 円/単位です。また、原料の供給量は以下の通りです。
🔹A: 200 kg
🔹B: 150 kg
🔹C: 100 kg
🔹D: 50 kg
各原料を最大限に使用することで得られる利益を求めてください。
解法
この問題は線形計画法を用いて解くことができます。以下は、pulpを用いた解法です。
1 | from pulp import * |
①問題の定義
PuLP を使う場合、まず LpProblem オブジェクトを作成します。
第一引数に問題の名前、第二引数に最適化の種類を指定します。
この場合は最大化問題なので LpMaximize を指定しています。
②変数の定義
最適化する変数を定義します。
ここでは、原料 A, B, C, D の使用量をそれぞれ LpVariable オブジェクトとして定義しています。
第一引数に変数名を指定し、lowBound、upBound 引数で変数の下限値、上限値を指定します。
cat 引数では変数の種類を指定します。ここでは連続変数として定義しています。
③目的関数の定義
最大化したい目的関数を定義します。
ここでは、総原価が最小となるようにするため、原料 A, B, C, D の使用量をそれぞれ掛け合わせ、総原価を計算しています。
④制約条件の定義
最適化の制約条件を定義します。
ここでは、使用する原料の量がそれぞれの上限値を超えないようにするため、制約条件を設けています。
⑤問題の解決
PuLP を使って問題を解くには、solve() メソッドを呼び出します。
⑥結果の出力
最後に、value() 関数を使って、各変数の最適解を取得し、出力しています
このコードを実行すると、以下のような結果が得られます。
[実行結果]
最大利益: 13750.0 原料 A: 150.0 原料 B: 150.0 原料 C: 100.0 原料 D: 50.0
各原料を最大限に使用することで、最大利益 13,750 円を得られるということが確認できました。