需要帮助构建遗传算法的染色体

时间:2017-05-15 11:35:55

标签: artificial-intelligence genetic-algorithm genetic-programming genetic

我需要使用遗传算法设计时间表问题。该问题的参数是: 教师:8 主题:16 教室:4 天数:5 插槽:5

染色体结构应该是什么?

1 个答案:

答案 0 :(得分:0)

完全披露,这个答案引用了我自己的npm包。我会尽量使我的答案尽可能通用。

如果我们使用geneticalgorithm之类的东西来解决问题,则需要实现以下内容:

  1. 健身功能
  2. 变异功能
  3. 交叉功能
  4. 多样性功能(或doABeatBFunction)
  5. 您的问题确实涵盖了所有4个功能。让我们想象一下,你的染色体功能只是普通的旧JSON,并通过每个函数进行讨论。

    健身功能

    健身功能可以处理JSON吗?当然,你可以做到这一点。如果JSON不是有效的计划,则可以为其指定零适应度。如果你能以某种方式评价一个无效的时间表比另一个更好,那就更好了。

    突变功能

    你可以为你编写JSON变异函数吗?是。切换2名教师,或天或教室。它不必创建有效的孩子(但这可能是一个加号)

    交叉功能

    无论格式如何,这都可能很棘手。完成变异功能后,可以看到你的算法真正演变出更好的答案,然后进行交叉。交叉可以意味着从一个父母那里得到答案,从另一个家长那里得到答案的一部分。考虑到这一点,您可以使用一个教师和另一个教室。 Crossover不必涵盖所有可能的数据编码,因为它非常有用。分阶段实施并独立于遗传算法进行测试。

    多样性功能

    您可以测量两个JSON配置是相似还是不同?这应该是相当直接的。检查JSON中的每个节点以确定它是否相等将是合理的第一个实现。

    结论

    我相信你的染色体结构几乎可以是任何东西,只要你能想象如何实现上述功能。我提出了JSON,因为它不是一个结构,而是一种存储几乎任何结构的方法,只是为了证明这一点。

    遗传算法的核心取决于上述功能的实现,并且与染色体无关。只有你的函数实现必须使用染色体。

    干杯!