※記事内に商品プロモーションを含むことがあります。
はじめに
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