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!