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

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

Небольшие заметки о том, как устроен мой проект "Искусственная жизнь".
В прошлый раз рассмотрели простейший вариант кода,
где под каждым числом подразумевается команда, либо безусловный переход.
Сегодня рассмотрим параметры команд.
Всего в моём мире есть восемь направлений. Если нам нужна функция поворота, то можем использовать 8 команд, по одной команде для каждого направления.
Но у нас всего 64 числа (0..63) и на все необходимые команды просто не хватит чисел.
Поэтому будем использовать параметры. Например, мы присвоили числу 25 команду поворот.
Когда указатель текущей команды (далее УКТ) укажет на ячейку с числом 25(повернуть), то мы также берём следующее число. Из этого числа мы узнаем, куда надо повернуть.
Число может быть от 0 до 63 (всего 64 числа), а направлений 8.
Что бы узнать направление, мы делим параметр на 8 и берём остаток от деления.
Получиться одно из 8 значений (0..7) - это и есть направление, куда надо повернуть.
Количество доступных чисел (64) кратно 8.

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


В прошлый раз рассмотрели простейший вариант кода,
где под каждым числом подразумевается команда, либо безусловный переход.


Сегодня рассмотрим параметры команд.
Всего в моём мире есть восемь направлений. Если нам нужна функция поворота, то можем использовать 8 команд, по одной команде для каждого направления.


Но у нас всего 64 числа (0..63) и на все необходимые команды просто не хватит чисел.
Поэтому будем использовать параметры. Например, мы присвоили числу 25 команду поворот.
Когда указатель текущей команды (далее УКТ) укажет на ячейку с числом 25(повернуть), то мы также берём следующее число. Из этого числа мы узнаем, куда надо повернуть.
Число может быть от 0 до 63 (всего 64 числа), а направлений 8.
Что бы узнать направление, мы делим параметр на 8 и берём остаток от деления.
Получиться одно из 8 значений (0..7) - это и есть направление, куда надо повернуть.
Количество доступных чисел (64) кратно 8. Поэтому вероятность выбора одинакова для всех направлений.
После выполнения команды, УКТ перемещается не на одну ячейку, а на две, перепрыгивая параметр.


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


Это сильно усложняет анализ кода человеком, зато "виртуальная машина", выполняющая код бота очень проста в реализации.
Допустим, нам нужна команда "сколько у меня энергии?" При выполнении этой команды, если энергии больше, чем получено в параметре, то переходим по одному адресу, если меньше, то по другому.


Энергии может быть от 1 до 1000, а параметр от 0 до 63. Что бы обойти это ограничение, то при выполнении этой команды, параметр умножается на 15. Получаем такие варианты:
0, 15, 30, 45, 60 ...... 945.
С полученным вариантом и сравниваем уровень энергии и по результатам сравнения переходим по заданному адресу.


Как осуществляется условный переход, видимо, в следующей заметке.

Михаил Царьков

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