я эту процедуру для турнира отбора в генетическом алгоритме:турнирный отбор генетического алгоритма
выбирают K случайных лиц из населения & выбрать один из двух лучших особей среди этих к индивидуумов быть родителями.
Правильно ли это?
я эту процедуру для турнира отбора в генетическом алгоритме:турнирный отбор генетического алгоритма
выбирают K случайных лиц из населения & выбрать один из двух лучших особей среди этих к индивидуумов быть родителями.
Правильно ли это?
Учитывая, что вы используете критерии пригодности, вот псевдокод, который может вам помочь.
func tournament_selection(pop, k):
best = null
for i=1 to k
ind = pop[random(1, N)]
if (best == null) or fitness(ind) > fitness(best)
best = ind
return best
Так что в основном подход, которым вы следуете, в порядке. Хотя в этом есть нечто большее, как кроссовер и прочее, я думаю, вы позаботились об этом.
Ссылка связь с большим Tournament Selection in Genetic Algorithms
раствора-Чтобы продлить это, использовать другую переменную 'лучше'. ли что-то как-
better = best
best = ind
и при возвращении, возвращает объект, который представляет собой пару из этих 2-х переменных.
Или другой подход - если вы вызовите один и тот же экземпляр функции дважды, он вернет BEST и BEST-1. Для обработки образца необходимы некоторые настройки кода.
PS: Это может быть не оптимальный подход.
, как вы знаете, этот псевдокод возвращает одного человека (лучший). У меня должно быть два человека, чтобы образовать родителей, чтобы получить потомство! (Я имею в виду пару человек) –
Могу ли я получить двух лучших людей из этих случайных случайных людей, чтобы сформировать родителей? –
Да. Вызывая тот же турнир_selection() дважды, вы получите лучшие и лучшие-1 варианты из набора параметров, которые у вас есть. Или другой подход, поддерживая другую переменную, называемую «лучше» и играя с кодом. Внутри условия if write- better = best; best = ind; Надеюсь, что это поможет :) – bozzmob
турнир Выбор:
псевдокода:
choose k (the tournament size) individuals from the population at random
choose the best individual from pool/tournament with probability p
choose the second best individual with probability p*(1-p)
choose the third best individual with probability p*((1-p)^2)
and so on...
Детерминированная Выбор турнира выбирает лучший индивидуальный (при р = 1) в любом турнире. Выбор из 1-стороннего турнира (k = 1) эквивалентен случайному выбору. Выбранный индивидуум может быть удален из популяции, если выбор сделан по желанию, иначе люди могут быть выбраны более одного раза для следующего поколения. По сравнению с методом пропорционального отбора (стохастической) пригодности выбор турнира часто реализуется на практике из-за отсутствия стохастического шума.
турнир Выбор в MatLab:
Matepool=randi(PopLength,PopLength,2);%%select two individuals randomly for tournament and chooose the one with best fitness value
%% number of tournament is equal to the number of population size
for i=1:PopLength
if Fitness(Matepool(i,1))>= Fitness(Matepool(i,2))
SelectedPop(i,1:IndLength)=CurrentPop(Matepool(i,1),1:IndLength);
else
SelectedPop(i,1:IndLength)=CurrentPop(Matepool(i,2),1:IndLength);
end
end
Выбор турнир является один из многих методов, используемых для выбора родителей для кроссовера, как при выборе колеса рулетки. Я также хотел бы отметить, что для отбора, помимо пригодности, также следует учитывать опыт/возраст классификатора. Бета будет фактором для вклада по фитнесу и 1-бета для опыта. Фрагмент кода находится в java.
ArrayList<Genotype> Crossover (ArrayList Population){
ArrayList<Genotype> selected= ArrayList<Genotype>();
Geneotype best=NULL, second_best=NULL;
for(int i=0; i<k;i++){
int prob= Math.random()+Population.size(); // generate a number between 0 and last index of arraylist
if(best==NULL || best.fitness<Population.get(prob).fitness)
best= Population.get(prob);
else{
if(second_best.fitness<Population.get(prob).fitness)
best= Population.get(prob);
}
Population.remove(prob); // Wil not affect the actual population because parameters are pass by value not reference
selected.add(best);
selected.add(second_best);
return selected;
}
'выбрать двух лучших людей'? Не уверен в этом. Во-первых, ваш образец является подмножеством = 'k'. Вы должны выбирать на основе пола и лучших черт. – bozzmob
Я выбираю на основе значений пригодности, –