这是一个一般性的问题,尽管我非常确定它的一些部分已经得到了回答,但我想要的是意见,而不是广泛的讨论。我打算做一篇关于进化计算和遗传编程的硕士论文,我想征求Linux/C++专家的意见,是否可以从遗传程序创建源代码文件,调用gcc来编译它们,如果他们无法编译来捕获失败的原因,如果他们确实编译来执行编译的程序(作为一个新的进程),然后能够向该程序发送输入并捕获输出和任何引发的异常(或崩溃)。我知道这个话题太宽泛了,但我想知道是否有人认为这是不可撤销的,尝试起来很愚蠢,或者是否有更好的方法来做到这一点。
发布于 2011-04-08 02:22:56
是的,这是可以做到的,而且实际上非常简单。你将源代码输出到一个临时文件(mkstmp),你fork/exec一个编译过程(即输出到一个临时文件),你fork/exec结果程序,在此之前你dup2和pipe来插入一个输入和一个输出。这是基本的Unix编程,这里用C语言并不是很复杂。
代码生成本身可能更难正确,但这在很大程度上取决于项目。
此外,我们已经有了几个月的现代工具:我相信对于这类东西,Clang肯定会是值得关注的东西。如果您计划执行的代码生成是简单的(或者不是简单的,但是是结构化的),您也可以直接输出LLVM代码。这并不难,并且使您能够生成高效的、及时编译的代码。
发布于 2011-04-08 02:14:17
在这个遗传程序中,你想优化什么?除了寻找运行的程序之外,你还会寻找什么标准?我不太明白你的意思。
明确地说,我问这个问题的原因是因为我只理解使用遗传算法来尝试解决某种优化问题。在这种情况下,您可以使用某种启发式方法来评估流程的所有子进程,然后根据启发式方法和选择标准培育新的子代。我不明白生成这个源代码的期望结果会是什么,或者你将如何创建启发式来评估它。
https://stackoverflow.com/questions/5585592
复制相似问题