5

状態方程式行列の固有値を 1 未満に保ちながら、MATLAB Optimization Toolboox で fmincon を使用して非線形フィルターのパラメーターを推定しようとしています。「sqp」アルゴリズムを使用した 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);

ありがとう!

4

1 に答える 1

2

ドキュメント'AlwaysHonorConstraints'には、オプションがバインドされた制約のみに適用されることが実際に記載されているためlbub. つまり、fminconドメイン全体[lb ub]を実行可能領域と見なし、すべての線形制約と非線形制約を無視します。

かなり前に、ファイル交換にoptimize基づいてfminsearchおり、利用可能であると書きました。かなり前のことなので、記憶違いかもしれませんが、線形および非線形の制約を含め、実行可能領域外の目的関数の評価を回避するオプション ( ) を実装したことを覚えています。あなたはそれを試してみたいかもしれません。 '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 + 1e8*c;

が実行可能領域のすぐ内側にある場合、戻り値は justyになりますが、次の反復で領域のすぐ外側にある場合、突然何百万も跳ね上がるため、適切ではありません。SQPは の 1 次導関数と 2 次導関数を使用し、そのような不連続点の近くで何百万にもなり、次の反復を台無しにするため、これは問題です。yfmincony

于 2013-09-06T11:47:31.437 に答える