遗传算法 - 求解具有硬行和软列约束的矩阵

时间:2012-07-18 00:58:03

标签: algorithm matrix genetic-algorithm

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

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

我需要一点建议就是我的交叉。父母选自具有较高健康分数的解决方案。我有一个单点交叉点,我从父亲的顶部切下一些行,从母亲那里切下一些免费的底行来产生后代。我不能逐列切片,因为这几乎总会使解决方案变得不可行。

这种方法对于交叉是否合理?我担心没有足够好的遗传'材料'代代相传,最终使这个可行。对于变异,我只是计划重新随机化一行或两行并检查解决方案的新适应度分数。

感谢您提出的任何建议。

1 个答案:

答案 0 :(得分:0)

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

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

  1. 最初使用“课程”适应度函数,这不会像VSOverflow所建议的那样严厉惩罚无效解决方案。文献中也没有这样的方法 - 例如Punch (1996)
  2. 将您的人口分成几个初始子群体,除偶尔外,不允许他们互动。这将减慢行的收敛速度,以便有希望的行不太可能被随机机会杀死。
  3. 如果更细粒度的选择可以交换甚至单个单元格(以受控方式,以便结果在之后仍然有效),这可能是一个好主意。