1

MATLAB で凸最適化問題の収束を高速化したいと考えています。

私の目的関数は 3 つのパラメーターを持つ凸状で、最大化のために勾配上昇を使用しています。

現在、新しいパラメーター値と古いパラメーター値の差が非常に小さい (約 0.0000001) という終了条件で反復を手動で記述しています。最適解に収束したことを保証するものではないため、反復回数に基づいて終了することはできません。

そのため、収束には多くの時間がかかります - ほぼ 2 日です! これをスピードアップする方法はありますか?

実際、私の目的関数には 3 つのパラメーターしかありません。最初のパラメーターの値が 2 番目のパラメーターの値よりも大きくなければならないことはわかっています。

そのため、初期条件から開始して、2 番目のパラメーターの値が急速に増加し始めます。あるポイントに達すると、最初のパラメーターの値が急速に増加し始めます。最初のパラメーターの値が増加し始める間、2 番目のパラメーターの値はゆっくりと減少し始めます。最終的に、最初のパラメーターの値が2番目のパラメーターの値よりも大きくなります。

プロセスをスピードアップする方法はありますか?2日間はとても長いです。さらに、勾配の計算にも時間がかかります。多くの行列計算が必要です。

parameter1 の値が 2 番目の値よりも大きいような、定義済みのパラメーター値から始めたくありません。また、最初のパラメーターが常に 2 番目のパラメーターよりも大きくなければならないというわけではありません。どのパラメーター値を大きくする必要があるかはわかっています。助言がありますか?

4

1 に答える 1

0

勾配の計算が非常に遅く、これを試して手動で実装したい場合は、より多くの手順が必要になりますが、手順が非常に単純であるため、はるかに高速になる可能性があります。

ステップサイズを定義する

変数がステップサイズの方向に -1、0、または 1 回移動するすべてのポイントを試してください (3^3 = 27 の可能性)

最高のものを選ぶ

最適なものが前のものである場合は、ステップサイズに係数 0.5 を掛けます

もちろん、このプロセスの成功は関数のプロパティに依存します。さらに、はるかに簡単な解決策は、目的の差を 0.0001 などに設定することであることに注意してください。

于 2012-09-19T15:36:06.117 に答える