Такое ощущение, что попытки моделирования все какие-то избыточно сложные, с придумками сущностей сверх необходимого, навроде
https://m.habr.com/en/post/438302/. Пытались ли когда-нибудь сделать что-то "близкое к железу", т.е. организовать конкуренцию самокопирующихся программ за вычислительные ресурсы? Вероятно, эффективная реализация потребовала бы не вполне обычной операционки и даже не вполне обычной аппаратной платформы...
Я тему просматривал, но не читал по-настоящему, поэтому могу повторить то, что было сказано другими.
В оригинальной статье примеров больше, чем в сокращённом переводе. Есть там и ответ на Ваш вопрос --- упоминаются некие системы
Tierra и
Avida.
Да, в них в виртуальных машинах используется необычный набор команд, чтобы сделать самокопирующиеся программы устойчивыми к мутациям. Например, нет адресации, но есть поиск шаблона. Переход может выглядеть так, например: jmpf; nop0; nop0; nop1; другие команды. Команды nop не делают ничего, но, находясь за командой jmp, задают шаблон для поиска. Переход будет совершён на первую последовательность nop1; nop1; nop0 в коде.
Я не вникал глубоко, но ничего простого в системах не увидел.
Вообще говоря, сложность среды нужна для того, чтобы в отборе не было одного глобального оптимума. Но если хотите создать сложность простым набором правил, то, как давно известно, нужно обеспечить противоречивость этих правил.
Например, если хорошо быть сильным и быстрым, но сила положительно коррелирует с весом, а вес отрицательно коррелирует с быстротой, то появится разнообразие, множество компромиссных вариантов, все из которых будут примерно одинаково жизнеспособны.
Позже, когда доберусь до своих заметок, дам ссылку на книгу. Сейчас из памяти вылетели авторы и название.