SCIPをPythonから呼ぶ方法(PySCIPOpt)
SCIPはオープンソースになって使う人が増えそうだ.みんなPuLP (かそのラッパのmypulp)から呼び出して使うと思うが,PuLPはmpsファイルを吐いて,それを読ませているだけなので時間がかかるし,時間制約をつけると何も返さないというバグもある.
実は,SCIP専用のPythonパッケージが開発されている.
あまり知られていないが,オンメモリで呼び出しをして,時間制限もちゃんとできる.問題はマニュアルがあまり整備されていないことだ.
どこにも書いていないが,時間制限をつけるのは,以下のようにする.
model.setParam('limits/time', 10)
また,Jupyterで途中経過を表示するには,以下のようにする.
model.redirectOutput()
文法もGurobi (mypulp) とちょっと違う.オリジナリティを出したいのだと思うが,使いにくい.たしかに,Gurubiの文法はPythonに詳しい人には違和感がある(Javaと混ざっているから).
Gurobiと同じ文法で基本的な部分だけでも動くようなラッパを長年の友人でもある開発者にお願いしているので,完成したら披露しようと思っています.(でも,必要なら自分で書いた方が早いかもしれない.学生さんの課題としても面白いと思うので,誰かやってください.)