※記事内に商品プロモーションを含むことがあります。
はじめに
Pythonの最適化モデリングツールPyomoで、混合整数非線形最適化 (MINLP) ソルバSCIPを利用する方法をまとめました。
SCIPはZuse Institute Berlin (ZIB)が開発しているソルバです。バージョン8.0.3からApache 2.0ライセンスになりました。
検証環境は以下の通りです。
バージョン | |
---|---|
Windows 10 Home | 22H2 |
Python | 3.9.7 |
Pyomo | 6.4.1 |
SCIP | 8.0.3 |
SCIPのインストール
まず、SCIPのインストーラを公式サイトからダウンロードします。Versionを"8.0.3", OSを"Windows"とすると、SCIPOptSuite-8.0.3-win64-VS15.exe
のリンクが表示されるのでダウンロードします。
ダウンロード後、SCIPOptSuite-8.0.3-win64-VS15.exe
を開いてSCIPをインストールします。インストール時にSCIPをパスに追加するか聞かれるので、追加します(コントロールパネルで後から追加することも可能です)。その他のインストールオプションはデフォルトのままで問題ないと思います。
なお、SCIPをインストールできない場合、以下のような対処方法があります。
scip.exe
を実行ディレクトリに置く。- または
import sys; sys.path.append(<scip.exeのフォルダ>)
でscip.exe
のパスを通す。
PyomoからSCIPを呼び出す
PyomoからSCIPを呼び出すには、ソルバにscip.exe
を指定します。ソースコードのサンプルを以下に示します。
|
|
ただし、PyomoからSCIPのオプションを上手く設定できないようです。以下の通りdisplay/verblevel
オプションを変更してログ表示の変更を試みましたが、表示に変化はありませんでした。オプションを設定するにはscip.set
というファイルを配置します(後述)。
|
|
|
|
scip.setによるオプション指定
(2023年6月3日追記)
SCIPのログを読むと、以下のメッセージが出力されていました。
user parameter file <scip.set> not found - using default parameters
そこでカレントディレクトリにscip.set
というファイルを作り、その中で以下のようにオプションを記述すると、Pyomoの最適化計算に反映できました。
display/verblevel = 0
指定可能なオプションは以下のページを参考にしてください。
SCIP Doxygen Documentation - List of all SCIP parameters