Создание «искусственной жизни» на компьютере |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-07-30 06:53 В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере. картинка кликабельна Описание «мира ботов» Мир представляет из себя двухмерное, разбитое на квадраты поле. По горизонтали он замкнут по кругу, то есть если бот выйдет за левый край, то появится с правой стороны. Сверху и снизу движение ограниченно стеной. Мир, по задумке — это разрез водоёма, чем выше, тем больше энергии можно получить от Солнца. В нижней половине энергия Солнца уже не доступна. Собственно, этого уже достаточно. Я начинал эксперименты именно с таким миром. Код-геном Код-геном представляет из себя цепочку чисел. Каждое число — это какая то команда (в простейшем случае). Также есть указатель текущей команды (далее УТК), который показывает, какая команда будет сейчас выполняться и после выполнения команды, указатель перемещается к следующей команде. Если указатель вышел за край цепочки, то он появляется с противоположной стороны, то есть цепочка команд замкнута по кругу. Изначально я выбрал размер цепочки в 64 ячейки и назначил некоторым числам первые команды. Если числу не соответствует никакая команда, то это число является безусловным переходом. Когда УТК укажет на ячейку с подобным числом, то он увеличивается(переходит по цепочке команд вперёд) на это число. То, что число без назначенной команды является безусловным переходом очень удобно. При экспериментах можно спокойно назначать на свободные числа новую команду или убирать старую. Так как у меня длина цепочки 64 ячейки, то доступных чисел тоже 64 (от 0 до 63). На рисунке схематично изображен геном первого бота в виде замкнутой по кругу ленты. Все ячейки забиты командой 23. Это команда «фотосинтез». После её выполнения, бот получает энергию в количестве, зависящей от глубины, где бот находится. Также на рисунке изображена схема выполнения кода. Стоит отметить, что команда, кроме выполнения основной функции, также отвечает за изменение УТК. После выполнения такой простой команды, как «фотосинтез», УТК увеличивается на единицу. В данном примере будут последовательно выполнены все команды в коде-геноме.Допустим, что при появлении нового бота произошла мутация и в ячейку под номером 1 записалось число 63. После появления нового бота, его УТК равен 0, выполниться команда «фотосинтез», УТК увеличиться на 1. Теперь считывается число из ячейки 1 — это число 63. Этому числу не присвоено никакой команды, поэтому это безусловный переход. Сдвигаем УТК на 63 ячейки вперёд и теперь УТК снова указывает на команду «фотосинтез», в нулевой ячейке. Так будет повторяться по кругу. Заметьте, что внешнее поведение бота ни чем не будет отличаться от родителя, но использоваться будут только две ячейки из 64. Теперь рассмотрим более сложные команды, требующие параметров. Всего в мире ботов есть восемь направлений. Если нам нужна функция поворота, то можем использовать 8 команд, по одной команде для каждого направления. Но у нас всего 64 числа (0..63) и на все необходимые команды просто не хватит чисел. Поэтому будем ипользовать параметры. Например, мы присвоили числу 25 команду «поворот». Когда УТК укажет на ячейку с числом 25 (повернуть), то мы также берём следующее число. Из этого числа мы узнаем, куда надо повернуть. Число может быть от 0 до 63, а направлений 8. Что бы узнать направление, мы делим параметр на 8 и берём остаток от деления. Получиться одно из 8 значений (0..7) — это и есть направление, куда надо повернуть. Количество доступных чисел (64) кратно 8. Поэтому вероятность выбора одинакова для всех направлений. После выполнения команды, УТК перемещается не на одну ячейку, а на две, перепрыгивая параметр. Стоить заметить, что УТК может прийти к ячейке, которая в другой раз служила параметром. Теперь значение из этой ячейки будет командой. Это сильно усложняет анализ кода человеком, зато «виртуальная машина», выполняющая код бота очень проста в реализации. Допустим, нам нужна команда «сколько у меня энергии?» При выполнении этой команды, если энергии больше, чем получено в параметре, то переходим по одному адресу, если меньше, то по другому. Энергии может быть от 1 до 1000, а параметр от 0 до 63. Что бы обойти это ограничение, то при выполнении этой команды, параметр умножается на 15. Получаем такие варианты: 0, 15, 30, 45, 60 ...... 945. С полученным вариантом и сравниваем уровень энергии и по результатам сравнения к УТК прибавляется смещение. Значение смещений берётся из следующих ячеек после параметра. Подробное истолкование картинки выше Некоторые команды, такие как «посмотреть», «сделать шаг», «съесть», «поделиться энергией» являются разветвителями. В зависимости от того, что было в клетке, на которое было направленно действие, дальнейшее выполнение кода пойдет по разным веткам. Подробное истолкование картинки выше Реально бот сможет сделать шаг только в случае, если клетка была пуста, в других случаях бот останется на месте. Ну вот и всё. Таким образом бот получает информацию об окружающих его клетках. И поведение бота теперь не линейно, а зависит от окружения. Что в итоге получилось Ну а теперь скриншоты того, что получилось. Замечу, что картинки не столь интересно смотреть, как видео, где видно динамику развития мира. Многие интересные явления, такие как «пламяфилы» и «привидения» на статичных фотографиях выглядят не очень фотогенично, зато на видео завораживают. Для видео я использовал скриншот с каждого 25 хода. При этом, к сожалению, могут теряться некоторые любопытные моменты, такие, как короткие цикличные перемещения ботов Начинают появляться первые колонииКолонии уже сформировались. Можно увидеть розовых и сине-зеленых любителей разнообразного рациона.Любопытные диагональные поселения хищников.Любопытное шахматное расположение органики(трупиков ботов) посреди колонии.Вид мира менялся, но «шахматный» порядок сохранялся. Подозреваю, что боты использовали только 4 направления из 8. Вновь родившийся бот получает свой цвет от родителя. Потом, в зависимости от рациона, цвет может изменяться.Здесь видны красные скопления ботов. Они не кого не кушают и не получают энергию от Солнца, иначе бы позеленели.Энергию они получают от распределения энергии по колонии. Своего рода паразиты. Когда у колонии начинаются проблемы, то паразиты быстро погибают. Режим отображения энергии открывает новые стороны мира. Видно, как по разному распределяется энергия внутри колоний. Центральная колония имеет чёткие границы с левого края, но с правой стороны границы не имеет. Также с краев видна колония, где энергия идет по диагонали (так как мир по горизонтали замкнут в круг, то это одна и та же колония). Если в стандартном режиме колония выглядит единой, то в режиме отображения энергии можно различить, что в колонии могут существовать структуры, живущие по своим правилам. Своего рода колонии второго уровня.Начало массового вымирания. Красные боты переполнены энергией и они должны отпочкавать потомка, но свободного места нет и они погибают. Поедать органику боты тоже перестали. В итоге органика(бледно-розовая) заполнила всю верхнюю часть мира.Размер созданного мира маленький, так как большая часть работы и экспериментов проводилось на 7-дюймовом планшете, но для подобных экспериментов, чем масштабнее мир, тем лучше. На первой фотографии в статье использован скриншот с клона моего проекта, переписанного RomanoBruno на языке Java. Здесь уже другой масштаб и скорость работы выше. Ссылка на этот проект в конце статьи. Мир бурно развивается в течении нескольких часов, затем скорость падает, мир находит некоторое стабильно состояние и в нём и пребывает. Скорее всего сказываются малые размеры мира и скудность возможностей. Я решил взбодрить мир, который долго не менялся и произвёл «вспышку на Солнце». При этом у каждого второго бота в коде-геноме случайным образом меняется случайный байт. Состояние мира перед вспышкойПрошёл 21 ход после вспышки. Мир изрядно разрушен, большая часть ботов погибла.Прошло ещё 347 ходов, мир возвращается к жизни.Прошло более 2000 ходов и мир возвращается к прежнему виду, что стало для меня неожиданностью. Ожидал, что мир уже не будет прежним. Видимо, ни одна из спровоцированных мутаций не сделала бота лучше и все мутанты, со временем, погибли.Заметьте, что небольшая колония синих ботов по центру с справой стороны, похоже не заметила катастрофы. Что дальше Сейчас у меня частично написан, но временно заморожен из за нехватки времени, проект нового мира.
бизнес проект Заключение В отличие от генетического алгоритма, здесь нет деления на поколения, бот может вовсе не умирать и прожить до скончания веков(выключение компьютера). Здесь нет явно заданной фитнес-функции, определяющей, какой бот лучше, какой хуже, тем более это может меняться вместе с изменяющимся миром. Нету смысла, нету цели, только естественный отбор в изменяющемся мире. Ссылки Этот проект не единственный по данной тематике, но на момент создания я знал только об одном. Про него я прочитал в 93 году в журнале «Техника молодёжи». Статья меня зацепила. В то время у меня не было компьютера и я не предполагал, что когда-нибудь смогу реализовать подобное. Источник: habr.com Комментарии: |
|