JavaScriptを有効にしてください

Pyomoで利用できる無償の数理最適化ソルバ

 ·   6 min read

※記事内に商品プロモーションを含むことがあります。

はじめに

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のライブラリとしてソルバをインストールする
  • ソルバの実行ファイルにパスを通す

ライブラリとして使用する場合、以下のようにソルバを呼び出します。

1
2
3
import pyomo.environ as pyo
(中略)
pyo.SolverFactory('ipopt')

一方、実行ファイルとして使用する場合、以下のように.exeを付けます。

1
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を使用します。

参考

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索