マーケティング最適化問題 PuLP

マーケティング最適化問題

簡単なマーケティング最適化問題を考えます。

この問題では、広告費用を最小限に抑えつつ、与えられた広告予算内で最大の利益を得るために、どの製品にどの程度の広告予算を割り当てるかを決定する必要があります。

例:

ある企業が3つの製品を販売しています。

各製品には、それぞれ異なる利益と広告費用があります。

企業は、合計で10,000ドルの広告予算を持っています。

どの製品にどの程度の広告予算を割り当てるべきかを決定して、利益を最大化する必要があります。

各製品の利益広告費用は以下のとおりです。

製品利益広告費用
A3002000
B2001500
C1501000

解き方・ソースコード

この問題をPuLPを使って解決するには、以下のようなスソースコードになります。

[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
import pulp

# ①問題を初期化
problem = pulp.LpProblem("マーケティング最適化問題", pulp.LpMaximize)

# ②変数を定義
a = pulp.LpVariable("Aの広告費用", lowBound=0)
b = pulp.LpVariable("Bの広告費用", lowBound=0)
c = pulp.LpVariable("Cの広告費用", lowBound=0)

# ③目的関数を定義
problem += 300*a + 200*b + 150*c, "利益の合計"

# ④制約条件を定義
problem += a + b + c <= 10000, "広告予算の合計"
problem += a <= 2000, "Aの広告費用の上限"
problem += b <= 1500, "Bの広告費用の上限"
problem += c <= 1000, "Cの広告費用の上限"

# ⑤問題を解く
status = problem.solve()

# ⑥結果を出力
print(f"ステータス: {pulp.LpStatus[status]}")
print(f"最大利益: {problem.objective.value()}")
print(f"Aの広告費用: {a.value()}")
print(f"Bの広告費用: {b.value()}")
print(f"Cの広告費用: {c.value()}")

①問題を初期化

pulp.LpProblemを使って問題の名前を指定し、最大化問題であることを指定します。

②変数を定義

pulp.LpVariableを使って各製品の広告費用を表す変数a、b、cを定義します。

また、lowBound引数を使って変数の下限を0に設定します。

③目的関数を定義

各製品の利益を表す定数と広告費用を表す変数をかけた値を足し合わせて、最大化したい利益の合計を定義します。

④制約条件を定義

各制約条件を表す不等式をproblem +=で連結していきます。

制約条件は、広告予算の合計が10000ドル以下、各製品の広告費用が上限に収まることです。

⑤問題解決

problem.solve()を使って問題を解きます。

⑥結果出力

解のステータスや各製品の広告費用最大利益を出力します。

pulp.LpStatus[status]を使って、解のステータスをテキストで表示します。

また、各変数の値はvalue()を使って取得できます。

最大利益はproblem.objective.value()で取得できます。

[実行結果]

ステータス: Optimal

最大利益: 1050000.0

Aの広告費用: 2000.0

Bの広告費用: 1500.0

Cの広告費用: 1000.0

この結果から、最大利益は1050000ドルであり、A製品には広告費用2000ドル、B製品には広告費用1500ドル、C製品には広告費用1000ドルを割り当てることが最適であることがわかります。

また、制約条件がすべて満たされていることも確認できます。