Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

カスタムのプロット関数の作成

カスタムプロット関数について

ソフトウェアに付属するプロット関数のいずれも、プロットしたい出力に適していない場合は、遺伝的アルゴリズムが各世代で呼び出してプロットを作成する独自のカスタム プロット関数を作成できます。この例では、前の世代から現在の世代までの最適な適応度値の変化を表示するプロット関数を作成する方法を示します。

カスタムプロット関数の作成

この例のプロット関数を作成するには、次のコードをコピーして、MATLAB® エディターの新しいファイルに貼り付けます。

function state = gaplotchange(options, state, flag)
% GAPLOTCHANGE Plots the logarithmic change in the best score from the 
% previous generation.
%   
persistent last_best % Best score in the previous generation

if(strcmp(flag,'init')) % Set up the plot
    xlim([1,options.MaxGenerations]);
    axx = gca;
    axx.YScale = 'log';
    hold on;
    xlabel Generation
    title('Log Absolute Change in Best Fitness Value')
end

best = min(state.Score); % Best score in the current generation
if state.Generation == 0 % Set last_best to best.
    last_best = best;
else
	change = last_best - best; % Change in best score 
	last_best = best;
    if change > 0 % Plot only when the fitness improves
        plot(state.Generation,change,'xr');
    end
end

MATLAB パス上のフォルダーにファイル名を gaplotchange.m としてファイルを保存します。

カスタムプロット機能の使用

カスタム プロット機能を使用するには、オプションに含めます。

rng(100) % For reproducibility
options = optimoptions('ga','PlotFcn',{@gaplotbestf,@gaplotchange});
[x,fval] = ga(@rastriginsfcn,2,[],[],[],[],[],[],[],options)

Optimization terminated: maximum number of generations exceeded.

x =

   -0.0003    0.0014


fval =

   4.2189e-04

プロットには、0 より大きい変化、つまり最適な適応度の改善のみが表示されます。対数スケールを使用すると、上のグラフでは明らかにならない、最適な適応度関数の小さな変化を確認できます。

プロット機能の仕組み

プロット関数は、遺伝的アルゴリズムが入力引数として関数に渡す次の構造体に含まれる情報を使用します。

  • options — 現在のオプション設定

  • state — 現在の世代に関する情報

  • flag — アルゴリズムの現在の状態

プロット関数の最も重要な行は次のとおりです。

  • persistent last_best

    永続変数 last_best (前の世代の最高スコア) を作成します。永続変数は、プロット関数の複数回の呼び出しにわたって保持されます。

  • xlim([1,options.MaxGenerations]);

    axx = gca;

    axx.YScale = 'log';

    アルゴリズムが開始する前にプロットを設定します。options.MaxGenerations は最大世代数です。

  • best = min(state.Score)

    フィールド state.Score には、現在の集団内のすべての個人のスコアが含まれます。変数 best は最小スコアです。構造体状態のフィールドの詳細な説明については、プロット関数の構造 を参照してください。

  • change = last_best - best

    変数の変化は、前の世代の最高スコアから現在の世代の最高スコアを引いたものです。

  • if change > 0

    最適な適応度に変化があった場合にのみプロットします。

  • plot(state.Generation,change,'xr')

    state.Generation に含まれる番号の現在の世代での変更をプロットします。

gaplotchange のコードには、最適な適応度プロットを作成する関数である gaplotbestf のコードと同じ要素が多数含まれています。

関連するトピック