経済最適化問題 PuLP

経済最適化問題

あなたは、小売店を経営しています。

あなたの店には、リンゴ、バナナ、オレンジといった果物があります。

あなたは、これらの果物を卸売業者から購入し、顧客に販売します。

各果物の単価、在庫、需要量は以下の通りです。

  • リンゴ:単価100円、在庫200個、需要量100個
  • バナナ:単価80円、在庫150個、需要量50個
  • オレンジ:単価120円、在庫100個、需要量75個

最大の利益を得るためには、どの果物を何個購入し販売すべきでしょうか。

解き方・ソースコード

3種類の果物(リンゴ、バナナ、オレンジ)の購入・販売数を最適化する方法を考えます。

目的は、最大利益を得ることであり、利益は各果物の単価と数量の積の総和となります。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from pulp import *

# ①各果物の単価、在庫、需要量を設定
prices = {"apple": 100, "banana": 80, "orange": 120}
inventory = {"apple": 200, "banana": 150, "orange": 100}
demand = {"apple": 100, "banana": 50, "orange": 75}

# ②変数
apple_qty = LpVariable("apple_qty", lowBound=0, cat='Integer')
banana_qty = LpVariable("banana_qty", lowBound=0, cat='Integer')
orange_qty = LpVariable("orange_qty", lowBound=0, cat='Integer')

# ③問題の定義
prob = LpProblem("Fruit Buying Problem", LpMaximize)

# ④目的関数
prob += prices["apple"] * apple_qty + prices["banana"] * banana_qty + prices["orange"] * orange_qty

# ⑤制約条件
prob += apple_qty <= inventory["apple"]
prob += banana_qty <= inventory["banana"]
prob += orange_qty <= inventory["orange"]
prob += apple_qty + banana_qty + orange_qty >= demand["apple"] + demand["banana"] + demand["orange"]
prob += apple_qty >= demand["apple"]
prob += banana_qty >= demand["banana"]
prob += orange_qty >= demand["orange"]

# ⑥最適化の実行
prob.solve()

# ⑦結果の表示
print("Apple quantity: ", apple_qty.value())
print("Banana quantity: ", banana_qty.value())
print("Orange quantity: ", orange_qty.value())
print("Maximum profit: ", value(prob.objective))

①まず、各果物の単価、在庫、需要量を辞書型データで設定します。

これらの情報は、問題を解決するための制約条件として使用されます。

例えば、リンゴの在庫量は200であり、需要量は100であることが設定されています。


②次に、PuLPを使用して変数を作成します。

LpVariableを使用して、リンゴ、バナナ、オレンジの数量を表す3つの変数を作成しています。

これらの変数は、それぞれapple_qty、banana_qty、orange_qtyという名前で定義され、lowBoundパラメータを使用して0以上の整数値であることが保証されています。


③PuLPを使用して問題を定義します。

LpProblemを使用して、問題のタイトル(Fruit Buying Problem)と目的(最大化)を指定します。

④目的関数は、各果物の数量と単価の積の総和であり、prob += prices[“apple”] * apple_qtyという形式で追加されます。

⑤リンゴ、バナナ、オレンジの数量に関する制約条件を追加します。

例えば、リンゴの在庫量は apple_qty <= inventory[“apple”] の制約条件で表されます。

その他の制約条件には、需要量の制約や、リンゴ、バナナ、オレンジの数量を合計した値の制約が含まれます。


⑥PuLPを使用して問題を解きます。

⑦各果物の数量と最大利益を表示しています。

[実行結果]

Apple quantity:  200.0

Banana quantity:  150.0

Orange quantity:  100.0

Maximum profit:  44000.0

この結果から、リンゴ200個、バナナ150個、オレンジ100個を購入し、最大利益は44,000円であることがわかります。