fmincon
制約付き線形最適化のためのMATLABの関数に代わるオープンソースの方法はありますか?Python / NumPy / SciPyを使用するようにMATLABプログラムを書き直していますが、これは私が同等のものを見つけられなかった唯一の関数です。NumPyベースのソリューションが理想的ですが、どの言語でもかまいません。
10 に答える
あなたの問題は凸ですか?線形?非線形?SciPy.optimize がおそらく仕事をすることに同意しますが、fmincon は最適化問題を解決するためのバズーカのようなものであり、以下のカテゴリの 1 つに限定できれば (解決の難易度が高くなるにつれて) より良い結果が得られます。効率的)
- 線形プログラム (LP)
- 二次計画法 (QP)
- 凸二次制約付き二次計画法 (QCQP)
- 二次円錐プログラム (SOCP)
- 半期プログラム (SDP)
- 非線形凸問題
- 非凸問題
Mixed-Integer Linear Programs (MILP) などの組み合わせ問題もありますが、完全性制約について言及していませんでした。それらは別のクラスの問題に分類されると言えば十分です。
CVXOpt パッケージは、問題が凸状である場合に非常に役立ちます。
問題が凸状でない場合は、ローカル ソリューションを見つけるか、グローバル ソリューションを見つけるかを選択する必要があります。多くの凸ソルバーは、非凸領域で「一種の」動作をします。グローバル ソリューションの適切な近似値を見つけるには、何らかの形式のシミュレーテッド アニーリングまたは遺伝的アルゴリズムが必要になります。グローバル ソリューションを見つけるには、すべてのローカル ソリューションの列挙、または分岐限定などの組み合わせ戦略が必要です。
Python 最適化ソフトウェア:
OpenOpt http://openopt.org (これはお望みの numpy ベースで、FuncDesigner による自動微分を備えています)
ピョモ https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
オープンソースの Python パッケージであるSciPyには、制約のある多変数問題のためのいくつかを含む、非常に大きな最適化ルーチンのセットがあります (これは fmincon が私が信じていることです)。SciPy をインストールしたら、Python コマンド プロンプトで次のように入力します。
ヘルプ (scipy.optimize)
結果として得られるドキュメントは広範であり、あなたに役立つと思われる次の内容が含まれています。
Constrained Optimizers (multivariate)
fmin_l_bfgs_b -- Zhu, Byrd, and Nocedal's L-BFGS-B constrained optimizer
(if you use this please quote their papers -- see help)
fmin_tnc -- Truncated Newton Code originally written by Stephen Nash and
adapted to C by Jean-Sebastien Roy.
fmin_cobyla -- Constrained Optimization BY Linear Approximation
GNU Octaveは、必要なものを備えている可能性があるもう 1 つの MATLAB クローンです。
MATLAB のクローンであるSciLabというプログラムがあります。
私はまったく使用していませんが、オープンソースであり、探している機能を備えている可能性があります。
そこにあるかどうかはわかりませんが、探しているものが含まれている可能性があるEnthoughtというpython ディストリビューションがあります。データ分析用に特別に設計されており、60 以上の追加ライブラリがあります。
http://www.aemdesign.com/downloadfsqp.htmをご覧ください。
そこには、 と同じ機能を提供する C コードがありますfmincon
。(ただし、別のアルゴリズムを使用しています。詳細に興味がある場合は、マニュアルを参照してください。)
オープンソースですが、GPL ではありません。
最新バージョンの Octave は、Matlab の fmincon 関数に相当するものを最適化パッケージに実装しています。