サブロウ丸

主にプログラミングと数学

【Python】pulp CBC並列処理・ソルバー選択

CBCソルバー(デフォルト)並列処理

python線形計画法ソルバーpulpを並列で計算する方法です。
例えば、4スレッドで実行するなら

import pulp
prob = pulp.LpProblem(sense=pulp.LpMinimize)
(省略)
prob.solve(pulp.PULP_CBC_CMD(threads=4))

と書きます。

PULP_CBC_CMDには他にもオプションを入れることができます。

PULP_CBC_CMD(path=None, keepFiles=0, mip=1, msg=0, cuts=None, presolve=None, dual=None, strong=None, options=[], fracGap=None, maxSeconds=None, threads=None)

CBCのdefaultでは
presolve = 1, cunts = 1, strong=5となっています。

なお, msg = 1 とすれば実行途中のログを出力できます。
f:id:inarizuuuushi:20171028203726p:plain


ソルバー選択

問題を解く際に他のソルバーを使用することもできます。

prob.solve(pulp.GUROBI()) # 例えばGUROBI

使用できるソルバー

pulp.pulpTestAll()

で確認できます。

f:id:inarizuuuushi:20171028202503p:plain

より詳しく知りたい場合はpulpの公式ドキュメンテーションをどうぞ。

pulp.solvers Interface to Solvers — PuLP 1.6.0 documentation