Выполнение генетического программирования для развития императивных программ не совсем тривиально.
Вероятно, стоит задуматься о том, в каком представлении вы хотите эти программы, потому что, если вы планируете выполнять кроссовер / мутацию над ними, тогдаСтроковое представление, вероятно, не идеально.Скорее, предпочтительнее какой-то вид дерева разбора или дерева абстрактного синтаксиса .Это позволит вашим генетическим операторам легко манипулировать поддеревьями.Тогда большая часть трудностей заключается в поддержании достоверности программ во время этих операций.
Один из подходов, который вы хотели бы рассмотреть, - это использование основанной на грамматике эволюционной техники, такой как Grammatic Evolution или Whigham's CFG-GP .Затем вы можете предоставить синтаксис языка, используя грамматику BNF , и программы будут созданы в соответствии с этой грамматикой.Вы, несомненно, сможете найти грамматику для Python онлайн, которую вы можете адаптировать.У этих методов есть некоторые ограничения, так как они обычно используют контекстно-свободные грамматики и поэтому не могут представлять тонкие семантические ограничения, но при необходимости есть способы обойти это.
Дальнейшее рассмотрение заключается в том, действительно ли вам нужен весь питонязык должен быть доступен для эволюционного процесса.Чем больше функций вы сделаете доступными, тем больше пространство поиска.В традиционном GP набор функций и терминалов определяется в зависимости от решаемой проблемы, и одной из проблем является выбор синтаксиса, который достаточно выразителен, но не чрезмерен.Используя отдельную грамматику, вы сможете использовать разные грамматики для разных задач.