【发布时间】:2012-07-18 00:58:02
【问题描述】:
我正在编写一个 GP,我需要一些关于交叉和变异操作的建议。 GP 正在尝试为具有硬行约束和较软列约束的矩阵找到最佳解决方案。
对于总体中的给定解决方案,行包含来自固定集合的对象类型 ID 的随机组合。 GP 正试图找到一个解决方案,其中在布置行之后,如果您计算每列中的 id,则每种类型的数量必须在该 id 的推荐范围内。我编写了一个适应度函数,它允许我对解决方案与列约束的接近程度进行评分 - 100% 是所有列都符合规范。
我需要一点建议的地方是关于我的跨界车。父母是从具有较高健康分数的解决方案中选择的。我有一个单点交叉,我从父亲的顶部切割一些行和从母亲的互补的底部行来产生后代。我不能按列切片,因为这几乎总是会使解决方案不可行。
这种方法对于交叉来说是否合理?我担心没有足够好的遗传“材料”代代相传,最终无法实现。对于突变,我只是计划重新随机化一两行并检查解决方案的新适应度分数。
感谢您在我缓慢前进的过程中提供的任何建议。
【问题讨论】:
-
这个问题在programmers.stackexchange.com上可能会更好。
-
怎么样?在这个网站上搜索“遗传算法”发现了几页点击率,所有这些都与我的问题相同。
-
您的问题似乎更具概念性且不太具体。 SO 更适用于有关代码的特定问题,而 Programmers 则更适用于有关一般编码的概念性问题。
-
在生成新解决方案时,您可以在一定程度上放松硬约束。这将允许更多的多样性。您可以在违反约束的解决方案受到惩罚时添加惩罚,惩罚程度是违反程度的函数。随着违规解决方案的老化,您还可以增加该惩罚。这允许更大的多样性,并有助于爬山,尤其是在最初的几代人中。
标签: algorithm matrix genetic-algorithm