# ⑥目的関数の定義 prob += lpSum([revenues[store][location] * store_vars[store][location] for store in stores for location in store_locations])
# ⑦制約条件の追加 # 各店舗は1つの場所に配置される for store in stores: prob += lpSum([store_vars[store][location] for location in store_locations]) == 1
# ⑧各場所には1つの店舗しか配置されない for location in store_locations: prob += lpSum([store_vars[store][location] for store in stores]) <= 1
# ⑨PuLPで最適化問題を解く prob.solve()
# ⑩結果の出力 print("Status:", LpStatus[prob.status]) print("Optimal Solution:") for store in stores: for location in store_locations: if store_vars[store][location].value() == 1: print(f"{store} is placed at {location}")
①問題の初期化
最適化問題を初期化します。
問題の名前を指定し、最大化問題として設定します。
②変数の定義
配置可能な場所のリストを定義します。
店舗のリストを定義します。
③各店舗の配置場所の収益データ
各店舗の配置場所ごとの収益データを辞書形式で定義します。
④各配置場所間の距離データ
各配置場所間の距離データを辞書形式で定義します。
⑤変数の作成
二値変数を作成し、店舗の配置場所を表現します。
⑥目的関数の定義
目的関数を定義します。
各店舗の配置場所ごとの収益と変数を掛け合わせ、総和を最大化するように設定します。
⑦制約条件の追加
各店舗は1つの場所に配置されるという制約条件を追加します。
⑧各場所には1つの店舗しか配置されない
各配置場所には1つの店舗しか配置されないという制約条件を追加します。
⑨PuLPで最適化問題を解く
PuLPを使って最適化問題を解きます。
⑩結果の出力
最適解を出力します。
各店舗がどの配置場所に配置されたかを表示します。
結果
コードを実行すると下記のような結果が表示されます。
[実行結果]
Status: Optimal
Optimal Solution:
Store1 is placed at Location3
Store2 is placed at Location2
Store3 is placed at Location1