0

对于当前的项目,我想使用遗传算法——目前我查看了jenetics库。

我怎样才能强迫某些基因相互依赖?我想在基因上映射 CSS,我有基因指示是否显示图像,如果它也是相应的高度和宽度。所以我想把这些基因作为一个整体,因为在交叉之后,染色体会指示“无图像”之类的东西是没有意义的 - 高度 100 像素 - 宽度 0 像素。

有没有办法做到这一点?或者也许另一个支持这个的库(在java中)?

非常感谢!

4

2 回答 2

1

您希望在系统中嵌入更多知识以减少搜索空间。

如果是关于解决方案结构的知识,我建议看一下语法进化(GE)。您的知识似乎更多地是关于密码子的有效组合,因此 GE 不容易适用。

将几个特征组合成一个密码子是可能的,但这可能是不希望的和/或不可行的(例如,由于大量可能的组合)。

但实际上你在这里没有问题:

  • 拥有无意义的基因型很好——它们将由于选择压力而被删除
  • 有无意义的密码子序列很好——它被称为“膨胀”;膨胀在一些进化算法中很常见(通常在遗传编程的背景下讨论)并且严格来说还不错;与臃肿作斗争会降低搜索性能
于 2018-05-30T19:06:00.393 回答
0

如果你知道你的基因组是如何编码的——也就是说,你知道哪些染色体序列形成了组——那么你可以扩展(因为你提到了 jenetics)io.jenetics.MultiPointCrossover以避免分裂组。(源代码可在GitHub上找到。)

如果随机切割索引之一将一个组拆分,将索引调整到组的最近端,则它可以像存储形成组的基因范围一样简单。(当然,这会在统计上导致在组的末端进行切割的可能性更高;最好生成一个新的随机位置,直到它不与组相交。)

但是,基于其他基因,拥有无意义(被忽略)的基因也是有效的(正如皮特所说)。如果组合是反生存的,它将被选中。

于 2018-05-30T17:59:55.280 回答