Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров7.9K


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


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


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



Оригинальная статья взятая за основу при программировании кальмаров(осьминогов)



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


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



или так:



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


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


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




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


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



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


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



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



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



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



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



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



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



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



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




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



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




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


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



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

Теги:
Хабы:
+37
Комментарии9

Публикации

Изменить настройки темы

Истории

Работа

Data Scientist
60 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн