遗传算法锦标赛选择

Reu*_*Reu 8 java genetic-algorithm evolutionary-algorithm

我正在写一个遗传算法,我打算从轮盘选择转到锦标赛选择,但我怀疑我的理解可能有缺陷.

如果我只选择人口中的n/2最佳解决方案,那么我的人口肯定会很快耗尽吗?

我对算法的理解是:

for(Member m in currentPopulation){
    Member randomMember1 = random member of currentPopulation which is then removed from currentPopulation
    Member randomMember2 = as above;
    //Mutate and crossover

    if(randomMember1.getScore() > randomMember2.getScore()){
        nextGeneration.add(randomMember1);
    } else {
        nextGeneration.add(randomMember2);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解正确吗?

Tom*_*tle 9

在锦标赛选择中,所选择的个体不会从人群中移除.您可以选择相同的人参加多个锦标赛.

仔细看了一下你的代码,我发现你确实有另一个误解.你通常不会改变/交叉锦标赛的所有成员.相反,你进行锦标赛,选择该锦标赛的获胜者作为个体进行突变/交叉.这意味着,对于突变,您的锦标赛大小必须至少为2,而对于交叉,大小必须至少为3且最佳2胜(或者您可以执行2个单独的锦标赛以选择每个父母进行交叉).

一些伪代码可能会有所帮助:

while (nextPopulation too small) {
    Members tournament = randomly choose x members from currentPopulation

    if(crossover){
        Member parents = select best two members from tournament
        Member children = crossover(parents)
        nextPopulation.add(children);
    } else {
        Member parent = select best one member from tournament
        Member child = mutate(parent)
        nextPopulation.add(child);
    }
}
Run Code Online (Sandbox Code Playgroud)