値引き最適化 PuLP

値引き最適化

値引き最適化問題とは、特定の制約条件下で最大の利益を得るための最適な値引き率を求める問題です。

ここでは、ある店が3つの商品を販売していて、それぞれの商品に対する最大の値引き率と、それぞれの商品がもたらす利益が異なるという状況を考えてみましょう。

まずは、必要なライブラリをインポートします。

1
2
3
from pulp import *
import matplotlib.pyplot as plt
import numpy as np

次に、問題を定義します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 問題の定義
prob = LpProblem("Discount Optimization", LpMaximize)

# 変数の定義
discounts = ['product_1', 'product_2', 'product_3']
discount_vars = LpVariable.dicts("Discount", discounts, 0, 1)

# 利益の定義
profits = {'product_1': 100, 'product_2': 200, 'product_3': 300}

# 目的関数の定義
prob += lpSum([profits[i]*discount_vars[i] for i in discounts])

# 制約条件の定義
prob += lpSum([discount_vars[i] for i in discounts]) <= 1.5, "Total Discount Constraint"

# 問題の解決
prob.solve()

最後に、結果を表示し、グラフ化します。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 結果の表示
for v in prob.variables():
print(v.name, "=", v.varValue)

# グラフ化
plt.figure(figsize=(8,6))
plt.bar(range(len(discounts)), [value(var) for var in prob.variables()])

plt.xticks(range(len(discounts)), [var.name for var in prob.variables()])
plt.xlabel('Products')
plt.ylabel('Discount Rate')
plt.title('Optimal Discount Rates for Products')
plt.show()

このコードは、3つの商品に対する最適な値引き率を求め、それを棒グラフで表示します。

制約条件は、全商品の値引き率の合計が1.5以下であることを指定しています。

また、目的関数は各商品の利益と値引き率の積の合計を最大化することを目指しています。

これにより、最大の利益を得るための最適な値引き率が求められます。

[実行結果]