Нейроэволюция киберкальмаров. Перезагрузка графики

в 14:11, , рубрики: Дизайн игр, искусственная жизнь, искусственный интеллект, Компьютерная анимация, машинное обучение, нейронные сети, разработка игр, симуляция жизни, спайковые нейронные сети, эволюционное моделирование

Нейроэволюция киберкальмаров. Перезагрузка графики - 1

С интересом слежу за темой симуляции живого посредством компьютерных программ. Нейросети демонстрируют огромный прогресс переваривая гигабайты информации.
Обучение нейронных сетей, в части требуемых ресурсов, далеко ушло от среднего по мощности настольного компьютера. Поэтому всегда интересны "игрушечные" проекты с быстрой обратной связью в части обучения нейросетей. А лучше всего, чтобы нейросеть сама и обучалась без заметных усилий со стороны разработчика. Этой весной был приятно удивлен обнаружив статью Job Talle о нейроэволюции кальмаров.

Относительно небольшая статья содержала как описание физических принципов движения кальмаров, так и описание невиданной мной в работе спайковой нейронной сети, приводящей щупальца кальмаров в движение и поверх этого генетический алгоритм для естественного отбора наиболее приспособленных особей. О чем статья, скорее о том как подковал блоху.

Начнем с источников:

Нейроэволюция киберкальмаров. Перезагрузка графики - 2
Оригинальная статья взятая за основу при программировании кальмаров(осьминогов)

Нейроэволюция киберкальмаров. Перезагрузка графики - 3

Перевод вышеуказанной статью на Хабре.

Если читатель пройдет по ссылкам, то обнаружит подробный рассказ(и его перевод) о реализации нейроэволюции на примере кальмаров. Результат статьи будет выглядеть так:

Нейроэволюция киберкальмаров. Перезагрузка графики - 4

или так:

Нейроэволюция киберкальмаров. Перезагрузка графики - 5

В статье приводятся исходный код и ссылка на симуляция выполняемую в браузере.

Когда все уже готово, рассказано и показано, остается вопрос, а как эта программа работает на самом деле.

Поэтому решил переписать код изначально созданный под JavaScript на более близкий мне с++. Как всегда бывает с чужим кодом, сначала многое было непонятно. Чего стоит такой вот пассаж:

Нейроэволюция киберкальмаров. Перезагрузка графики - 6

Нейроэволюция киберкальмаров. Перезагрузка графики - 7

простыми словами автор программы включил в индекс нейрона и его тип, зачем этот прием из 80-х годов непонятно. Вроде сейчас памяти хватает в компьютерах.

Но в целом прототип заработал и стал выглядеть примерно так:

Щупальца удлинил относительно оригинальных вариантов, показалось более гармонично.
Но картинка выглядела слишком схематично.

Решил добавить для гладкости сплайны по точкам щупалец и сдвиг точек сплайна от центральной линии щупальца в зависимости от расстояния от тела кальмара.

Нейроэволюция киберкальмаров. Перезагрузка графики - 8

выглядит неплохо, но переход щупальца к телу хотелось увидеть более естественным, добавил более сильный отступ от центра щупальца:

Нейроэволюция киберкальмаров. Перезагрузка графики - 9

в итоге остановился на таком варианте:

Но кальмары скорее всего не прозрачные, поэтому картинка больше про медуз:

Нейроэволюция киберкальмаров. Перезагрузка графики - 10

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

Нейроэволюция киберкальмаров. Перезагрузка графики - 11

или в движении:

Нейроэволюция киберкальмаров. Перезагрузка графики - 12

и более мультипликационно:

Нейроэволюция киберкальмаров. Перезагрузка графики - 13

Дело сделано в 2D, но 3D все еще мейнстрим, поэтому переходим к следующему этапу. Сначала понять как буду крепить щупальца:

Нейроэволюция киберкальмаров. Перезагрузка графики - 14

Решил сначала физику переписать с нуля:

Нейроэволюция киберкальмаров. Перезагрузка графики - 15

Нейроэволюция киберкальмаров. Перезагрузка графики - 16

Видно, что опирается на щупальца, добавил коллизии щупалец и прочее из набора физического движка. Потянуло на проверенный временем Bullet Physics Library:

Нейроэволюция киберкальмаров. Перезагрузка графики - 17

Но вскоре решил не трогать то, что работало изначально и просто добавил еще одно измерение в первоначальную физику:

Нейроэволюция киберкальмаров. Перезагрузка графики - 18

получилось похоже на оригинал но в 3D. На видео видно баг, когда одна из щупалец ломается. Дело в том, что в 3D поиск нормали к вектору не совсем тривиальная задача. Местами симуляция движения щупальца ошибалась в выборе нормали. Поправил.

Конечный результат, что-то из фильма "Матрица":

Нейроэволюция киберкальмаров. Перезагрузка графики - 19

Судя по первым комментариям, есть непонимание в части "анимации" движения щупалец. Щупальца приводятся в движение сигналами от конечных(выходных) нейронов, количество которых равно количеству щупалец у кальмара. Смещение начального сегмента щупальца зависимости от величины и знака сигнала(положительный или отрицательный) на выходном нейроне. Сенсоры сейчас особо не развиты и поэтому эволюция больше идет в части скорости движения кальмара.Больше скорость, больше еды собирает. В оригинальной программе на вход нейрона автор вообще ничего не подает. Готов рассмотреть предложения: какие сенсоры разместить на 3D варианте? думаю материала наберется для целой статьи.

Автор: Geo Evclid

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js