見出し画像

数理最適化ツール比較

色々な手法があるので、全ての場合に万能なツールがある訳ではなく。
色々とメリットとデメリットを記録してみる。
自分が見つけた順番で列挙していくだけで、順番に深い意味は無い。

○Excel

概要:ソルバーを使う。
メリット:
 ・意外と使える。プロトタイプで試すのには十分。
 ・現場でも使えるので、運用時のハードルが低い。
 ・小規模問題の場合は、組むのが容易。
 ・線形問題、非線形問題も計算出来る。
 ・最大最小値を求めるだけではなく一定の値に近づけば停止させられる。
 ・整数型、Differential(全ての値が異なる)、Binary(0か1)を選べる。

デメリット:
 ・変数が300以下なので、時系列分析はほぼ不可能。
 ・非線形問題を解く場合、どれだけ時間がかかるのか保証が無い。

○SWI-Prolog

概要  :論理制約プログラミングを使う。
メリット:
 ・CLPで連続値、FDで整数型の計算ができる。
 ・スケジューリング問題を記述できる。

デメリット:
 ・変数が256個以下。
 ・整数混在型最適化問題は解けない。
 ・計算速度は遅い。

○ Python PuLPなど

概要  :各種ソルバーを用途にあわせてインストール。
メリット:
 ・使用可能なパッケージが豊富。
 ・資料も豊富。
 ・GoogleのColaboが使える。
デメリット:
 ・変数の個数が増えると、コードの記述が面倒になる。
 (Pandasを使えば良いが、初学者には使いこなせない。
  つまりデバッグが大変。)

○Python NetworkX

概要  :NetworkXはグラフネットワークを計算できるパッケージである。
メリット:
 ・グラフネットワークで表現できる問題ならば簡単に記述できる。
  (条件が一致すれば最強)
 ・変数は2,000個程度まで使える。
 ・GoogleのColaboが使える。
デメリット:
 ・NetworkXでは整数型が使えない。
 ・会社によってはプロキシー設定が強く、pipが通らない。
  (簡単にインストールできないので、現場での運用は難しい)

○SageMath

概要  : Pythonベースの数値計算用アプリ。
メリット:
 ・ Pythonのパッケージよりもコード記述が短く済む。
 ・インストールがプロキシーの影響を受けない。
 ・JupiterNotebookを使える。
 ・ローカルで動く Pythonを使える。(プロキシーのpipは通せない)
デメリット:
 ・整数混在型最適化問題を記述できるかどうか怪しい。
 (詳細は未確認)
 ・市販解説資料は無い。

○AMPL

概要  :オペレーションズ・リサーチ専用の言語。
メリット:
 ・無料で使えるStudioがあった。(現在はどうか?)
 ・慣れると書きやすい。
デメリット:
 ・使えるソルバーが少ない。
 ・文法に癖が強い。
 ・無料は変数が256個まで。
 ・他に便利な処理系が揃ってきたので、使う価値はあるのか?

○Mathematica

概要  :Verも進んで、条件さえ合えばクラウドで無料で使える。
     ラズベリーパイを買えば、無料で使用可能!
メリット:
 ・非常に短い。
 ・変数の個数に制限が無い。
 ・ドキュメントは純正が充実。
デメリット:
 ・ブラウザでの動作ではコードが長いとコピペができなくなる。
 ・行列形式で整数型混在型最適化問題を記述できない(様である)。

○Julia

概要  :新興言語だが、そろそろ現実的に使える。
メリット:
 ・コードが短い。(特に制約文の中でsum関数が使える)
 ・高速。
 ・インストールが容易でPkgはプロキシーを通りやすい。
 (うちの環境ではIJuliaは通らなかった)
 ・解説書が増えてきた。
 ・整数混在型最適化問題を行列表現可能かどうか要確認。
 (行列表現以外では可能なことは確認)
デメリット;
 ・ Pythonに比べるとパッケージはこれから。

これは少し内容が古いので参考程度に。


最新情報はこの二冊。

この記事が気に入ったらサポートをしてみませんか?