代谢组学:如何随机改变算法以确保新版本有效并将停止?

时间:2011-07-27 19:27:22

标签: genetic-algorithm genetic-programming

根据Gregory Chaitin的metabiology模型,我试图破解进化模拟。

给定一个返回整数的算法,我需要随机改变它,试图获得另一种语法正确并最终停止的算法。如果突变是真正随机的,那么就不可能确保你获得的是一个有效的算法,它会停止。

我的问题是:

  • 这样做最好的图灵完整语言是什么?
  • 遗传编程是否有任何技术可以解决这个问题?

提前致谢


我在思考像:

x <- x + 1
x <- x - 1
y <- x
if x != 0 goto label

这是图灵完成,很容易修改。你觉得怎么样?

4 个答案:

答案 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),您可以暂停程序并检查该终端。