2013-08-27 18 views
5

私は未満の状態方程式行列の固有値を保ち、MATLABの最適化Toolbooxではfminconを用いた非線形フィルタのパラメータを推定しようとしています。 「SQP」アルゴリズムを使用して、fminconのためのドキュメントは、それはすべての反復で制約を尊重し、まだ私のコードの非常に最初の繰り返しでそれが不安定な固有値を暗示しているポイントをしようと言っています。私はこれらのパラメータ値でフィルタを実行することはできませんので、私のコードがクラッシュします。各ステップでfmincon名誉拘束を行う方法は?

ドキュメントは本当に「AlwaysHonorConstraints」のベクトルのみ(LBとUB)として渡された不等式制約に適用されることを意味するのでしょうか?各ステップで非線形制約が満たされるようにする方法はありますか?

c = @(x) max(abs(eig(reshape(x(8:16), 3, 3)))) - 1; 
ceq = @(x) [];     
nonlcon = @(x) deal(c(x), ceq(x)); 

obj = @(x) -unscented_kalman1(x, fulldiv, crsp_allEverything); 

fminconOptions = optimset('Display', 'iter-detailed', 'Algorithm', 'sqp', ... 
'TolX', errTol, 'UseParallel', 'always', 'AlwaysHonorConstraints', 'bounds'); 

maxX = fmincon(obj, x0, [], [], [], [], [], [], nonlcon, fminconOptions); 

ありがとう:

は、ここに私のコードの関連作品です!

+1

"私のコードの最初の反復では、不安定な固有値を意味する点を試しています"と言うとき、 'x0'を使った' fmincon'の最初の反復を意味しますか?異なる開始値を試しましたか?あなたは 'x0'を何に設定しますか? – user1884905

答えて

2

The documentationは確か'AlwaysHonorConstraints'オプションはバインド制約に適用されると述べているので、lbub。言い換えれば、fminconは実行可能領域としてドメイン全体[lb ub]を考慮し、任意およびすべての線形および非線形制約を無視します。

かなり前に、私はfminsearchに基づいてon the file exchangeに基づいて、optimizeを書きました。さて、それはずっと前のことですが、間違っているかもしれませんが、線形制約と非線形制約を含む目的関数の評価を避けるオプション('superstrict')の実装を覚えています。あなたはそれを試してみたいかもしれません。

しかし、fminconにこだわり、可能な回避策はunscented_kalman1、このような罰則を含むように変更することです:

function unscented_kalman1(x, ...) 

    %// evaluate constraint (yes, also here, unfortunately) 
    c = @(x) max(abs(eig(reshape(x,2,2)))) - 1; 
    penalties = c > 0; 

    %// modify x by thresholding 
    if penalties   
     x = ... %// [MODIFY x SUCH THAT IT LIES INSIDE THE FEASIBLE REGION] 
    end 

    %// ... remainder of the function here 

    %// then finally: 
    y = ... %// [THE OUTCOME OF THE FUNCTION]; 

    if penalties 
     y = y + c.^3; %// ...or something similar 
    end 

end 

これはあなたのフィルタを実行することが可能となりますが、目的のために高い多くの値を返します制約が破られたときに機能します。これにより、fminconが実行可能領域に強制されます。

は、使用するペナルティ関数が不連続性を導入しないことしかし注意してください。 yだけ実行可能領域内にある場合、返される値はちょうどyですが、次の反復でそれそれからだけ領域外の場合は、それがするので

y = y + 1e8*c; 

のようなものは、適していないだろう突然急上昇百万fminconのSQPは、yの第1および第2導関数を使用するため、このような不連続点の近傍では数百万になり、次の反復を取り締まるため、問題があります。

関連する問題