Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 遗传算法:需要一些关于选择的澄清,以及当交叉不存在时该怎么做';不会发生_Optimization_Genetic Algorithm - Fatal编程技术网

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
循环下,它跟踪健身进度和迭代次数,我没有包括在内。所以,我的问题是:

  • 正如你所看到的,每个家庭随机选择了两位家长 迭代,直到新的总体填充完毕。所以,这两个是相同的 父母可能会不止一次地交配,当然也会有几位健康的父母 多次交配。这有什么不好吗
  • 在这个例子中,它说如果crossover没有 一旦发生,那么孩子就是父母的翻版。我都不明白 这意味着什么,正如你所看到的,我只是随机选择了一个家长 (一致;不考虑适合性)并复制到新的群体中。 我觉得这很奇怪。无论我是否真的这样做,我的结果都不会有太大的改变。处理这个案子的正确方法是什么 什么时候不发生交叉
  • 我不认为同一个人每一代有一个以上孩子的父母有什么不对。它只会对你的多样性产生一点点影响。如果你不喜欢这一点,或者在最后一代发现真正缺乏多样性,你实际上可以标记个体,这样它就不能每代多做一次父母
  • 事实上,我并不完全同意本教程,我认为在您选择了将成为家长的个人(当然,基于他们的健康状况)之后,您应该实际执行交叉。否则,你将克隆许多个体到下一代

  • 有些父母有几个后代是很常见的;我甚至说这是默认的实践(并考虑生物进化,确切地说,这是主要成分之一)。 “如果不发生交叉,那么孩子就是父母的复制品”

    这有点令人困惑。交叉(在你的链接中有很好的解释)意味着从父母一方获取一些基因,从另一方获取一些基因。这称为有性生殖,需要两个(或更多?)父母

    但无性繁殖也是可能的。在这种情况下,你只需选择一个父母,在新的个体中突变其基因组。这几乎就是你所尝试的,但是你错过了重要的突变步骤(注意突变可能非常激进或非常保守!)

    请注意,无性繁殖需要在复制基因组后进行变异以创造多样性,而在有性繁殖中,这是一个可选步骤

    可以使用任何一种复制方式,也可以混合使用。顺便说一下:在某些问题上,基因可能并不总是具有相同的大小。在这种情况下,有性生殖是有问题的。如果您对这个问题感兴趣,请看一下NEAT算法,一种流行的神经进化算法,旨在解决这个问题(和)


    最后,精英主义(把表现最好的人复制给下一代)很普遍,但也可能有问题。遗传算法经常陷入次优解(称为局部极大值,任何变化都会降低适应度)。精英主义可能导致这一问题。当然,相反的问题是太多的多样性与随机搜索相似,因此您需要找到正确的平衡。

    克隆个体本身并不是一个坏主意,只要不是所有个体都被克隆。在这方面,本教程明确提到了交叉概率,因此不用说交叉将应用于某些个体。本教程还提到了广为人知的精英主义技术,该技术还将最好的个体从一代克隆到另一代,以避免搜索偏离潜在的最佳解决方案。你为什么不同意?