我一直在研究一种线性遗传编程系统,它可以为简单的寄存器机器提供字节码。如果目标输出不是多次相同的字符输出,我一直无法获得收敛的解决方案,我认为我一直在尝试的适应度函数是主要问题。
注册机几乎完全图灵,除了受到最大数量的操作约束。其输入和输出功能一次输入或输出一个字符。我正在使用的选择算法可以处理多个适应度函数,这样每个都可以施加相同的选择压力,而无需微调天平。所有适应度函数都返回整数,数字越小越好。
我现在正在使用这两种健身功能:
第一个从开始比较输出和目标,当它到达一个不相同的位时停止,然后返回剩余的比特数。
第二个也逐位比较,并返回不同的总位数。
- 修改
在尝试了一些事情之后,我发现了什么阻止了它的融合:以及两个健身功能我也一直在使用程序长度和执行时间作为适应度函数。我正在使用的选择算法给予它们所有相同的选择压力,但是对于那些函数而言,突变比测量输出质量的函数更有可能是有益的。解决方案是为每一代运行选择算法两次:第一次忽略程序大小和运行时并消除90%的剩余程序,然后使用所有标准再次运行它以消除剩余的10%剩余。
现在它虽然收敛速度很慢,但我仍然想知道是否有任何字符串比较指标可能更适合作为适应度函数。