最適化計算での各世代での経過を変数として出力するには、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