次の(一般的な)形式の最適化問題を数値的に解くのに苦労しています。
F(x) を最小化する
そのような:
___(1): 0 < x < 1
___(2): M(x) >= 0。
ここで、M(x) は要素が x の二次関数である行列です。最後の制約は、M(x) が正の半正定行列でなければならないことを意味します。さらに、F(x) は呼び出し可能な関数です。より好奇心旺盛な方のために、同様の最小限の作業例を次に示します。
いくつかのオプションを試しましたが、成功しませんでした。
- PICOS、CVXPYおよびCVX -- 最初の 2 つのケースでは、私のようなミニマックス問題をエンコードする方法が見つかりません。MATLAB で実装されている 3 番目のものでは、半正定制約に含まれる行列はアフィンでなければなりません。したがって、私の問題はこの基準から外れています。
- fmincon -- マトリックス ポジティブ制約をどのようにエンコードできますか? 1 つの方法は、行列 M(x) の固有値を解析的に計算し、それぞれが正になるように制約することです。しかし、固有値の解析式は恐ろしいものになる可能性があります。
- MOSEK -- 目的関数は標準形式で表現可能でなければなりません。ユーザー定義の目的関数の例が見つかりません。
- scipy.optimize -- 目的関数と制約に加えて、これらの関数の導関数も提供する必要があります。特に私の場合、それは目的関数にとっては問題ありません。しかし、固有値の解析式を使用して行列の正の制約 (およびその導関数) を表現するとしたら、それは非常に面倒な作業になる可能性があります。
上記の各パッケージ/ソフトウェアでの私の試みを説明するために MWE を提供していないことをお詫びします。
最適化の問題を解決するのに役立つパッケージ/ソフトウェアを誰か提案してもらえますか?