Sunday, October 18, 2015

Формирование нервной системы в процессе эволюции.

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

Описание модели

    На 2D поле имеются агенты, по своей привычке, я буду называть их энималами, и пища.

   
Энималы способны перемещатся вперед\назад, относительно текущего угла поворота, и изменять этот угол, т.е. вектор их действия аналогичен вектору в  полярной системе координат.
    Так же на окружности энимала содержатся сенсоры, таким образом, что в "голове" (90 градусов в направлении угла поворота энимала) содержится половина сенсоров, остальная половина равномерно распределена по оставшейся части окружности.
    Сенсор способен воспринять запах исходящий от пищи. Чем дальше пища - тем слабее будет запах. Зависимость от растояния линейное.

    У каждого энимала имеется простая нейронная сеть с количеством нейронов входного слоя равным количеству сенсоров, т.е. семь. В скрытом слое 2 нейрона. В выходном слое тоже два: первый выход - величина передвижения вперед\назад, второй - величина изменения угла поворота.
Количество нейронов в скрытом слое было выведено экспериментально.
   Не мало ли? При такой структуре скрытый слой имеет 2*7 связей со входным, а выходной 2*2 со скрытым, итого мы имеем 16 весов, как показала практика, этого достаточно чтобы сформировать нужное поведение.
   Энимал обладает энергией. Она пополняется, если агент находится около пищи, при этом пища уменьшается, пропорционально съеденому. А расходуется энергия на: существование, передвижение, почкование. Если она достигает нуля - особь умирает. Если её уровень выше 70% появляется шанс отпочковать потомство.
    При успешном почковании создается 2-5 новых особей, с такой же нейронной сетью как у родителя, но с некоторой случайной мутацией её весов.

Формирование пищи

    Сперва я превращал умерших энималов в пищу, а если её становилось на поле слишком мало, до добавлял еще. Но это не давало нужного результата. Зачастую либо все особи умирали, либо происходил "взрыв численности" и формирование поведения стремящегося к еде не происходило, потому что в нем не было особой пользы. Для того, чтобы произошёл эволюционный отбор нужно минимальное количество особей, для этого нужны благоприятные условия для их появления. Но, одновременно с этим, для того, чтобы эволюция отсеяла неприспособленных, нужны достаточно неблагоприятные условия. На решение этих противоречивых условий натолкнуло цикличность большинста процессов: цикл года, цикличность истории, цикл while, даже в моей древней программе прослеживалась цикличность появления потомства. В ней сперва происходил "взрыв численности населения", затем он достигал максимума и все одновременно начинали вымирать, выжившие, воспользовавшись освободившимся местом устраивали очередной "взрыв численности населения".
    Таким образом, я оставил лишь равномерное добавление пищи на поле, не зависимо от смертей энималов и текущего количества пищи на поле. Конкретнее, каждые 180 циклов добавляю 3 еденицы пищи случайного размера. В итоге мы имеем, что при малом количестве энималов  пищи скапливается большое количество и условия становятся благоприятными для размножения, но при возростании потребителей еды, её уже не хватает, условия становятся неблагоприятными, и эволюция, зловеще потирая руки, берется за свой отбор наиболее приспособленных.

Выводы

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

    Ну и конечно ссылочка на репозиторий с быдлокодом. Именно с таким кодом, ибо когда прет мысль формировать красивый код сложно.
https://github.com/zshimanchik/unconditioned-reflexes




No comments:

Post a Comment