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

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

采纳的回答

MathWorks Support Team
编辑: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 CenterFile Exchange 中查找有关 Genetic Algorithm 的更多信息

产品


版本

R2012a

Community Treasure Hunt

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

Start Hunting!