Я внедрил Roulette wheel selection
в GA
.
Выбор места в GA?
TotalFitness=sum(Fitness);
ProbSelection=zeros(PopLength,1);
CumProb=zeros(PopLength,1);
for i=1:PopLength
ProbSelection(i)=Fitness(i)/TotalFitness;
if i==1
CumProb(i)=ProbSelection(i);
else
CumProb(i)=CumProb(i-1)+ProbSelection(i);
end
end
SelectInd=rand(PopLength,1);
for i=1:PopLength
flag=0;
for j=1:PopLength
if(CumProb(j)<SelectInd(i) && CumProb(j+1)>=SelectInd(i))
SelectedPop(i,1:IndLength)=CurrentPop(j+1,1:IndLength);
flag=1;
break;
end
end
if(flag==0)
SelectedPop(i,1:IndLength)=CurrentPop(1,1:IndLength);
end
end
Теперь я пытался реализовать rank selection
в GA
. Я узнал, что:
выбор место занимает первое место населения, а затем каждая хромосома получает приспособленность из этого рейтинга.
Худшее будет иметь фитнес 1, второе худшее 2 и т. Д., А лучшее будет иметь фитнес N (количество хромосом в популяции).
Я видел эти link1 и link2 и то, что я понял, что:
Сначала я сортирую значение приспособленность популяции.
Тогда, если число населения равно 10, тогда я дам вероятность выбора для населения, как 0,1,0,2,0,3, ..., 1,0.
- Тогда я буду рассчитать совокупный фитнес, как рулетка.
- И следующие шаги такие же, как рулетка.
Моя реализация:
NewFitness=sort(Fitness);
NewPop=round(rand(PopLength,IndLength));
for i=1:PopLength
for j=1:PopLength
if(NewFitness(i)==Fitness(j))
NewPop(i,1:IndLength)=CurrentPop(j,1:IndLength);
break;
end
end
end
CurrentPop=NewPop;
ProbSelection=zeros(PopLength,1);
CumProb=zeros(PopLength,1);
for i=1:PopLength
ProbSelection(i)=i/PopLength;
if i==1
CumProb(i)=ProbSelection(i);
else
CumProb(i)=CumProb(i-1)+ProbSelection(i);
end
end
SelectInd=rand(PopLength,1);
for i=1:PopLength
flag=0;
for j=1:PopLength
if(CumProb(j)<SelectInd(i) && CumProb(j+1)>=SelectInd(i))
SelectedPop(i,1:IndLength)=CurrentPop(j+1,1:IndLength);
flag=1;
break;
end
end
if(flag==0)
SelectedPop(i,1:IndLength)=CurrentPop(1,1:IndLength);
end
end
Am я понять Algo неправильно ?? Если это тогда, может ли кто-нибудь дать мне представление о том, как изменить колесо рулетки до выбора ранга?
Я реализовал код, и я реализовал как предоставление 0,1,0,2,0,3, ... 1,0, когда popLength = 10. Но вы говорите мне, чтобы я дал 1/55,2/55,3/55 ... вот так .so последний кандидат получит 10/55. Правильно ли это? –
Вправо (ответ был написан до вашего редактирования). Ключевым моментом является то, что «фитнес», назначенный каждому человеку, зависит ** только ** от его положения, а не от фактической пригодности. Значения, связанные с рангом (.1, .2 или 1/55, 2/55 ...), связаны с «селективным давлением», что очень важно для выполнения алгоритма, но не является основным аспектом. Основной аспект заключается в том, что ранговый выбор поддерживает постоянное давление в эволюционном поиске , не находясь под влиянием «супер-индивидуумов». – manlio