4

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

总之,我有:

  • 包含三个基因 [ abc ] 的染色体,每个基因受一些不同的限制。

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

我做了什么:

  • 生成 a、b 和 c 的随机值,例如 20 个总体。即
    [a1 b1 c1] [a2 b2 c2]…..[a20 b20 c20]

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

我遇到的困难:

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

  • 我知道进行交叉的概念(生成随机数、概率……等),但是将选择哪些父母以及其中多少人进行交叉或突变?
    我应该为整个 20 个解决方案(父母)做交叉还是只做两个?

4

2 回答 2

1

通常,遗传算法用于找到具有巨大搜索空间的问题的良好解决方案,其中找到绝对解决方案非常困难或不可能。显然,我不知道您的值的范围,但由于您只有三个基因,因此很可能通过遗传算法(或更简单的搜索策略)找到一个好的解决方案,而无需任何额外的运算符。选择和交叉通常在种群中的所有染色体上进行(尽管按原样携带每一代最好的染色体并不少见)。一般的想法是,更适合的染色体更有可能被选择并相互交叉。

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

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

于 2013-10-07T07:43:05.817 回答
0

从“C++ 中的实用神经网络食谱”一书中分享一些建议……在您的第一个 epoc 中拥有大量人口是个好主意,然后您可能会包含有助于可接受解决方案的功能。以后可能拥有较小人口的 epoc 将调整、组合或淘汰这些有利的特性。

Handbook -Multiparent-Eiben似乎表明四个父母比两个好。然而,床制造商还没有抓住这一点,似乎只生产单人床和双人床。

于 2019-09-26T12:26:24.883 回答