在锦标赛选择中,不会从群体中移除所选择的个体.您可以选择相同的人参加多个锦标赛.
看了你的代码后,我发现你确实有另一个误解.你通常不会改变/交叉锦标赛的所有成员.相反,你进行锦标赛,选择该锦标赛的获胜者作为个体进行突变/交叉.这意味着对于突变,您的锦标赛大小必须至少为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);
}
}