生産最適化
ある工場で、3つの製品A,B,Cを生産することを考えます。
それぞれの製品は、以下のような生産時間、生産量制限、利益が決まっています。
製品 | 生産時間 | 生産量制限 | 利益(千円) |
---|---|---|---|
A | 2 | 2 | 5 |
B | 1 | 3 | 3 |
C | 3 | 1 | 7 |
その他の条件は以下の通りです。
🔹工場の生産時間は1日8時間まで。
🔹製品は最低1つ以上生産する必要がある。
これらの制約条件下で、利益を最大化するように各製品の生産量を決定してください。
解法・ソースコード
PuLPを用いた解法は以下の通りです。
1 | from pulp import * |
①問題の定義
問題のインスタンスを作成します。
この問題は、目的関数を最大化することを目的としています。
②変数の定義
LpVariable 関数を使用して、変数A、B、Cを定義しています。
これらは、それぞれ製品A、B、Cの生産量を表しています。これらの変数は、非負の整数値をとります。
③目的関数の定義
profit = 5A + 3B + 7*Cは、利益を表す目的関数を定義しています。
④制約条件の定義
制約条件を設定しています。
例えば、prob += A2 + B1 + C*3 <= 8は、1日あたり8時間までしか生産できないという制約を表しています。
prob += A <= 2、prob += B <= 3、prob += C <= 1は、それぞれ製品A、B、Cの生産量制限を表しています。
また、prob += A + B + C >= 1は、製品を最低1つ以上生産する必要があるという制約を表しています。
⑤最適化の実行
status = prob.solve()は、最適化を実行しています。
⑥結果の表示
print 関数を使用して、最適化の結果を表示しています。
LpStatus[status]は、最適化の状態を表します。
value(prob.objective)は、目的関数の最適値を表します。
A.varValue、B.varValue、C.varValueは、それぞれ製品A、B、Cの最適な生産量を表しています。
上記のコードを実行すると、以下のように最適解が得られます。
[実行結果]
Status: Optimal Optimal Solution: 21.0 Production of A: 1.0 Production of B: 3.0 Production of C: 1.0
製品Aを1個、製品Bを3個、製品Cを1個生産すれば、利益を最大化することができることがわかりました。
最大利益は21(千円)となります。