数理最適化(モデリング言語とソルバー)
組み合わせ問題を深堀していく前に、モデリング言語とソルバーというものについてまとめてみます。
(勉強していたらこの言葉が出てきたので、何だろうと思い調べました)
モデリング言語
数理最適化問題を「人が書きやすく・わかりやすい」形式で表現するための言語です。
モデリング言語の種類
モデリング言語の種類もいくつかあります。
・AMPL
・PuLP
・PICOS
・Pyomo
・CVXOPT
・JuMP
などなど。
モデリング言語の違い
何が違うんだろうと調べてみると、「対応プログラミング言語」「構文の書き方」「扱えるソルバー」が違いました。
なので、解きたい問題と使用するプログラミング言語、使いやすさによって選ぶのだろうと思います。
最もよく使われていそうなのが、AMPLとPuLPです。
この2つは使用例が多くあります。
ソルバー
最適化問題の解を求めるためのアルゴリズムが搭載されたソフトウェアです。
ソルバーの種類
こちらも多くの種類があります。
・GLPK
・CBC
・SCIP
・CPLEX
・MOSEK
・GUROBI
・CVXOPT
などなど。
サポートしている最適化問題
ソルバーごとにサポートしている最適化問題が異なりました。
サポートしている問題をざっくりとまとめてみました。
(ざっと確認したものなので違っているかもしれません)
ソルバーの違い
同じ最適化問題を解くことのできるソルバーがありますが、以下のような違いがあります。
・問題を解くアルゴリズム
・処理速度
・カスタマイズ性
・ライセンス
・サポートしているプログラミング言語
業務で使用する場合、ライセンスは重要です。
フリーで商用利用可能なものは、「GLPK」「CBC」「CVXOPT」です。
モデリング言語とソルバーの関係
モデリング言語で最適化問題を表現し、ソルバーでその問題を解決するという流れです。
問題解決の流れ
数理最適化による問題解決は、以下のような流れになります。
これに近い図はいろいろなサイトに記載されていますが、「モデリング言語」と「ソルバー」を使って表現しました。
モデリング言語とソルバーとの対応
モデリング言語とソルバーの関係をまとめたものです。
(ざっと確認したものなので違っているかもしれません)
モデリング言語とソルバーの概要が理解できました。
まだ概要だけなので、実際にモデルを作りながら理解を深めていきたいと思います。