メインコンテンツへスキップ

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

·2127 文字·5 分
目次

はじめに
#

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

参考
#

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

関連記事

Pyomoモデルの変数・制約・目的関数の数を取得する
·884 文字·2 分
Pythonの最適化モデリングツールであるPyomoで、最適化モデルに定義された変数や制約、目的関数の数を取得するには、nvariables(), nconstraints(), nobjectives()メソッドを用います。
Pyomoモデルの変数・制約の情報を一括で取得する
··1454 文字·3 分
Pythonの最適化モデリングツールであるPyomoで、modelに定義された変数や制約の情報を一括して取得する方法をまとめました。Pyomoの変数や制約がベクトル化された状態でも対応できます。
Pyomoの制約をベクトル化する
·1271 文字·3 分
Pyomoで多変数の最適化を簡潔に記述するため、制約をベクトル化する方法をまとめました。
PyomoのImplicitly replacing the Component attribute警告について
·514 文字·2 分
Pythonの最適化モデリングツールPyomoでImplicitly replacing the Component attributeという警告が表示される場合、Pyomoのモデルに重複した変数名や制約名が定義されています。異なる変数名や制約名にすることで、警告が表示されなくなります。
Pyomoの変数をベクトル化する
·1409 文字·3 分
Pyomoで多変数の最適化を簡潔に記述するため、変数をベクトル化する方法をまとめた。
PyomoでGDP最適化問題を解く
·1602 文字·4 分
PyomoでGDP (Generalized Disjunctive Programming) と呼ばれる最適化問題を解いた。GDPは論理的な制約を持つ最適化問題である。