2012-03-26 27 views
0

私はMATLABでfminconを使いこなすために最善を尽くしています。私は、関数を呼び出すときに、私は2つの次のいずれかのエラーを取得:機能評価の最適化が途中で止まる(MATLAB)

数を超えて、または反復の

数を超えました。

これまでのところ、私が解決策を見ていると、それは意図したものから離れています(私は最小ベクトルを作成したのでそれを知っています)。

私が許容範囲制約または最大反復回数を増やしたとしても、同じ問題が発生します。

何か助けていただければ幸いです。

+1

ディメンションは何ですか?あなたは知られている解決策を開始しようとしましたか?あなたはグラデーションとヘッセンを提供していますか? – Memming

+0

いいえ、私は等式行列とベクトルを提供しています:Aeqとbeq。私は今、等価制約のみでL1最小化の問題を検討していますが、シミュレーションは時間がかかり、間違った結果(どこにいなくても)を与えているか、ソルバがメモリエラーを生成しています。つまり、JPEGはこのメモリ/時間のオーバーヘッドで1msの画像を圧縮することができますか? – ToniAz

答えて

1

最初に、問題が実際に線形または二次プログラミングとしてキャストできる場合は、まずそれを実行します。

それ以外の場合は、異なる開始値x0で播種してみましたか?それが悪い場所で始まっているなら、最適になるのはもっと難しいかもしれません。

関数の勾配を指定することができれば、オプティマイザの処理に大いに役立ちます(ただし、数値微分以外の方法でしか見つけられない場合に限ります)。同様に、ヘッセンを(安価でフルまたは疎に)提供することができれば、あなたは金色です。

using a different algorithm in the solverでもお試しいただけます。

デフォルトでは、fminconは、デフォルトで最適化しようとしている機能についての情報はほとんどなく、さらに多くを提供することは非常に役に立ちます。目的関数についてもっと教えていただければ、より多くのヒントを与えることができます。

+0

あなたは、私が言うつもりだったことすべてを言ったが、より良い。 +1とブラボー。 –

+0

@Dougal 「」まだ 、私はすべてゼロのベクトルで始めて、うーん、私は」行って 「」「まず、あなたの問題は、実際に線形または二次計画としてキャストできる場合は、最初にそれを行います」それをやろうとします。 L1ノルムだと分かりません。 目的関数は実際にはピクセルの列ベクトルです。だから私がやろうとしているのは、この関数を画像の列全体に適用することです。これは、原子の脱分裂に関連するものです。 – ToniAz

+0

@トニーズあなたが何を意味するのか分かりません。線形または二次プログラミングの問題であれば、 'fmincon 'ではなく' linprog'または 'quadprog'を使うべきです。また、あなたの目的関数が実際にはL1のノルムなら、あなたは閉じた形でそれを行うことができます: '|| x-q || _1'の最小値は' q'です....しかし、L1ノルムは微分可能です0で);部分w.r.t.成分は、その成分の絶対値の唯一の派生物であり、すなわちその符号は内部微分に時間を掛けたものである。すなわち、まっすぐ伸びるL1ノルムの場合、それはちょうど1または-1である。だから 'grad_x(|| x || _1)'は単に 'sign(x)'です。 – Dougal

0

L1ノルムは微分できません。これは、アルゴリズムが残差の1つがゼロである点に収束することを困難にする可能性がある。私はこれが反復回数の限界を超えた理由だと思う。あなたの元の問題が

min norm(residual(x),1) 

s.t. Aeq*x=beq 

ある場合

min sum(b) 

s.t. -b(i)<=residual(x,i)<=b(i) 

     Aeq*x=beq   

を次のようにあなたは、differentiably問題を定式ことができます(xは、i)はi番目の残差、xはどこ残留未知数の元のベクトルです、 bは問題に追加する境界の未知ベクトルです。

関連する問題