Customised output function for ga

3 ビュー (過去 30 日間)
Yaser Khojah
Yaser Khojah 2018 年 5 月 18 日
コメント済み: Walter Roberson 2020 年 12 月 31 日
I have been looking how to create my own output function in GA to get each x and fval of each iteration and generation. Although I have looked into all the answered questions for such a question, nothing has been working so far. Here is my output function and please help me with what I'm missing.
function [state,options,optchanged] = gaoutfun(options,state,flag)
persistent history_pop history_Best history_Score
history_pop = [];
history_Best = [];
history_Score = [];
optchanged = false;
switch flag
case 'init'
history_pop = [history_pop;state.Population];
assignin('base','gapopulationhistory',history_pop);
history_Best = [history_Best;state.Best];
assignin('base','gabesthistory',history_Best);
history_Score = [history_Score;state.Score];
assignin('base','gascorehistory',history_Score);
case 'iter'
history_pop = [history_pop;state.Population];
assignin('base','gapopulationhistory',history_pop);
history_Best = [history_Best;state.Best];
assignin('base','gabesthistory',history_Best);
history_Score = [history_Score;state.Score];
assignin('base','gascorehistory',history_Score);
case 'done'
history_pop = [history_pop;state.Population];
assignin('base','gapopulationhistory',history_pop);
history_Best = [history_Best;state.Best];
assignin('base','gabesthistory',history_Best);
history_Score = [history_Score;state.Score];
assignin('base','gascorehistory',history_Score);
end

採用された回答

Walter Roberson
Walter Roberson 2018 年 5 月 18 日
function [state,options,optchanged] = gaoutfun(options,state,flag)
persistent state_record
if isempty(state_record)
state_record = struct('Population', {}, 'Best', {}, 'Score', {});
end
if nargin == 0
state = state_record;
options = [];
optchanged = [];
else
state_record(end+1) = struct('Population', state.Population, 'Best', state.Best', 'Score', state.Score);
optchanged = false;
end
Before re-using this function, call
clear gaoutfun
Let the function be called as usual. Do not expect any changes outside the function when it is called.
After the ga run is finished, call
record = gaoutfun();
with no inputs. A structure of the state information will be returned.
However, this is likely to be a bit inefficient because the struct is expanded each iteration. I would suggest that when isempty() succeeds, that options be examined to find the maximum generations, and that state_record be initialized that large. Use state.Generation as the index for the output instead of end+1
  4 件のコメント
MD. Rokibujjaman sovon
MD. Rokibujjaman sovon 2020 年 12 月 31 日
what is the scorehistory and besthistory? is scorehistory is the fval value for each iteration?
Thanks.
Walter Roberson
Walter Roberson 2020 年 12 月 31 日
https://www.mathworks.com/help/gads/ga.html#d122e41218
https://www.mathworks.com/help/gads/some-genetic-algorithm-terminology.html
https://www.mathworks.com/matlabcentral/answers/322582-how-is-score-in-matlab-s-genetic-algorithm-defined

サインインしてコメントする。

その他の回答 (1 件)

Alan Weiss
Alan Weiss 2018 年 5 月 18 日
Have you looked at the documentation example that creates a history in an output function for ga?
Alan Weiss
MATLAB mathematical toolbox documentation
  1 件のコメント
Yaser Khojah
Yaser Khojah 2018 年 5 月 18 日
編集済み: Walter Roberson 2018 年 5 月 18 日
Dear Alan,
Yeah I did and could not get any close. I saw this example https://uk.mathworks.com/help/gads/custom-output-function-for-genetic-algorithm.html#d119e19384 and I tried to make something similar but nothing worked. Is there away you spot what I missing in my code? Thank you so much.
I saw this one too https://uk.mathworks.com/help/matlab/math/output-functions.html but does not work for GA. I'm lost now and been working on it for awhile and can't get what I need.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSymbolic Math Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by