このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
カスタムのプロット関数の作成
カスタムプロット関数について
ソフトウェアに付属するプロット関数のいずれもがプロットしたい出力に適していない場合は、遺伝的アルゴリズムが各世代で呼び出してプロットを作成する独自のカスタム プロット関数を作成できます。この例では、前の世代から現在の世代までの最適な適応度値の変化を表示するプロット関数を作成する方法を示します。
カスタムプロット関数の作成
この例のプロット関数を作成するには、次のコードをコピーして、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 のコードと同じ要素が多数含まれています。