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

6 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2016 年 7 月 22 日
編集済み: MathWorks Support Team 2021 年 9 月 22 日
Genetic Algorithm(GA, 遺伝的アルゴリズム)を用いて、最適化計算を行っています。このときの経過を変数として出力する方法を教えてください。
例えば、PlotFcns コールバックで @gaplotbestf を設定すると、ベスト適応度(BestFit) をグラフに表示することができますが、この値を配列として得る方法を教えてください。

採用された回答

MathWorks Support Team
MathWorks Support Team 2021 年 9 月 22 日
編集済み: MathWorks Support Team 2021 年 9 月 22 日
最適化計算での各世代での経過を変数として出力するには、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 件)

カテゴリ

Help Center および File ExchangeGenetic Algorithm についてさらに検索

製品


リリース

R2012a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!