このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
カスタムプロット関数
カスタムプロット関数について
ソフトウェアに含まれているもの以外の patternsearch
プロット関数を使用するには、パターン検索の各反復で呼び出されてプロットを作成する独自のカスタム プロット関数を記述できます。この例では、前回の反復から現在の反復までの最適な目的関数値の対数変化を表示するプロット関数を作成する方法を示します。プロット関数の詳細については、プロット オプション を参照してください。
カスタムプロット関数の作成
この例のプロット関数を作成するには、次のコードをコピーして、MATLAB® エディターの新しい関数ファイルに貼り付けます。
function stop = psplotchange(optimvalues, flag) % PSPLOTCHANGE Plots the change in the best objective function % value from the previous iteration. % Best objective function value in the previous iteration persistent last_best stop = false; if(strcmp(flag,'init')) set(gca,'Yscale','log'); %Set up the plot hold on; xlabel('Iteration'); ylabel('Log Change in Values'); title(['Change in Best Function Value']); end % Best objective function value in the current iteration best = min(optimvalues.fval); % Set last_best to best if optimvalues.iteration == 0 last_best = best; else %Change in objective function value change = last_best - best; plot(optimvalues.iteration, change, '.r'); end
MATLAB パス上のフォルダーにファイル名を psplotchange.m
としてファイルを保存します。コードはプロット機能の仕組みで説明されています。
問題の設定
問題はpatternsearch と Optimize を使用した制約付き最小化ライブ エディター タスクと同じです。問題を設定するには:
MATLAB コマンド ラインで次のコマンドを入力します。
x0 = [2 1 0 9 1 0]'; Aineq = [-8 7 3 -4 9 0]; bineq = 7; Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3]; beq = [84 62 65 1]; H = [36 17 19 12 8 15; 17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; F = @(x)0.5*x'*H*x + f'*x;
これは線形制約の問題なので、
PollMethod
オプションを'GSSPositiveBasis2N'
に設定します。オプションに、組み込みプロット関数@psplotbestf
とカスタム プロット関数@psplotchange
の両方を含めます。options = optimoptions('patternsearch',... 'PlotFcn',{@psplotbestf,@psplotchange},... 'PollMethod','GSSPositiveBasis2N');
カスタムプロット関数を使用して最適化を実行する
x0
から始めて patternsearch
を呼び出して例を実行します。
[x,fval] = patternsearch(F,x0,...
Aineq,bineq,Aeq,beq,[],[],[],options);
下のカスタム プロットの y 軸のスケールは対数であるため、プロットには 0 より大きい変化のみが表示されます。
プロット機能の仕組み
プロット関数は、次の構造体に含まれる情報を使用します。
optimvalues
— ソルバーの現在の状態、構造体flag
— アルゴリズムの現在の状態、文字ベクトル
カスタム プロット関数 psplotchange.m
の最も重要なステートメントを次の表にまとめます。
カスタムプロット関数ステートメント
ステートメント | 説明 |
---|---|
persistent last_best | 前の世代における最良の目的関数値である永続変数 |
set(gca,'Yscale','log') | アルゴリズムが開始する前にプロットを設定します。 |
best = min(optimvalues.fval) |
|
change = last_best - best | 変数 |
plot(optimvalues.iteration, change, '.r') |
|