はじめに #
Pythonの最適化モデリングツールPyomoで利用できる無償の数理最適化ソルバと、その導入方法をまとめました。この記事では以下のソルバを扱います。
- 線形ソルバ
- CLP
- GLPK
- CBC
- 非線形ソルバ
- IPOPT
- Bonmin
- Couenne
検証環境は以下の通りです。
| バージョン | |
|---|---|
| Windows 10 Home | 21H1 |
| Python | 3.10.4 |
| Pyomo | 6.4.1 |
| CLP | 1.17.7 |
| GLPK | 5.0 |
| CBC | 不明 |
| IPOPT | 3.11.1 |
| Bonmin | 1.4.0 |
| Couenne | 0.3.2 |
Pyomoのインストール方法は以下の記事を参照ください。 Pyomoで線形計画問題を解く – Helve Tech Blog
以降では、OSに関して特に記述がない場合、Windows 10を対象としています。
ソルバの比較 #
| ソルバ | 対象の問題 | ライセンス |
|---|---|---|
| CLP | LP | EPLv2 |
| GLPK | LP, MILP | GPLv3 |
| CBC | LP, MILP | EPLv2 |
| IPOPT | NLP | EPLv2 |
| Bonmin | NLP, MINLP | EPLv1 |
| Couenne | NLP, MINLP | EPLv1 |
- LP: Linear Programming(線形計画問題)
- MILP: Mixed Integer Linear Programming(混合整数線形計画問題)
- NLP: Nonlinear Programming(非線形計画問題)
- MINLP: Mixed Integer Nonlinear Programming(混合整数非線形計画問題)
- GPL: GNU General Public License
- EPL: Eclipse Public License
ソルバの呼び出し方 #
Pyomoでソルバを使用する方法は以下の2つがあります。
- Pythonのライブラリとしてソルバをインストールする
- ソルバの実行ファイルにパスを通す
ライブラリとして使用する場合、以下のようにソルバを呼び出します。
import pyomo.environ as pyo
(中略)
pyo.SolverFactory('ipopt')
一方、実行ファイルとして使用する場合、以下のように.exeを付けます。
pyo.SolverFactory('ipopt.exe')
CLP #
LinuxまたはmacOSの場合、以下のコマンドでCondaからインストールできます(Windowsは不可)。
conda install -c conda-forge coin-or-clp
CLPの実行ファイルはGitHubからダウンロード可能です。 Releases · coin-or_Clp · GitHub
ここでは、Clp-releases.1.17.7-x86_64-w64-mingw64.zipをダウンロードします。zipファイルを解凍し、binフォルダにあるclp.exeを使用します。
GLPK #
Condaでインストールする場合、以下を実行します。
conda install -c conda-forge glpk
pipでインストールする場合、以下を実行します。
pip install glpk
また、GLPKの実行ファイルは以下からダウンロードできますが、Pyomoから上手く呼び出すことができませんでした。 GLPK for Windows download SourceForge.net
CBC #
LinuxまたはmacOSの場合、以下のコマンドでCondaからインストールできます(Windowsは不可)。
conda install -c conda-forge coin-or-cbc
また、LinuxまたはWindowsで、かつPythonのバージョンが2.7, 3.5~3.7の場合、以下のコマンドでpipからインストールできます。
pip install cbcpy
WindowsでPython 3.8以降の場合、実行ファイルを使用します。CBCの実行ファイルは以下からダウンロード可能です。 Index of _download_binary_Cbc
ここでは、2021-04-27 15:54に配布されたCbc-master-win64-msvc16-mt.zipをダウンロードします。zipファイルを解凍し、binフォルダにあるcbc.exeを使用します。
また、zipファイルの末尾にmdなどが付けられていますが、コンパイルのオプションを指すと思われます。オプションの意味は以下の通りです。
md: リリースバージョンの動的リンクライブラリmdd: デバッグバージョンの動的リンクライブラリmt: リリースバージョンの静的リンクライブラリmtd: デバッグバージョンの静的リンクライブラリ
動的リンクライブラリでは、ライブラリが*.dllとして付属しており、cbc.exeと同じフォルダに置く必要があります。一方、静的リンクライブラリでは、ライブラリが全てcbc.exeに納まっており、取り回しが楽です。mtを使用すればまず問題ないと思います。
IPOPT #
Condaでインストールする場合、以下を実行します。
conda install -c conda-forge ipopt
pipでインストールする場合、以下を実行します。
pip install ipopt
IPOPTの実行ファイルは以下からダウンロード可能です。 Index of _download_binary_Ipopt
ここでは、2013-06-15 08:42に配布されたIpopt-3.11.1-win64-intel13.1.zipをダウンロードします。zipファイルを解凍し、binフォルダにあるipopt.exeを使用します。
Bonmin #
LinuxまたはmacOSの場合、以下のコマンドでCondaからインストールできます(Windowsは不可)。
conda install -c conda-forge coinbonmin
Bonminの実行ファイルは以下からダウンロード可能です。 Index of _download_binary_Bonmin
ここでは、2011-09-19 17:39に配布されたBonmin-1.4.0-win32-msvc9.zipをダウンロードします。zipファイルを解凍し、binフォルダにあるbonmin.exeを使用します。
Couenne #
CouenneはPythonライブラリとして配布されていないようですので、実行ファイルを使用します。Couenneの実行ファイルは以下からダウンロード可能です。 Index of _download_binary_Couenne
ここでは、2011-09-19 20:34に配布されたCouenne-0.3.2-win32-msvc9.zipをダウンロードします。zipファイルを解凍し、binフォルダにあるcouenne.exeを使用します。