質問: ga関数(遺伝的アルゴリズム)の最適化計算で、全ての世代を保存するにはどうすればよいですか? genetic algorithm(ga, 遺伝的アルゴリズム)を用いて、最適化計算を行っています。このときの経過を変数として出力する方法を教えてください。 例えば、plotfcns コールバックで @gaplotbestf を設定すると、ベスト適応度(bestfit) をグラフに表示することができますが、この値を配列として得る方法を教えてください。
回答: 最適化計算での各世代での経過を変数として出力するには、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