最適化ソルバーのプロット関数
プロット関数とは
options 構造体の PlotFcns
フィールドは最適化関数が呼び出す 1 つ以上の関数を指定します。これらの関数は進行状況を示すさまざまな測定値をプロットするために各反復で呼び出されます。関数ハンドル、または関数ハンドルの cell 配列を渡します。
次の MATLAB 最適化関数では、PlotFcns
オプションを使用できます。
fminbnd
fminsearch
fzero
これらの最適化関数に対する事前定義されたプロット関数には次のものがあります。
@optimplotx
は現在の点をプロットします。@optimplotfval
は関数値をプロットします。@optimplotfunccount
は関数カウントをプロットします (関数fzero
では使用できません)。
例: 組み込みプロット関数の使用
プロット関数 @optimplotfval
と共に fminsearch
を使用して最小化の進捗状況を表示します。
目的関数 onehump
は、この例の最後に表示されます。
プロット関数 @optimplotfval
を使用するためのオプションを設定します。
options = optimset('PlotFcns',@optimplotfval);
点 x0 = [2,1]
から開始して fminsearch
を呼び出します。
x0 = [2 1]; [x fval] = fminsearch(@onehump,x0,options)
x = 1×2
-0.6691 0.0000
fval = -0.4052
例: カスタムのプロット関数の使用
出力関数と同じ構文を使用してカスタムのプロット関数を作成できます。この構造の詳細については、最適化ソルバーの出力関数を参照してください。
反復番号のラベルが付けられた反復点を表示する 2 次元プロット関数を作成します。コードについては、この例の最後にある補助関数 myplot
を参照してください。プロット関数で、元の @optimplotfval
プロット関数と myplot
の両方を呼び出すようにします。
options.PlotFcns = {@myplot @optimplotfval}; [x fval] = fminsearch(@onehump,x0,options)
x = 1×2
-0.6691 0.0000
fval = -0.4052
カスタムのプロット関数は、ソルバーが最終点 [-0.6691 0.0000]
に収束する中、おおよそ後ろ半分の反復を他の反復の上に重ねてプロットしています。このため、反復の後半は読み取りにくくなっています。それでもなお、プロットは、最小化点に向かって fminsearch
がどのように反復するのかをある程度示しています。
補助関数
次のコードは、補助関数 onehump
を作成します。
function f = onehump(x) r = x(1)^2 + x(2)^2; s = exp(-r); f = x(1)*s+r/20; end
次のコードは、補助関数 myplot
を作成します。
function stop = myplot(x,optimValues,state) stop = false; switch state case 'init' % Setup for plots or dialog boxes hold on case 'iter' % Make updates to plots or dialog boxes as needed plot(x(1),x(2),'rx'); text(x(1)+.05,x(2),... num2str(optimValues.iteration)); case 'done' % Cleanup of plots, dialog boxes, or final plot hold off end end