fminsearch​関数などの最適化計算​で、各繰り返し計算で​の目的関数の値やパラ​メータ推定値を描画す​ることはできますか?

fminsearch関数などの最適化計算で、各繰り返し計算での目的関数の値やパラメータ推定値を描画することはできますか?

 Réponse acceptée

MathWorks Support Team
MathWorks Support Team le 7 Août 2024
Modifié(e) : MathWorks Support Team le 7 Août 2024

0 votes

optimset 関数で、"PlotFcns" パラメータを使用することで可能です。
PlotFcns パラメータには、描画用の関数を各イタレーションでのコールバックとして定義します。
描画用の関数は、下記が用意されています。
  optimplotx.m : 現在のパラメータ推定値   optimplotfval.m :目的関数の値   optimplotfunccount.m : 目的関数の評価回数      ※Optimization Toolbox では、下記の関数も提供されています。   optimplotconstrviolation.m : 最大制約違反   optimplotfirstorderopt.m : 一次の最適性(output.firstorderopt)   optimplotresnorm.m : 残差ノルム   optimplotstepsize.m : ステップサイズ
例えば、optimplotfval.m を使用して、各繰り返し計算での目的関数の値を表示するには、以下のように実行します。
banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2; % 目的関数定義 options = optimset('PlotFcns',@optimplotfval); % PlotFcns の設定 [x,fval] = fminsearch(banana,[-1.2, 1],options) % 最適化
また、描画用の関数をユーザ定義で作成することも可能です。その場合、描画用の関数は、決められた関数書式で記述する必要があります。
以下の MATLABファンクションファイル myplot.m は、ユーザ定義で作成したプログラム例です。
function stop = myplot(x,optimValues,state) % 入力引数 % x: 目的変数 % optimValues: 現在の繰り返し計算での結果を含む構造体 % state: 現在の最適化計算の状態('init','interrupt','iter','done'のいずれか) % 出力引数 % stop: 最適化計算の継続(false)/停止(true)を決定するフラグ stop = false; switch state case 'init' % 初期化時 hold on case 'iter' % 繰り返し計算時 plot(optimValues.iteration,x,'o'); case 'done' % 計算終了時 hold off legend('x1','x2') otherwise end end
以下の URL より参考情報をご覧いただけます。
●Optimization Toolboxヘルプドキュメント(英語):Plot Functions R2024aの場合

Plus de réponses (0)

Catégories

En savoir plus sur Optimization Toolbox dans Centre d'aide et File Exchange

Produits

Version

R2008b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!