ExcelとPythonのソルバーを使っての線形最適化問題演習ー2

日花弘子著『仕事に役立つExcelビジネスデータ分析』(SB Creative)に載っている問題を参考に、
ExcelとPythonのソルバーを使って問題を解いてみる。


(問題)
製品A、製品B という製品が2つある

製品A を1つ 1000円で、5個以上 購入する
製品B を1つ  500円で、5個以上 購入する
購入金額は 10,000円 以内にしたい

製品Aと製品B の購入数合計を最大にするには、それぞれ何個づつ購入すればよいか?
またそのときの支払い金額はいくらになるか?

まず、Excel のソルバーで解く
問題を表にまとめると以下のようになる


各セルに設定された式を表示


ソルバーを使えるようにする。(「ファイル」-「オプション」-「アドオン」-「ソルバーアドオン」をアクティブにする)
「データ」-「ソルバー」をクリックして、下記のように設定する


上記のように設定後、「解決」をクリックする


(解)
   製品A 5個、 製品B 10個、 合わせて 15個 購入して、支払い金額は 10,000円となる

次に、Python のソルバーで解を求める
ソルバーを使えるモジュール Pulp をインポートする(まだのときは、pip install pulp でインストールする)
jupyter notebook 上で作成する


# Python上で数理最適化問題を簡単にコーディングできるモデリングAPI、モデリング言語 pulp をインポート
import pulp

lp = pulp.LpProblem('lp-test2', pulp.LpMaximize)

#  求める購入数の設定(製品Aの購入数 xA,、製品Bの購入数 xB)

#      xA >= 5, xB >= 5
xA = pulp.LpVariable('xA', 5)
xB = pulp.LpVariable('xB', 5)

#   評価関数の設定
lp += xA + xB 

#   制約条件の設定

lp += 1000 * xA + 500 * xB <= 10000

#   最適化問題の確認
print(lp)

#   求解
lp.solve()

#   結果
print('製品Aの購入数:%d 個' % xA.value())
print('製品Bの購入数:%d 個' % xB.value())
print('購入数合計:%d 個' % (xA.value() + xB.value()))
print('')
print('支払い金額:{:,.0f} 円'.format(1000 * xA.value() + 500 * xB.value()))

「Shift」+「Enter」で実行すると


lp-test2:
MAXIMIZE
1*xA + 1*xB + 0
SUBJECT TO
_C1: 1000 xA + 500 xB <= 10000

VARIABLES
5 <= xA Continuous
5 <= xB Continuous

製品Aの購入数:5 個
製品Bの購入数:10 個
購入数合計:15 個

支払い金額:10,000 円

となり、Excelのソルバーと同じ結果を得る

コメントを残す

メールアドレスが公開されることはありません。