我正在搜索一个可以生成随机但有效的python程序的程序,类似于
我试图自己给python tokenize.untokenize()
函数提供随机输入,但当然大多数生成的源代码都不是我用eval()
解释的有效程序。所以我想知道,如果你知道如何生成随机但有效的python程序(可能使用ast
模块?)或者如果这样的生成器已经存在。
编辑:我想使用随机python源代码作为使用python进行遗传编程的起点。所以我希望有一个随机程序列表,然后将它们演变为让我们说一个返回“Hello World!”的程序。
答案 0 :(得分:3)
谷歌搜索 python“随机程序生成器”打开了Random Python Program Generator。
如果您需要可下载的脚本,请查看pyfuzz。
答案 1 :(得分:2)
执行遗传编程以发展命令式程序并非完全无足轻重。
关于你想要这些程序的表示,可能值得考虑一下,因为如果你打算对它们执行交叉/变异,那么字符串表示可能并不理想。相反,某种parse tree或abstract syntax tree可能更可取。这将允许您的遗传操作员轻松操纵子树。然而,很大的困难在于在这些操作中保持程序的有效性。
您可能想要考虑的一种方法是使用基于语法的进化技术,例如Grammatical Evolution或Whigham的CFG-GP。然后,您可以使用BNF grammar提供语言语法,并生成符合此语法的程序。毫无疑问,您可以在线找到适合您的Python语法。这些技术存在一些局限性,因为它们通常使用无上下文语法,因此不能代表细微的语义约束,但如果有必要,可以采用相应的方法。
进一步的考虑是你是否真的希望整个python语言可用于进化过程。您提供的功能越多,搜索空间就越大。在传统的GP中,功能和终端集是根据正在处理的问题来指定的,并且挑战之一是决定具有足够表达力而不过度的语法。使用单独的语法,您将能够针对不同的问题使用不同的语法。
答案 2 :(得分:0)