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!