Поиск генератора случайных программ на питоне

Я ищу программу, которая может генерировать случайные, но действительные программы на Python, аналогичные

Генератор случайных Си программ.

Я пытался сделать это сам, давая случайный вклад в питона tokenize.untokenize() функции, но, конечно, большая часть сгенерированного исходного кода не была допустимой программой, с которой я мог бы интерпретировать eval(), Так что я хотел бы знать, если вы знаете, как генерировать случайные, но действительные программы на Python (возможно, используя ast модуль?) или если такой генератор уже существует.

РЕДАКТИРОВАТЬ: я хочу использовать случайный исходный код Python в качестве отправной точки для выполнения генетического программирования с Python. Поэтому я хочу иметь список случайных программ, а затем развивать их, скажем, программу, которая возвращает "Hello World!".

3 ответа

Решение

Поиск в Google для "случайного генератора программ" на python включил генератор случайных программ на Python.

Если вы хотите загружаемый скрипт, взгляните на pyfuzz.

Выполнение генетического программирования для развития императивных программ не совсем тривиально.

Вероятно, стоит задуматься о том, в каком представлении вы хотите эти программы, потому что, если вы планируете выполнять кроссовер / мутацию над ними, строковое представление, вероятно, не является идеальным. Скорее, какое-то дерево разбора или абстрактное синтаксическое дерево, вероятно, предпочтительнее. Это позволит вашим генетическим операторам легко манипулировать поддеревьями. Значительная сложность заключается в поддержании достоверности программ во время этих операций.

Один из подходов, который вы можете рассмотреть, - это использование основанной на грамматике эволюционной техники, такой как Grammatic Evolution или CFG-GP от Whigham. Затем вы можете предоставить синтаксис языка, используя грамматику BNF, и программы будут созданы для соответствия этой грамматике. Вы, несомненно, сможете найти грамматику для Python онлайн, которую вы можете адаптировать. У этих методов есть некоторые ограничения, поскольку они обычно используют контекстно-свободные грамматики и поэтому не могут представлять тонкие семантические ограничения, но при необходимости есть способы обойти это.

Еще одно соображение - действительно ли вы хотите, чтобы весь язык Python был доступен для эволюционного процесса. Чем больше функций вы сделаете доступными, тем больше пространство поиска. В традиционном GP наборы функций и терминалов определяются в соответствии с решаемой проблемой, и одна из проблем заключается в выборе синтаксиса, который является достаточно выразительным, но не чрезмерным. Используя отдельную грамматику, вы сможете использовать разные грамматики для разных задач.

Я рекомендую PushGP. Вот ссылка на класс Python.

Другие вопросы по тегам