Optimization 遗传算法:需要一些关于选择的澄清,以及当交叉不存在时该怎么做';不会发生
我正在写一个最小化函数的遗传算法。我有两个问题,一个是关于选择,另一个是关于交叉以及当它不发生时该怎么办 以下是我所做工作的概要:Optimization 遗传算法:需要一些关于选择的澄清,以及当交叉不存在时该怎么做';不会发生,optimization,genetic-algorithm,Optimization,Genetic Algorithm,我正在写一个最小化函数的遗传算法。我有两个问题,一个是关于选择,另一个是关于交叉以及当它不发生时该怎么办 以下是我所做工作的概要: 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. #
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(新人口数量<当前人口)
#评估所有适合度并给他们排名。根据等级选择个人(轮盘赌)以获得第一个父项。
#再次执行此操作以获取第二个父级,确保parent1=/=parent2
#精英主义(只做一次):选择最合适的个人,并立即复制到新一代
多点交叉:50%的机会
如果(发生交叉)
对儿童进行单点突变(0.75%)
其他的
随机选取要复制到新总体中的个体。
结束
所有这些都在另一个while
循环下,它跟踪健身进度和迭代次数,我没有包括在内。所以,我的问题是:
有些父母有几个后代是很常见的;我甚至说这是默认的实践(并考虑生物进化,确切地说,这是主要成分之一)。 “如果不发生交叉,那么孩子就是父母的复制品” 这有点令人困惑。交叉(在你的链接中有很好的解释)意味着从父母一方获取一些基因,从另一方获取一些基因。这称为有性生殖,需要两个(或更多?)父母 但无性繁殖也是可能的。在这种情况下,你只需选择一个父母,在新的个体中突变其基因组。这几乎就是你所尝试的,但是你错过了重要的突变步骤(注意突变可能非常激进或非常保守!) 请注意,无性繁殖需要在复制基因组后进行变异以创造多样性,而在有性繁殖中,这是一个可选步骤 可以使用任何一种复制方式,也可以混合使用。顺便说一下:在某些问题上,基因可能并不总是具有相同的大小。在这种情况下,有性生殖是有问题的。如果您对这个问题感兴趣,请看一下NEAT算法,一种流行的神经进化算法,旨在解决这个问题(和)
最后,精英主义(把表现最好的人复制给下一代)很普遍,但也可能有问题。遗传算法经常陷入次优解(称为局部极大值,任何变化都会降低适应度)。精英主义可能导致这一问题。当然,相反的问题是太多的多样性与随机搜索相似,因此您需要找到正确的平衡。克隆个体本身并不是一个坏主意,只要不是所有个体都被克隆。在这方面,本教程明确提到了交叉概率,因此不用说交叉将应用于某些个体。本教程还提到了广为人知的精英主义技术,该技术还将最好的个体从一代克隆到另一代,以避免搜索偏离潜在的最佳解决方案。你为什么不同意?