遗传算法交叉操作

问题描述 投票:0回答:2

我正在尝试在MATLAB中实现基本的遗传算法。我对交叉操作有一些疑问。我在阅读有关材料,发现总是选择两个父母进行交叉操作。

  1. 如果我碰巧有双亲,会怎样?

  2. 假设我有父母A,父母B和父母C,并且我将父母A与B杂交,又将父母B与C杂交以产生后代,即使这样我也得到了4个后代。由于我的人口总数应该始终保持不变,因此拒绝其中一个的标准是什么?我应该拒绝适应度最低的后代吗?

  3. 父母之间的算术运算,例如假设OR或AND运算,是否可以视为良好的交叉运算?我发现一些网站将其列为交叉操作,但我不确定。

  4. 我如何在多位父母之间进行交换?

genetic-algorithm crossover
2个回答
1
投票

“ Crossover”并不是一个定义明确的运算符,它是继承父母方面并以某种方式使用它们来产生与每个父母相似的后代的通用想法。因此,对于如何进行交叉的问题没有真正正确的答案。

实际上,您应该对问题域和编码采取有意义的措施。对于诸如二进制编码的个体的两个父重组之类的事情,有一些显而易见的选择-例如,诸如n点和统一交叉之类的事情。对于实值编码,如果从严格的生物学角度来看,诸如SBX之类的东西并不真正明智。而是,将它们简单地设计为具有一些预定的属性。同样,置换编码提供了许多众所周知的运算符(顺序交叉,循环交叉,边缘组合交叉等),这些运算符再次是对父级中哪些特征有意义以使其可用于特定问题域的分析的结果。 >

您可以自由地做同样的事情。如果您有三个父母(使用一些离散编码(如二进制)),则可以执行以下操作:

child = new chromosome(L)
for i=1 to L
    switch(rand(3))
        case 0:
            child[i] = parentA[i]
        case 1:
            child[i] = parentB[i]
        case 2:
            child[i] = parentC[i]

是否是一个好的运算符将取决于几个因素(问题域,编码的解释等),但这是产生后代的一种完全合法的方法。您还可以发明自己的更复杂的方法,例如,对多个亲本的每个等位基因值进行加权平均,执行AND和OR等布尔运算。如果您喜欢不同的布尔值,也可以构建一个更“结构化”的运算符父母有特定的角色。基本的差分进化算法选择三个父代a,b和c,并计算一个大致对应于后代的更新,例如a + F(b - c)(具有某些函数F)。


0
投票

考虑阅读以下学术文章:-DEB,Kalyanmoy等。快速精英的多目标遗传算法:NSGA-II。 IEEE进化计算交易,第6卷,第9页。 2,第182-197,2002。-DEB,Kalyanmoy;拉格拉·布珊(Ram Bhushan)农业。用于连续搜索空间的模拟二进制交叉。复杂系统,第9版,n。 2,第115-148,1995。

© www.soinside.com 2019 - 2024. All rights reserved.