MATLAB: Writing a custom Selection Function for a Genetic Algorithm problem

childrengagenetic algorithmGlobal Optimization Toolboxparentsselctionfcnselection function

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"

Best Answer

I am sorry that the documentation is not clear on this point. I will try to improve it.
As described here, a custom selection function needs to have the syntax
function parents = myfun(expectation, nParents, options)
The question is what does the expectation argument mean? In fact, it is the vector of scaled fitness functions associated with the members of the population. So if you want the best 25 members, just sort expectation and take the top 25.
Alan Weiss
MATLAB mathematical toolbox documentation