行列が正定でない場合の二次計画法


8

http://cran.r-project.org/web/packages/quadprog/quadprog.pdf

Rパッケージquadprogは、行列が正定の場合にのみ、2次計画問題を解くことができるようです。D

ただし、行列が正定でない場合があります。といったD

バツ2+y26バツy従うバツ+y1バツ+y1.5バツy0。

この種の問題を解決するにはどうすればよいですか?


問題は、2次が正定でない場合、局所最小値がないという事実に関連している可能性があります。この場合、リージョンは制限されているため、グローバルな最小値が存在するはずです。
Glen_b-2013

1
がPSDでない場合、問題は凸ではありません。どの勾配降下アルゴリズムでも、開始点に応じて多かれ少なかれ極小値に到達します。検索を停止するタイミングを決定するために、ヒューリスティックを考え出す必要がある場合があります。D
user603 2013

4
境界のどのセグメントに最小値があるかを決めるのはそれほど難しいことではありません。次に、その制約が与えられれば、極小値を持つ問題としてそれをキャストするのは簡単です...しかし、勾配降下のような標準の最小化アルゴリズムを使用するという@ user603の提案は、一般的なアプローチとして非常に役立ちます。
Glen_b-2013

回答:


4

目的関数が凸であるかどうかにかかわらず、2次計画問題のローカルまたはグローバル最適化専用の最適化ルーチンがあります。

BARONは、コンベックスであろうとなかろうと、二次計画問題を処理し、利用することができる汎用のグローバルオプティマイザーです。

CPLEXには二次計画法ソルバーがあり、solutiontarget = 2で呼び出して局所最適を見つけるか、= 3で呼び出して大域最適を見つけることができます。MATLABでは、cplexqpで呼び出すことができます。

線形制約を処理できる汎用ローカルオプティマイザを使用して、ローカル最適値を見つけることもできます。Rの例はhttps://cran.r-project.org/web/packages/trust/trust.pdfです。Rのオプティマイザーはhttps://cran.r-project.org/web/views/Optimization.htmlにリストされています

MATLABでは、Optimization Toolboxの関数quadprogを使用して、局所最適を見つけることができます。

ジュリアでは、さまざまなオプティマイザを利用できます。

「すべての」勾配降下アルゴリズムは、制約に対処することはもちろん、何にも着陸しない可能性があります。彼らが何をしているかを知っている誰かが開発したパッケージを使用してください。

提供されているサンプル問題は、証明可能なグローバル最適性に簡単に解決されます。おそらく2年以上経過すると、それはもはや必要ではないか、多分それがかつてなかった例であるかもしれませんが、いずれにしても、グローバル最適はx = 0.321429、y = 0.535714です。


1
+1。このような問題を解決するラグランジュ乗数法は、2年目の微積分クラスで日常的に教えられています。それらを使うと、 9/28 と 15/28(境界沿って達成される)を簡単に取得できます。、Y = 15 / 28 3 、X + Y = 3 / 2バツ=9/28y=15/28バツ+y=/2
whuber

1

次のようにパッケージnearPDから使用することで回避策を構築できます。Matrix
nearPD(D)$mat

nearPD 最も近い正定行列を計算します。


2
+1は比較的単純な近似解であるためです。(私がこの質問を見たことを覚えていません。それ以外の場合は自分でコメントに書いたでしょう)。対応する変動モードが重要である場合、この近似には重大な欠陥があります。
usεr11852

3
前のコメントの最後の文に同意します。これは、答えが正しいかどうか、または正しい野球場、都市、または州でさえ、少しでも気にしない限り、使用する優れた手法です。目的の「ヘッセ行列」行列が正定から離れた「許容範囲」内にある場合、このアプローチは実際には妥当である可能性がありますが、そうでない場合はそうではありません。
Mark L. Stone
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.