Поиск генератора случайных программ на питоне
Я ищу программу, которая может генерировать случайные, но действительные программы на Python, аналогичные
Генератор случайных Си программ.
Я пытался сделать это сам, давая случайный вклад в питона tokenize.untokenize()
функции, но, конечно, большая часть сгенерированного исходного кода не была допустимой программой, с которой я мог бы интерпретировать eval()
, Так что я хотел бы знать, если вы знаете, как генерировать случайные, но действительные программы на Python (возможно, используя ast
модуль?) или если такой генератор уже существует.
РЕДАКТИРОВАТЬ: я хочу использовать случайный исходный код Python в качестве отправной точки для выполнения генетического программирования с Python. Поэтому я хочу иметь список случайных программ, а затем развивать их, скажем, программу, которая возвращает "Hello World!".
3 ответа
Выполнение генетического программирования для развития императивных программ не совсем тривиально.
Вероятно, стоит задуматься о том, в каком представлении вы хотите эти программы, потому что, если вы планируете выполнять кроссовер / мутацию над ними, строковое представление, вероятно, не является идеальным. Скорее, какое-то дерево разбора или абстрактное синтаксическое дерево, вероятно, предпочтительнее. Это позволит вашим генетическим операторам легко манипулировать поддеревьями. Значительная сложность заключается в поддержании достоверности программ во время этих операций.
Один из подходов, который вы можете рассмотреть, - это использование основанной на грамматике эволюционной техники, такой как Grammatic Evolution или CFG-GP от Whigham. Затем вы можете предоставить синтаксис языка, используя грамматику BNF, и программы будут созданы для соответствия этой грамматике. Вы, несомненно, сможете найти грамматику для Python онлайн, которую вы можете адаптировать. У этих методов есть некоторые ограничения, поскольку они обычно используют контекстно-свободные грамматики и поэтому не могут представлять тонкие семантические ограничения, но при необходимости есть способы обойти это.
Еще одно соображение - действительно ли вы хотите, чтобы весь язык Python был доступен для эволюционного процесса. Чем больше функций вы сделаете доступными, тем больше пространство поиска. В традиционном GP наборы функций и терминалов определяются в соответствии с решаемой проблемой, и одна из проблем заключается в выборе синтаксиса, который является достаточно выразительным, но не чрезмерным. Используя отдельную грамматику, вы сможете использовать разные грамматики для разных задач.