最適化ソフトウェアの比較

最適化ソフトウェアの比較（さいてきかソフトウェアのひかく）では、数理最適化で用いられているソフトウェアについての説明を行う。
あるシステムが、入力の集合を出力値へと変換する場合、そのシステムは関数 f によって記述される。最適化とは、許容される入力値の集合から規則的に値を選択し、関数の値を計算し、その過程で得られた最良値を記録することによって、利用可能な選択肢の中から最適な解を生成・選択するプロセスを指す。この一般的な枠組みは、多くの実世界の問題や理論的な問題をモデル化するのに適用することができる。具体例として、入力がモーターの設計パラメータで、出力が消費電力である。また、入力がビジネス上での選択で、出力がそれらによって得られる利益である。あるいは、入力が物理システムの構成を表し、出力がそのエネルギーが挙げられる。
最適化問題は以下のように表現される。
入力: ある集合 A から実数 R の関数 f:A \to R
求めるもの: 任意の x \in A に対して f(x0)≤f(x) を満たすA の要素 x0（最小化問題）
通常、集合 A はユークリッド空間 Rn の部分集合として定義され、A の要素は等式や不等式で記されている制約を満たさなければならない。最大化問題は、関数に −1 を乗ずることで最小化問題として扱うことができる。
最適化ソフトウェアを利用するには、関数 f を適切なプログラミング言語で定義し、最適化ソフトウェアと連携させる必要がある。最適化ソフトウェアは集合 A の入力値を提供し、関数 f を実装するソフトウェアモジュールが f(x) の計算結果を返す。このように設計することで、ある関数 f に対して複数の最適化ソフトウェアを用いて実行を行ったり、最適化ソフトウェアに対して様々な関数 f に適用といった柔軟な使用用途を達成することができる。
以下の表は、いくつかの特定用途・汎用最適化ソフトウェアライブラリを比較したものである。
| 名称 | プログラミング言語 | 最新版 | 商用/非商用 フリー | 専用ソフトウェアでの使用 | ライセンス | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| ALGLIB | C++, C#, Python, FreePascal | 3.19.0 / 2022年6月 | Yes | Yes | デュアル (商用, GPL) | 汎用ライブラリとして、線形、二次、非線形計画に対する最適化パッケージが実装されている。 |
| AMPL（英語版） | C, C++, C#, Python, Java, Matlab, R | 2018年10月 | Yes | Yes | デュアル (商用, アカデミック) | 線形、混合整数、非線形最適化に対する代数的モデリング言語である。学生およびAMPLコースバージョンのみ無償使用可能。 |
| APMonitor（英語版） | Fortran, C++, Python, Matlab, Julia | 0.6.2 / 2016年3月 | Yes | Yes | デュアル (商用, アカデミック) | 混合整数および非線形最適化問題に対する微分代数方程式モデリング言語。Matlab、Python、およびJuliaにて無料で利用可能。 |
| Artelys Knitro（英語版） | C, C++, C#, Python, Java, Julia, Matlab, R | 11.1 / 2018年11月 | No | Yes | 商用, アカデミック, 試用 | 汎用ライブラリとしては、非線形最適化に特化している。混合整数非線形計画問題 (MINLP) 、および均衡制約付き数理計画問題（MPEC）を扱うことができる。非線形最小二乗法に特化したアルゴリズムが実装されている。 |
| CPLEX（英語版） | C, C++, Java, C#, Python, R | 20.1 / 2020年12月 | Yes | Yes | 商用, アカデミック, 試用 | IBM CPLEX Optimization Studioは モデリング言語（OPL）、統合開発環境を備えた最適化エンジン（数理最適化用のCPLEX、および制約プログラミング用のCP Optimizer）である。 |
| FICO Xpress（英語版） | Mosel, BCL, C, C++, Java, R, Python, Matlab, .Net, VB6 | 8.13 / 2021年11月 | Yes | Yes | 商用, アカデミック, コミュニティ, 試用 | 最適化技術とソリューションを提供している。ソルバーはLP（単体法 & 障壁関数法）, MIP, MIQP, MIQCQP, MISOCP, MINLP QP, QCQP, SOCP, NLP（SLP & 内点法）を対応している。代数モデリングおよび手続き型プログラミング言語;統合型開発環境;各種実行サービスのサポート; 最適化モデルやサービスをソフトウェアソリューションとしてパッケージ化するためのサポートが組み込まれている。 |
| Gekko（英語版） | Python | 0.2.8 / 2020年8月 | Yes | Yes | デュアル (商用, アカデミック) | GEKKOは機械学習、混合整数、微分代数方程式に特化したPythonパッケージであり、線形・二次・非線形・混合整数計画問題 (LP, QP, NLP, MILP, MINLP) に対応した大規模ソルバーである。オペレーションモードには、パラメーター回帰・データ調整・リアルタイム最適化・動的シミュレーション・非線形予測制御が組み込まれている。 |
| GNU Linear Programming Kit（英語版） | C | 4.52 / 2013年7月 | Yes | No | GPL | 線形計画問題（LP）および混合整数計画問題（MIP）に対する無償ライブラリ。 |
| GNU Scientific Library | C | 1.16 / 2013年7月 | Yes | No | GPL | GNUプロジェクトにより提供されている無償ライブラリ。 |
| IMSL Numerical Libraries（英語版） | C, Java, C#, Fortran, Python | many components | No | Yes | プロプライエタリ |  |
| LIONsolver（英語版） | C++, Java | 2.0.198 / 2011年10月 | Yes | Yes | プロプライエタリ | RSO要綱によると、双方向・学習型最適化に対応。 |
| Math Kernel Library (MKL) | C++, Fortran | 11.1 / 2013年10月 | No | Yes | プロプライエタリ | Intelにより提供される数値計算ライブラリ。線形代数に特化したMKLは 最適化問題に関連した機能も使用できる。 |

| Wolfram Mathematica | C++, Wolfram Language | 14.2.0   | No | Yes | プロプライエタリ | 制約付き非線形最適化、内点法、凸最適化、整数計画問題および一般的な計算機能を統合した独自の数式処理システム。 |

| MIDACO（英語版） | C++, C#, Python, Matlab, Octave, Fortran, R, Java, Excel, VBA, Julia | 6.0 / 2018年3月 | Yes | Yes | デュアル (商用, アカデミック) | 単一目的・多目的目的最適化に対する軽量型ソフトウェア。混合整数非線形計画問題（MINLP）および並列処理に対応している。 |

| NAG数値計算ライブラリ | C, Fortran | Mark 26 / 2017年10月 | No | Yes | プロプライエタリ |  |
| NMath（英語版） | C# | 5.3 / 2013年5月 | No | Yes | プロプライエタリ | C#のMKL上で構築された数値計算ライブラリである。 |
| Octeract Engine（英語版） | C++/Python | 0.11.29 / 2019年11月 | No | Yes | 商用 | 一般のMINLPに対応した決定論的大域的最適化ソルバーである。Octeract Engineでは数値計算の分散処理にMPIを使用している。 |
| OptaPlanner | Java | 8.0.0.Final / 2020年11月 | Yes | Yes | ASL (オープンソース) | Javaの軽量型最適化ソルバー。JPA-Hibernate、Quarkus、Spring、Jackson、JAXBetcといった統合型モジュールが提供されており、KotlinやScala上で動く。 |
| SciPy | Python | 0.13.1 / 2013年11月 | Yes | Yes | BSD | Pythonの汎用数値解析ソフトウェア・ライブラリである。 |