我正在编写一个遗传算法来最小化一个函数。我有两个问题,一个关于选择,另一个关于交叉以及没有发生时该怎么办。
这是我正在做的事情的概述:
while (number of new population < current population)
# Evaluate all fitnesses and give them a rank. Choose individual based on rank (wheel roulette) to get first parent.
# Do it again to get second parent, ensuring parent1 =/= parent2
# Elitism (do only once): choose the fittest individual and immediately copy to new generation
Multi-point crossover: 50% chance
if (crossover happened)
do single point mutation on child (0.75%)
else
pick random individual to be copied into new population.
end
所有这些都在另一个while循环中,它跟踪健身进度和迭代次数,我没有包括在内。所以,我的问题:
- 如您所见,在每次迭代中随机选择两个父母,直到新的人口被填满。因此,两个相同的父母可能会多次交配,并且肯定有几个合适的父母会多次交配。这有什么不好吗?
- 在obitko教程中,它说如果没有发生交叉,那么孩子就是父母的精确副本。我什至不明白这意味着什么,所以,正如你所看到的,我只是随机选择了一个父母(统一;没有考虑适应度)并复制到新的群体中。这对我来说似乎很奇怪。无论我是否真的这样做,我的结果并没有太大变化。当没有发生交叉时,处理这种情况的正确方法是什么?