ポイントオブセール最適化 PuLP

ポイントオブセール最適化

ポイントオブセール(POS)最適化問題は、商品の配置や在庫管理など、販売効率を最大化するための問題です。

ここでは、簡単な在庫管理問題を例に取り、PythonのPuLPライブラリを使用して解きます。

問題設定:
  • 商品A、B、Cがあり、それぞれの在庫数は最大10個とします。
  • 商品A、B、Cの利益はそれぞれ100円、200円、300円とします。
  • 予算は2000円とし、この予算内で最大の利益を得られるように在庫を管理します。

この問題をPuLPで解くコードは以下の通りです:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pulp import LpMaximize, LpProblem, LpStatus, lpSum, LpVariable

# 問題の定義
model = LpProblem(name="small-shop-problem", sense=LpMaximize)

# 変数の定義
x = {i: LpVariable(name=f"x{i}", lowBound=0, upBound=10, cat="Integer") for i in range(1, 4)}

# 利益の定義
profit = {1: 100, 2: 200, 3: 300}

# 目的関数
model += lpSum(profit[i] * x[i] for i in range(1, 4))

# 制約条件
model += (lpSum(x[i] for i in range(1, 4)) <= 2000, "budget_constraint")

# 問題の解
status = model.solve()

for var in x.values():
print(f"{var.name}: {var.value()}")

print(f"Optimal profit: {model.objective.value()}")

このコードは、在庫数と利益を最大化するための最適な商品の組み合わせを求めます。

[実行結果]
x1: 10.0
x2: 10.0
x3: 10.0
Optimal profit: 6000.0

グラフ化

次に、この問題の解をグラフ化します。

matplotlibを使用して、各商品の最適な在庫数を棒グラフで表示します:

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt

# 商品名
items = ['Item A', 'Item B', 'Item C']

# 最適な在庫数
optimal_values = [x[i].value() for i in range(1, 4)]

plt.bar(items, optimal_values)
plt.xlabel('Items')
plt.ylabel('Optimal Stock')
plt.title('Optimal Stock Level for Each Item')
plt.show()

このグラフは、各商品の最適な在庫数を視覚的に示しています。

[実行結果]