Найти в Дзене
CyberBiology

Как это работает. Часть 1

Решил написать небольшие заметки о том, как устроен мой проект "Искусственная жизнь".
Мои решения не являются единственно правильными и идеальными, но возможно помогут кому-то в создании своего кибермира.
Начнем с генома. В качестве генов выступает код, который отвечает за поведение бота. Код должен быть простым и выдерживать различные модификации(случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
Код-геном представляет из себя цепочку чисел. Каждое число - это какая то команда(в простейшем случае).
Также есть указатель текущей команды, который показывает, какая команда будет сейчас выполняться и после выполнения команды, указатель перемещается к следующей команде. Если указатель вышел за край цепочки, то он появляется с противоположной стороны, то есть цепочка команд замкнута по кругу. Изначально я выбрал размер цепочки в 64 ячейки и назначил некоторым числам первые команды. Если числу не соответствует никакая команда, то это число является безусл

Решил написать небольшие заметки о том, как устроен мой проект "Искусственная жизнь".


Мои решения не являются единственно правильными и идеальными, но возможно помогут кому-то в создании своего кибермира.


Начнем с генома. В качестве генов выступает код, который отвечает за поведение бота. Код должен быть простым и выдерживать различные модификации(случайное изменение любого элемента в коде) над собой без синтаксических ошибок.


Код-геном представляет из себя цепочку чисел. Каждое число - это какая то команда(в простейшем случае).


Также есть указатель текущей команды, который показывает, какая команда будет сейчас выполняться и после выполнения команды, указатель перемещается к следующей команде. Если указатель вышел за край цепочки, то он появляется с противоположной стороны, то есть цепочка команд замкнута по кругу. Изначально я выбрал размер цепочки в 64 ячейки и назначил некоторым числам первые команды. Если числу не соответствует никакая команда, то это число является безусловным переходом. Когда указатель текущей команды укажет на ячейку с подобным числом,то он увеличивается(переходит по цепочке команд вперёд) на это число.


Так как у меня длина цепочки 64 ячейки, то доступных чисел тоже 64 (от 0 до 63).
Пример:
Допустим в ячейках под номерами 0 и 1 имеется такая последовательность 23, 63
23 - это получить энергию через фотосинтез.
63 - команда на это число не назначена
Указатель текущей команды = 0 и соответственно указывает на ячейку с числом 23, бот получает энергию от Солнца, а указатель увеличивается на 1 и теперь равен 1 (0+1=1).
Указатель теперь указывает на ячейку номер 1, где записано число 63, но такой команды нет.
Значит указатель увеличивается на 63. (1+63=64). Мы вышли за диапазон доступных адресов ( цепочка имеет номера от 0 до 63), поэтому вычитаем 64 (64-64=0). Теперь указатель текущей команды опять указывает на команду 23(фотосинтез). Фактически, из за того, что код замкнут по кругу, 63 - это шаг назад. Данный код будет выполняться бесконечно и другие ячейки будут бездействовать.


То, что число без назначенной команды является безусловным переходом очень удобно. При экспериментах можно спокойно назначать на свободные числа новую команду или убирать старую.


В следующей заметке расскажу об условных переходах.

Статья в ВК: https://vk.com/cyberbiology?w=wall-167044850_32