0

我一直在研究一个线性遗传编程系统,它为一个简单的寄存器机器进化字节码。如果目标输出不是多次相同的字符输出,我一直无法让解决方案收敛,我认为我一直在尝试的适应度函数是主要问题。

寄存器机器几乎是图灵完备的,除了被绑定到最大数量的操作。它的输入和输出功能一次输入或输出一个字符。我使用的选择算法可以处理多个适应度函数,这样每个函数都可以施加相同的选择压力,而无需微调平衡。所有适应度函数都返回整数,数字越小越好。

我目前正在使用这两个健身功能:

第一个从头开始逐位比较输出和目标,当它到达一个不相同的位时停止,然后返回剩余的位数,以较长者为准。

第二个也是逐位比较,并返回不同的总位数。

- 编辑

在尝试了一些事情之后,我发现了是什么阻止了它的收敛:以及两个适应度函数,我也一直在使用程序长度和执行时间作为适应度函数。我使用的选择算法为它们提供了相同的选择压力,但突变对这些功能的益处比测量输出质量的功能要大得多。解决方案是为每一代运行两次选择算法:第一次忽略程序大小和运行时间并消除 90% 的剩余程序,然后使用所有标准再次运行以消除剩余的 10% 剩余程序。

现在它收敛虽然非常缓慢,所以我仍然想知道是否有任何字符串比较指标可以更好地作为适应度函数。

4

0 回答 0