Main Content

最適化ソルバーのプロット関数

プロット関数とは

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

関連するトピック