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


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


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


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



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



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


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



    или так:



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


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


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




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


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



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


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



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



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



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



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



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



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



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



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




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



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




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


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



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

    Комментарии 9

      +1
      Я только не понял в чем эволюция заключается. Я вижу просто анимированных «кальмаров».
        +4
        В исходной статье подробно об этом написано, так эту часть кода особо не трогал в части переделки, поэтому и не стал повторять текст оригинала. Хотя может стоить и добавить, более развернуто.
          +5
          что-то минусуют на ровном месте, хотя публике виднее. Хотел наоборот порадовать, чем смог. Может время такое, в предыдущих статьях вроде спокойнее было в комментах.
          –5
          видимо, автор имеет ввиду эволюцию его кода
            0
            спасибо за Ваше мнение и комментарий.
          +1
          Нет ощущения, что щупальцы отталкиваются от воды. В оригинале видно расжатие-сжатие и ускорение в этот момент.
            +2
            В оригинальной графике еще есть вспомогательные элементы красного цвета на щупальцах, может поэтому ощущение сильнее. Алгоритм движения в 2D не менял. Но сам автор вроде оценил положительно )
            +1
            Первое, что всплыло в голове:
            image
              0

              Второе, что всплыло в голове blindsight.space
              Там ребята тоже заморачивались с анимацией щупалец болтунов

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

              Самое читаемое