Автоконструктивная эволюция


Автоконструктивная эволюция — это процесс, в котором сущности, претерпевающие эволюционные изменения, сами несут ответственность за создание своего собственного потомства и, таким образом, за аспекты самого эволюционного процесса. Поскольку биологическая эволюция всегда автоконструктивна, этот термин в основном используется в эволюционных вычислениях , чтобы отличить системы искусственного типа жизни от обычных генетических алгоритмов, в которых ГА выполняет репликацию искусственно. [1] [2] [3] [4] [5] Термин был придуман Ли Спектор. [6] [7] [8] [9] [10]

Автоконструктивная эволюция — хорошая платформа для ответов на теоретические вопросы об эволюции эволюционируемости . Предварительные данные свидетельствуют о том, что способ образования потомства существенно меняется в ходе эволюции. [11] Изучая эти паттерны, мы можем начать понимать, как развивающиеся системы организуют себя, чтобы развиваться быстрее. В конечном итоге такое понимание могло бы позволить нам улучшить нашу способность решать задачи с помощью эволюционных вычислений .

Эта повышенная способность к развитию процесса самовоспроизведения также считается важной для воссоздания незавершенного эволюционного процесса, наблюдаемого на Земле [12] .

Относительно простая форма автоконструкции встречается в таких системах, как Tierra и Avida . В этих системах программы реплицируют себя, выделяя место в памяти для своих потомков, а затем перебирая все инструкции в своем геноме и копируя каждую в новое выделенное пространство. [13] Это автоконструкция в том смысле, что программы несут ответственность за определение того, какой код окажется в потомке. Программы чаще всего делают точные копии самих себя, а изменения вносятся исключительно посредством событий мутации. В принципе, однако, программы могут создавать широкий спектр возможных потомков, копируя только подмножество своих геномов.

PushGP — это система генетического программирования , которая развивает код, написанный на языке Push. [8] Push — это язык на основе стека, разработанный для простого использования в генетическом программировании, в котором каждый тип переменной (например, строки, целые числа и т. д.) имеет собственный стек. Все переменные хранятся в стеке, связанном с их типом. Одним из типов переменных является исполняемый Push-код. В результате такой дизайн языка допускает богатую автоконструктивную эволюцию, рассматривая весь код, оставшийся в стеке кода в конце выполнения программы, как потомок программы. [14] Используя этот подход, программы имеют полный контроль над программами-потомками, которые они создают.