我们应该选择多少和哪些父母进行遗传算法中的交叉

时间:2013-10-05 22:33:09

标签: matlab genetic-algorithm evolutionary-algorithm mutation fitness

我已经阅读了很多教程和论文,并且我理解了遗传算法的概念,但是我在Matlab中实现这个问题时遇到了一些问题。

总之,我有:

  • 含有三个基因[a b c]的染色体,每个基因都受到一些不同的限制。

  • 评估目标函数以找到最佳解决方案

我做了什么:

  • 生成a,b和c的随机值,比如说20个种群。即
    [a1 b1 c1] [a2 b2 c2] ...... [a20 b20 c20]

  • 在每个解决方案中,我评估了目标函数,并将解决方案从最佳到最差排列。

我遇到的困难:

  • 现在,我们为什么要选择交叉和变异?我发现最好的解决方案还不够吗?

  • 我知道做交叉的概念(生成随机数,概率......等),但父母和他们中的多少人会被选中做交叉或变异?
    我应该为整个20个解决方案(父母)或只有两个解决方案进行交叉吗?

2 个答案:

答案 0 :(得分:0)

通常,遗传算法用于找到具有巨大搜索空间的问题的良好解决方案,其中找到绝对解决方案是非常困难或不可能的。显然,我不知道你的价值范围,但由于你只有三个基因,很可能通过遗传算法(或更简单的搜索策略)找到一个好的解决方案,而不需要任何额外的算子。选择和交叉通常在人群中的所有染色体上进行(尽管从每一代向前传播一些最好的情况并不罕见)。一般的想法是,更健康的染色体更容易被选择并相互交叉。

突变通常用于阻止遗传算法过早收敛于非最优解。您应该在没有突变的情况下分析结果,看看是否需要它。突变通常在每一代人的整个人群中进行,但概率非常小。给每个基因0.05%的机会它会发生变异并不少见。你通常想要给出很小的突变几率,而不会完全覆盖选择和交叉的结果。

正如我所建议的那样,我会对遗传算法进行更为一般的背景阅读,以便更好地理解其概念。

答案 1 :(得分:0)

在“ C ++中的实用神经网络食谱”一书中分享一些建议...第一次尝试时要大量使用大量的人口,这是一个好主意,然后您可能会包含有助于达成可接受解决方案的功能。后来人口较少的epoc会调整并结合或淘汰这些有利特征。

Handbook-Multiparent-Eiben似乎表明四个父母胜过两个父母。然而,床制造商还没有赶上这一步,似乎只生产单床和双人床。