Writing a custom Selection Function for a Genetic Algorithm problem
古いコメントを表示
Hey guys, I am a bit lost on this. Any help would be appreciated. Essentially my problem is this: I want to write a custom SelectionFcn for my GA to select the 25 best parents and then select 2 at random to create 25 children. And the children should be the arithmetic mean between the parents.
I have olny gotten as far as this:
function parents = parents(expectation, nParents, options, state)
nParents = 25
parents = zeros(1,nParents);
% get the scores of the current population
curPopScores = state.Score;
% get the 25 best parents
if length(curPopScores)>25
% created matrix with scores and indices for each parent
if iscolumn(curPopScores)
data = [curPopScores'; 1:length(curPopScores)];
else
data = [curPopScores'; 1:length(curPopScores)];
end
% now sort the data on the column that corresponds to the scores
% (-1 means sort the first column in descending order)
sortedData = sortrows(data',-1);
% get the sorted parent indices from the first 25 elements
parents = sortedData(1:25,2);
That should work except I am unable to access the scores with "state.Score"
採用された回答
その他の回答 (2 件)
Geoff Hayes
2015 年 4 月 4 日
Renovatio - I don't have the Global Optimization Toolbox, but I suspect that you have to do something like the following (note that expectation and nParents are inputs to your function so you may not want to overwrite them)
function parents = parents(expectation, nParents, options)
nParents = 25
parents = zeros(1,nParents);
% get the current state of the GA
state = gaoptimget(options, 'state');
% get the scores of the current population
curPopScores = state.Score;
% get the 25 best parents
if length(curPopScores)>25
% created matrix with scores and indices for each parent
if iscolumn(curPopScores)
data = [curPopScores'; 1:length(curPopScores)];
else
data = [curPopScores'; 1:length(curPopScores)];
end
% now sort the data on the column that corresponds to the scores
% (-1 means sort the first column in descending order)
sortedData = sortrows(data',-1);
% get the sorted parent indices from the first 25 elements
parents = sortedData(1:25,2);
else
parents = 1:25;
end
The above should allow you to select the best 25 parents from the current generation. For more details on the state structure, see GA options.
yuan feng
2017 年 12 月 10 日
0 投票
hello,i want to write a custom mutation function, but i don't know how to write, i would appreciate it if you can help me.
2 件のコメント
Geoff Hayes
2017 年 12 月 11 日
yuan - please post this as a question rather than as an answer.
Renovatio
2017 年 12 月 29 日
カテゴリ
ヘルプ センター および File Exchange で Genetic Algorithm についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!