【问题标题】:Crossover technique in a genetic algorithm遗传算法中的交叉技术
【发布时间】:2013-12-05 19:43:05
【问题描述】:

我正在用 C++ 编写一个小型遗传算法框架。我的染色体被编码为位串,其中每个基因都有预定的大小。每条染色体在位串中一个接一个地存储它的基因。现在,我正在寻找实现交叉运算符。

我的问题是,在选择一个点之后的点从另一个染色体插入位,我在基因边界上这样做,或者我只是将染色体视为一串位,并忽略分裂进入基因?换句话说,我是把最小的可交换单元当作一个基因还是一个比特?

【问题讨论】:

    标签: c++ genetic-algorithm genetic-programming genetics


    【解决方案1】:

    当两条染色体一起繁殖时,存在基因交叉的随机概率。因此,您应该只交叉您认为的基因而不是较小的单位。

    【讨论】:

    • 所以我使用基因边界并且总是交换整个基因,而不是位。这很简单。谢谢!
    • 我已经在 Python 中实现了它,以使用 CYME 将稳压器放置在配电网络的最佳位置。然而,与基本的“顺序算法”相比,它不够有效。
    • 我会说这很奇怪。如果我错了,请纠正我,但我不会说身体——在繁殖时——有办法知道基因在哪里开始和结束。因此,我建议将最小单位视为等位基因而不是基因。
    【解决方案2】:

    通过查看 GA 所基于的生物学过程,可以最好地理解这个问题的答案。

    假设您要寻找的是单点分频器,您需要的是如下图所示;交叉影响整个染色体,而不仅仅是“最小的可交换单元”。

    有关更复杂的交叉场景(例如多点交叉或环形交叉)的详细信息,请参阅维基百科资源here

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 2016-08-31
      • 1970-01-01
      • 2015-07-03
      • 2016-09-16
      • 1970-01-01
      • 2011-10-11
      • 2015-07-15
      相关资源
      最近更新 更多