根据Gregory Chaitin的metabiology模型,我试图破解进化模拟。
给定一个返回整数的算法,我需要随机改变它,试图获得另一种语法正确并最终停止的算法。如果突变是真正随机的,那么就不可能确保你获得的是一个有效的算法,它会停止。
我的问题是:
提前致谢
我在思考像:
x <- x + 1
x <- x - 1
y <- x
if x != 0 goto label
这是图灵完成,很容易修改。你觉得怎么样?
答案 0 :(得分:1)
如果突变是真正随机的,则无法确保您获得的是一种有效的算法,将会停止。
正如罗伯特B所指出的那样,一套图灵完备函数将满足你的第一部分,但没有解决你允许循环可能性的问题。但是,如果您可以删除循环,那么您可以生成一个表达式树,每次向它提供一些输入时都可以为您提供输出。表达式树具有有限的大小并保证终止,或者以另一种方式考虑它:要获得具有无限运行时间的表达式树,将要求表达式树具有无限节点(这将需要您具有无限的RAM或磁盘)。
有修剪表达式树的策略,以便为问题提供最小的解决方案,其中一些策略涉及使树的大小成为适应度函数的一部分。换句话说,在计算适应度时,要考虑表达式树的大小:当其他条件相同时(即两个解具有相同的精度),较小的解决方案优于较大的解决方案。
答案 1 :(得分:0)
LISP。好吧,任何homoiconic语言。但是LISP。阅读Koza的书http://www.genetic-programming.com/
答案 2 :(得分:0)
您在这里寻找的是“语法进化”,这将是遗传编程在不断发展的工作计算机程序中的应用。这是一个很好的网站:http://www.grammatical-evolution.com/。此外,您可以通过在Google中键入“FPGA遗传编程”来研究更基本的计算机制(如FPGA)的演变。
答案 3 :(得分:0)
嗯,问题的第一部分是关于有效的算法。如果你需要定义尽可能多的函数来确保图灵完整性(例如,+, - ,*,/,X,Y,Retval,loop,if),那么你已经满足了第一部分。我建议使用更高级别的函数,因为某些结构会一次又一次地不断发展,如果你只是把它放在函数列表中,你就会加速进化。例如,循环可以分解为if和goto,但是使用循环可以节省宝贵的进化能量,并且还可以确保有效性。
然而,你的第二部分是关于最终停止的算法。 This known to have no solution。一种替代方案是对程序可以执行的指令数量设置限制,如果程序违反了该限制则中止该程序,从而给予高额惩罚。或者,如果您有一个程序需要加载答案的终端(例如Retval),您可以暂停程序并检查该终端。