MATLAB Answers

1

ga関数(遺伝的アル​ゴリズム)の最適化計​算で、全ての世代を保​存するにはどうすれば​よいですか?

Genetic Algorithm(GA, 遺伝的アルゴリズム)を用いて、最適化計算を行っています。このときの経過を変数として出力する方法を教えてください。
例えば、PlotFcns コールバックで @gaplotbestf を設定すると、ベスト適応度(BestFit) をグラフに表示することができますが、この値を配列として得る方法を教えてください。

Products


Release

R2012a

1 Answer

Answer by MathWorks Support Team on 9 Aug 2019
Edited by MathWorks Support Team on 9 Aug 2019
 Accepted Answer

最適化計算での各世代での経過を変数として出力するには、OutputFcn(optimoptions 関数で設定する場合)、もしくは OutputFcns(gaoptimset 関数で設定する場合) にて、ユーザ側で、得たい値を出力するコールバックを定義する必要があります。
各種情報は、OutputFcn(s) の第2入力引数である state の中に格納されています。
以下は、ベスト適応度を出力させる OutputFcn(s) の記述方法です。
function [state,options,optchanged] = myfun(options,state,flag)
% OutputFcn sample
persistent BestF
optchanged = false;
switch flag
case 'init'
BestF(1) = min(state.Score);
case 'iter'
BestF = [BestF, min(state.Score)];
case 'done'
assignin('base','BestF',BestF)
end
ポイントとしては、各イタレーションで、 BestF(ベスト適応度)を継承させるために persistent 変数として定義しています。
また、最適化計算終了時、ベースワークスペースに変数を格納するため、 assignin 関数を使用しています。
また、OutputFcn 以外の手段としては、PlotFcns コールバックの@gaplotbestf で描画した結果からデータを取得する方法があります。
例えば、表示された Figure から取得する場合、 以下のコードでご確認いただけます。
h = findobj(gcf, 'Type','line','Tag', 'gaplotbestf');
h.YData

  0 Comments

Sign in to comment.