多目的最適化問題
多目的最適化問題の例として、以下の問題を考えてみましょう。
🔹ある工場で、製品 A と製品 B を生産することができます。
🔹製品 A の生産には 2 時間かかり、製品 B の生産には 3 時間かかります。
🔹工場は最大10時間稼働することができます。
🔹製品 A 1 個あたりの利益は 10 ドルで、製品 B 1 個あたりの利益は 15 ドルです。
🔹工場で作ることのできる製品の最大量は 50 個です。
利益を最大化するためには製品Aと製品Bをそれぞれ何個作成すればよいでしょうか。
解法・ソースコード
PuLPを使用して、この問題を解決していきます。
1 | from pulp import * |
①問題の定義
「Multiple Objectives Problem」という名前の最大化問題を作成するために、LpProblem()関数を使用します。
②変数の定義
変数AとBを作成し、LpVariable()関数を使用して上限値、下限値、および変数の種類(整数)を指定します。
③目的関数の定義
目的関数を定義するために、LpProblem()で作成した最大化問題である「prob」に、prob += を使用して目的関数を追加します。
「10 * A + 15 * B」という式を使用して、AとBの変数の重み付き合計を定義し、「Total Profit」という名前を付けます。
④制約条件の定義
制約条件を定義するために、LpProblem()で作成した最大化問題である「prob」に、prob += を使用して制約条件を追加します。
1つ目の制約条件では、「2 * A + 3 * B」が「10」以下である必要があります。
この制約条件の名前は「Time Limit」となっています。
2つ目の制約条件では、「A + B」が「50」以下である必要があります。
この制約条件の名前は「Production Limit」となっています。
⑤問題の解決
「prob」で定義された最大化問題を解くために、prob.solve()関数を使用します。
⑥結果の表示
最適解の結果を表示するために、value()関数を使用して、変数A、B、および目的関数の値を表示します。
実行結果は以下の通りです。
[実行結果]
A = 2.0 B = 2.0 Total Profit = 50.0
この結果から、最大化された製品 A は 2 個、製品 B は 2 個であり、それらの総利益は 50 ドルであることがわかります。