Описанная выше симуляция является по сути 0-мерной средой, где у всех программ равные шансы провзаимодействовать. Авторы попробовали сделать 1D и 2D среды с локальностью коммуникации. Само-репликаторы возникают во всех конфигурациях. Авторы сфокусировались на 2D с 32400 BFF программами на сетке 240x135. Программы взаимодействовали только с соседями в пределах двух клеток по каждой координате. Итерируются по всем программам P в случайном порядке, для каждой P равномерно выбирают соседа N и, если их ещё не брали в пару, выполняют обычную процедуру split(exec(PN)) → P′ + N′. Результат перезаписывает родителей. Неотобранные программы по-прежнему могут мутировать. В такой конфигурации само-репликаторы по-прежнему возникают, на рисунке 8 они красиво отображены на плоскости, где каждый квадратик 8x8 пикселей представляет одну ленту. Видео этой симуляции тут, можно медитировать пять минут. Игра жызнь на стероидах. Такой сетап влияет на скорость распространения репликаторов, для супа размера n у свежевозникшего репликатора время полузахвата супа составляет примерно log n шагов. Был ещё эксперимент с длинной лентой, 65536 байт, там случайно выбиралась позиция на ленте, откуда стартовало выполнение программы. Здесь саморепликатор -- это подстрока. И в таком эксперименте они тоже возникают, там только с начальными позициями обеих голов надо было поиграть (у второй смещение 12 или 16 относительно первой), чтобы нетривиальные репликаторы начали появляться. Этот эксперимент не обсуждается, но код для воспроизведения лежит в репе. Другие языки Авторы не предлагают пока какой-либо теории, определяющей, что делает язык или среду подходящей для возникновения само-репликаторов, но они наблюдают это поведение и в других языках кроме BFF. Во-первых, в языке форт (Forth), который является стековым языком. Команды с ленты либо запихивают что-то в стек, либо выполняют там операции. С фортом провели два эксперимента: аналог первичного бульона с выполнением пары лент, и аналог длинной ленты, когда индивидуальные интерпретаторы выполняются параллельно в разных частях ленты. Само-репликаторы возникли в обоих случаях, но авторы не нашли набора инструкций, которые работают в этих случаях “из коробки”. В варианте с бульоном использовался форт с ограниченным набором команд и снова ленты фиксированного размера. Интересная особенность такого форта в том, что он позволяет собрать тривиальный однобайтовый само-репликатор (команда с опкодом 0C, скопировать байт из ячейки через 64 символа, то есть с другой ленты в той же позиции), на базе него быстро возникает само-репликатор, копирующий целую ленту. Происходит это всё гораздо быстрее и надёжнее, чем в случае BFF. В варианте с двумерным супом само-репликаторы возникают в разных частях бульона. Они чуть отличаются друг от друга, так что в итоге никто из них в бульоне не доминирует, остаётся конкуренция. В варианте с длинной лентой (65536) несколько вариантов также продуцируют репликаторы, но не все. Возникают примерно за 60 секунд работы или 180B инструкций. В статье есть более подробный анализ, что именно возникает и как оно себя ведёт. На языке SUBLEQ (забавный Тьюринг полный язык с одной инструкцией, но таких языков кроме него -- десятки, см. OISC, сама по себе интересная тема). В терминах языка C инструкция с тремя операндами делает что-то такое (где pc -- program counter): ```*a -= *b; if (*a <= 0) { goto c; } else { goto pc + 3; } ``` Минимальный созданный авторами вручную репликатор занимает 60 байт. Возможно это длинновато для самозарождения. Авторы сделали свой вариант языка RSUBLEQ4, где у единственной инструкции 4 операнда и делает она следующее: ```*(pc + a) = *(pc + b) - *(pc + c); if (*a <= 0) { goto pc + d; } else { goto pc + 4; }``` В этом случае репликатор получается в 25 байт.
Описанная выше симуляция является по сути 0-мерной средой, где у всех программ…
Из этого канала
- #4373В обоих случаях, если репликатор подсадить в суп, он быстро распространяется.…
В обоих случаях, если репликатор подсадить в суп, он быстро распространяется. Но при рандомной инициализации суп остаётся равномерно рандомным и после…
- #4374Отдельного внимания здесь заслуживает симбиогенез, который выводит эволюцию за…
Отдельного внимания здесь заслуживает симбиогенез, который выводит эволюцию за пределы борьбы в общей нише и принципа “выживает наиболее приспособленный” в…
- #4394Очередной способ параллелизации размышлений. Мультитрединг приходит в LLM :)…
Очередной способ параллелизации размышлений. Мультитрединг приходит в LLM :) ThreadWeaver: Adaptive Threading for Efficient Parallel Reasoning in Language…
- #4371В доисторический период (до перехода) большинство само-модификаций происходят…
В доисторический период (до перехода) большинство само-модификаций происходят на концах ленты с редкими мутациями в середине.
- #4370Эксперименты начинаются со всеми любимого брейнфака (кстати, не знал, что есть…
Эксперименты начинаются со всеми любимого брейнфака (кстати, не знал, что есть такой прекрасный вариант упоминания как “bfuck”).