【问题标题】:Genetic Algorithm - solving a matrix with hard row and soft column contraints遗传算法 - 求解具有硬粗和软列约束的矩阵
【发布时间】:2012-07-18 00:58:02
【问题描述】:

我正在编写一个 GP,我需要一些关于交叉和变异操作的建议。 GP 正在尝试为具有硬行约束和较软列约束的矩阵找到最佳解决方案。

对于总体中的给定解决方案,行包含来自固定集合的对象类型 ID 的随机组合。 GP 正试图找到一个解决方案,其中在布置行之后,如果您计算每列中的 id,则每种类型的数量必须在该 id 的推荐范围内。我编写了一个适应度函数,它允许我对解决方案与列约束的接近程度进行评分 - 100% 是所有列都符合规范。

我需要一点建议的地方是关于我的跨界车。父母是从具有较高健康分数的解决方案中选择的。我有一个单点交叉,我从父亲的顶部切割一些行和从母亲的互补的底部行来产生后代。我不能按列切片,因为这几乎总是会使解决方案不可行。

这种方法对于交叉来说是否合理?我担心没有足够好的遗传“材料”代代相传,最终无法实现。对于突变,我只是计划重新随机化一两行并检查解决方案的新适应度分数。

感谢您在我缓慢前进的过程中提供的任何建议。

【问题讨论】:

  • 这个问题在programmers.stackexchange.com上可能会更好。
  • 怎么样?在这个网站上搜索“遗传算法”发现了几页点击率,所有这些都与我的问题相同。
  • 您的问题似乎更具概念性且不太具体。 SO 更适用于有关代码的特定问题,而 Programmers 则更适用于有关一般编码的概念性问题。
  • 在生成新解决方案时,您可以在一定程度上放松硬约束。这将允许更多的多样性。您可以在违反约束的解决方案受到惩罚时添加惩罚,惩罚程度是违反程度的函数。随着违规解决方案的老化,您还可以增加该惩罚。这允许更大的多样性,并有助于爬山,尤其是在最初的几代人中。

标签: algorithm matrix genetic-algorithm


【解决方案1】:

在任何遗传算法中,应选择适合于解决方案编码的交叉方法。如果以特定方式穿越会使许多后代无法生存,那么您不应该那样穿越它们。但是,跨行听起来确实会妨碍您彻底探索搜索空间。

您可以使用多种方法来解决此问题:

  1. 最初使用“课程”适应度函数,它不会像 VSOverflow 所建议的那样严厉惩罚无效的解决方案。文献中也不乏此类方法 - 例如,请参阅 Punch (1996)
  2. 将您的种群分成几个初始亚种群,除非偶尔,否则不要让它们相互作用。这将减慢行的收敛速度,从而减少有希望的行被随机机会杀死。
  3. 如果更细粒度的选择甚至可以交换单个单元格(以受控方式,以便之后结果仍然有效),那可能是个好主意。

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 2013-07-25
    • 2016-01-13
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2011-09-17
    • 2023-04-08
    • 2016-04-07
    相关资源
    最近更新 更多