寻找一个随机Python程序生成器
我在寻找一个可以生成随机但有效的Python程序的工具,类似于
我尝试自己做这个,给Python的 tokenize.untokenize()
函数输入随机内容,但当然,大部分生成的代码并不是我能用 eval()
理解的有效程序。所以我想知道,你是否知道有什么方法可以生成随机但有效的Python程序(也许可以使用 ast
模块?)或者是否已经有这样的生成器存在。
补充:我想用这些随机的Python源代码作为开始,进行遗传编程。所以我想要一份随机程序的列表,然后逐步演变成一个,比如说,能够返回“Hello World!”的程序。
3 个回答
进行遗传编程来演化命令式程序并不是一件简单的事情。
在开始之前,想想你希望这些程序以什么样的形式存在是很重要的。因为如果你打算对它们进行交叉或变异操作,使用字符串表示可能不是最好的选择。相反,使用某种形式的解析树或抽象语法树可能更合适。这样,你的遗传操作就能更方便地处理子树。在这些操作中,保持程序的有效性是一个很大的挑战。
你可以考虑使用基于语法的进化技术,比如语法演化或Whigham的CFG-GP。这样,你可以使用BNF语法来提供语言的语法规则,生成的程序将符合这些规则。你肯定能在网上找到适合Python的语法,并进行调整。不过,这些技术有一些局限性,因为它们通常使用上下文无关语法,无法表示一些微妙的语义约束,但如果需要,也有解决办法。
另一个需要考虑的问题是,你是否真的希望整个Python语言都能在进化过程中使用。可用的特性越多,搜索的空间就越大。在传统的遗传编程中,函数和终端集合是根据要解决的问题来指定的,而其中一个挑战是选择一种足够表达但又不至于过于复杂的语法。使用单独的语法,你可以为不同的问题使用不同的语法规则。
在谷歌上搜索python "随机程序生成器",你会找到一个叫随机Python程序生成器的网站。
如果你想要一个可以下载的脚本,可以看看pyfuzz。