0

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

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

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

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

感谢您在我前进时提供的任何建议。

4

1 回答 1

0

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

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

  1. 正如 VSOverflow 所建议的那样,最初使用“课程”适应度函数,它不会像最初那样严厉地惩罚无效解决方案。文献中也没有缺少这种方法——例如,参见Punch (1996)
  2. 将你的人口分成几个初始亚群,除了偶尔之外,不要让他们互动。这将减慢行的收敛速度,从而使有希望的行不太可能被随机机会杀死。
  3. 如果更细粒度的选择甚至可以交换单个单元格(以受控方式,以便之后结果仍然有效),那可能是一个好主意。
于 2012-07-19T17:58:09.237 回答