プログラム初心者がpythonを勉強する方法!その6・pulpでもう少し難しい線形計画法にトライしてみる!

スポンサーリンク
050-VBA

へっぽこヘタレシステム管理者の管理人です。

python勉強6日目です。

先日に引き続き・・・

pythonで線形計画法についてもう少し勉強します。

もうすでに訳が分かりません。

かなりしんどいですが・・・もう少しだけ頑張ってみようかと思います。

さて今回はpulpを使った線形計画でもう少し難しいことにトライしてみようかと思います。

スポンサーリンク

もう少し難しい線形計画法にトライ

もう少し難しい線形計画法にトライします。

配送コストを求める問題

店 a店 b店 c供給量
工場 x106168
工場 y88416
需要量1248

よくある最小のコストを求める問題です。

工場(x と y) の供給量と

さらに各店舗(a と b と c)の需要量と

各店舗に配送した場合のコストが定められています。

各工場から各店舗にそれぞれ何個配送すれば最も安価に配送できるかを求める問題です。

求める回答は次のとおりです

最小 = 10 * xa + 6 * xb + 16 * xc + 8 * ya + 8 * yb + 4 * yc

スポンサーリンク

制約条件は次のとおりです

xa + xb + xc = 8

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

ya + yb + yc =16

xa + ya = 12

xb + yb = 4

xc + yc = 8

となります。

とりあえず頑張ってコードを書いてみます。

#puloをインポート
import pulp

#問題を定義
problem = pulp.LpProblem('test',pulp.LpMinimize)

#変数を定義
xa = pulp.LpVariable('xa',lowBound=0,cat=pulp.LpInteger)
xb = pulp.LpVariable('xb',lowBound=0,cat=pulp.LpInteger)
xc = pulp.LpVariable('xc',lowBound=0,cat=pulp.LpInteger)
ya = pulp.LpVariable('ya',lowBound=0,cat=pulp.LpInteger)
yb = pulp.LpVariable('yb',lowBound=0,cat=pulp.LpInteger)
yc = pulp.LpVariable('yc',lowBound=0,cat=pulp.LpInteger)

#目的関数
problem += 10 * xa + 6 * xb + 16 * xc + 8 * ya + 8 * yb + 4 * yc

#制約を定義
problem += xa + xb + xc == 8
problem += ya + yb + yc == 16
problem += xa + ya == 12
problem += xb + yb == 4
problem += xc + yc == 8

print(problem)

#解く
status = problem.solve(pulp.PULP_CBC_CMD(msg=0))
#status = problem.solve() #pulp.PULP_CBC_CMD(msg=0)を記述しないとログが出る

#結果の出力
print('status', pulp.LpStatus[status])
print('xaの数 =', xa.value())
print('xbの数 =', xb.value())
print('ccの数 =', xc.value())
print('yaの数 =', ya.value())
print('ybの数 =', yb.value())
print('ycの数 =', yc.value())
print('最小のコスト =', problem.objective.value())
test:
MINIMIZE
10*xa + 6*xb + 16*xc + 8*ya + 8*yb + 4*yc + 0
SUBJECT TO
_C1: xa + xb + xc = 8

_C2: ya + yb + yc = 16

_C3: xa + ya = 12

_C4: xb + yb = 4

_C5: xc + yc = 8

VARIABLES
0 <= xa Integer
0 <= xb Integer
0 <= xc Integer
0 <= ya Integer
0 <= yb Integer
0 <= yc Integer

status Optimal
xaの数 = 4.0
xbの数 = 4.0
ccの数 = 0.0
yaの数 = 8.0
ybの数 = 0.0
ycの数 = 8.0
最小のコスト = 160.0

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

コメント

タイトルとURLをコピーしました