2

的是什么与Ñ(任意> 0号)之间使用一个基因型的差异染色体与1(一)的基因,并用1(一)染色体中的基因型与Ñ(相同数字)基因?差异论文两个种基因型

在代码:

// 3 chromosomes with 1 gene each 
Genotype.of(
    DoubleChromosome.of(0,1), 
    DoubleChromosome.of(0,1), 
    DoubleChromosome.of(0,1) 
) 

// 1 chromosome with 3 genes each 
Genotype.of(
    DoubleChromosome.of(
     DoubleGene.of(0,1), 
     DoubleGene.of(0,1), 
     DoubleGene.of(0,1) 
    ) 
) 

我的问题是不是得到eval函数内的值,但如果能以某种方式(结果或进化)改变遗传算法。

UPDATE

我使用Jenetics库。

+0

请将您使用的库添加到描述中。 – RonaldFindling

+0

嗨,我试图把它作为一个标签(jenetics),但stackoverflow要求1500声望来创建一个新的:)。 – Dyorgio

+0

您的重组和变异操作符可能会以不同的方式处理这两种情况。 – RonaldFindling

回答

1

当您设计遗传算法,你需要你的“基因”,映射到一个或多个染色体。你的问题似乎是“多染色体有什么影响?”

在繁殖阶段,从两个现有(父母)基因组中创建一个新的(子)基因组。一般而言,对于每个染色体,您执行以下操作:

  1. 选择以父母开始的染色体。
  2. 沿着染色体线性走下来,将位(或任何密码子)拷贝到正在构建的子染色体上。
  3. 在每一位,翻转一个随机数,看看你是否应该“交叉”到另一个父染色体作为拷贝的来源。
  4. 随着每一位被复制,翻转另一个随机数以查看该位是否应该“变异”。

因此,在染色体内,亲本遗传物质的混合量受交叉率控制。

如果您的交叉率非常低(或为零),并且您只有一条染色体,那么每个孩子可能是一个父母或另一个父母的副本。这通常应该避免,因为它消除了可以显着提高遗传算法性能的基因混合的重要组成部分。

如果您有两条染色体,那么有50%的机会将孩子作为父母之一的副本,并有50%的机会成为半数。

如果你有10条染色体,那么有512个机会中的一个作为父母之一的副本。

换句话说,当应用有性繁殖(不管使用的交叉率如何)时,至少有少数染色体可以产生良好的遗传混合。

如果你每个染色体有一个“基因”,那么你最终会随机混合父代基因在每一代。这意味着您的遗传算法无法选择位于同一染色体上的基因的良好组合。这通常应该避免,因为它消除了可以显着提高遗传算法性能的基因混合的重要组成部分。

我的建议是遵循大自然的先导,并在5-50范围内使用许多染色体。您可能想要尝试改变染色体的数量并查看它如何影响应用程序的性能。

+0

最完整的答案,tks! – Dyorgio

1

这两种基因型之间的差异是创建的双基因的允许范围。在第一版中,三条染色体的基因允许有不同的范围(它们实际上没有)。在第二个版本中,基因型创建了一条长度为3的染色体,其中所有基因都被迫具有相同的数值范围(第一个基因的范围)。另一个区别是,交叉操作仅在具有相同索引或数字范围的染色体上进行。

如果你的双基因有相同的数值范围,比第二个版本通常是更好的选择。你可以在一个更自觉的方式来创建这个版本:

Genotype.of(DoubleChromosome.of(0.0, 1.0, 3)); 
+0

很好的答案,恢复,但重要的信息,tks! – Dyorgio