Saturday, July 2, 2016

Новая реализация и цветная еда.

Оптимизация

Давеча переписал имплементацию энималов. Ранее использовался IronPython с отрисовкой WPF. Аргументировал я это тем, что, во-первых, IronPython хорошо умеет работать с многопоточностью и он лишен тех недостатков, которыми обладает CPython со своим GIL. А во-вторых, тем что небольшие бенчмарки показывали существенное преимущество IronPython. В-третьих, удобство разработки UI.
Однако, перенеся проект с IronPython на Python версии 3.5, с использованием Qt для UI и OpenGL для прорисовки сцены, однопоточное выполнение этого кода имело такую же производительность как многопоточный код на IronPython! И когда я воспользовался возможностью подключать сторонние библиотеки в проект, и оптимизировал критические части программы с использованием библиотек numpy и scipy, то производительность увеличилась в пять раз. А при помощи уловки, при которой прорисовка сцены происходит каждые 200 циклов мира, в тот момент, когда мы не следим за происходящим, производительность улучшается еще в два раза, в итоге давая десятикратное ускорение. Стоит учесть что вычисления происходят на одном ядре процессора, что позволяет лично мне запускать три экземпляра программы одновременно, т.к. имею три ядра.
интерфейс программы
Стоит сказать что разрабатывать UI в Qt Designer также легко как и в visual studio, может даже и легче.

Изменения

Главным изменением стал отказ от гендерного  различия. Теперь потомство могут создавать любые две особи, у которых достаточно для этого энергии. Количество сенсоров уменьшилось с 7 до 3, т.к. этого вполне достаточно, чтобы определить направление расположения пищи по ее запаху. И результирующая топология нейронной сети являет собой: 3 сенсора во входном слое, 2 в скрытом и 2 в итоговом.
Рисуется агент синеватым цветом, а центре каждого агента рисуется круг, одним из оттенков серого, в зависимости от текущей наполненности энергией. Чем больший запас энергии в данный момент содержит агент - тем светлее будет этот круг.
Весь процесс эволюции можно посмотреть тут:


Код доступен на github.com в ветке only-food: https://github.com/zshimanchik/animals/tree/only-food

 Цветная еда

Чтобы усложнить им жизнь,  пища теперь появляется со случайным значением color в отрезке [0; 1]. Отображается на сцене она зелёным цветом (r=0, g=255, b=255), если color=0, и плавно перетекает в синий (r=0, g=0, b=255), когда color=1. Когда color=0.5, то пища рисуется цветом морской волны (r=0, g=255, b=255).
И запах пищи теперь характеризуется двумя атрибутами: двумерным вектором запаха и силой. Сила запаха прямо пропорционально зависит от размера куска еды:
smell_size = size * 21.0
А вектор запаха (g, b) строится в зависимости от атрибута color:
g = min(1.0, (1.0 - color) * 2)
b = min(1.0, color * 2)
 
Так как теперь есть два типа запахов, то каждый сенсор воспринимает в два раза больше величин, а значит у входного слоя нейронной сети теперь 6 нейронов.

В то же время теперь энималы тоже имеют цвет, значение его также в отрезке [0; 1]. Его значение определяет нейронная сеть, а значит у неё уже 3 нейрона в выходном слое: 1- поворот по или против часовой стрелки; 2- движение вперед или назад; 3-цвет. И так как у нас появилось больше информации для обработки, то в скрытом слое также увеличилось количество нейронов с 2 до 3.

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

EATING_VALUE 

то сейчас он съедает

EATING_VALUE * (1.0 - abs(animal.color - food.color))

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

Результат эволюции можно посмотреть тут:

Код доступен на github.com в ветке colored-food: https://github.com/zshimanchik/animals/tree/colored-food





Sunday, February 7, 2016

Добавление энималам ДНК

    Со времени прошлого поста я изменил технологии программирования и добавил несколько фич в модель, таких как ДНК. 
    Теперь вместо CPython + GTK я использую IronPython + WPF. Выбор в первую очередь был основан на том, что в IronPython реализуется действительная многопоточность, и при работе с этим интерпритатором очень удобно работать с gui.
    Ну да не будем заморачиваться технологическими вопросами и перейдём к главному.

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


На 2D-поле имеются агенты (зеленые и красные) и пища (серая) (см. рис. 2.1).
Рис. 2.1 Общий вид
Агент способны перемещаться вперед\назад относительно текущего угла поворота и изменять его, т.е. поворачиваться по или против часовой стрелки. А значит, его действие в конкретный момент времени можно выразить в виде вектора в полярной системе координат.

Sunday, October 18, 2015

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

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

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

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

   

Tuesday, June 16, 2015

Обучение НС с многомерным вектором ответа

Продолжаю разрабатывать свои идеи касающиеся моделирования условных рефлексов из этого поста. Самая главная проблема там решена весьма криво, хоть все и работало. Я говорю о случае с многомерным действием, когда Примитив может двигаться вправо\влево и вверх\вниз. Мы можем лишь поощрить его, либо наказать, но никак не сообщить по какому направлению  насколько ему лучше идти. Это терзало меня и не давало спать по ночам. =)
И давеча пришла простая и очевидная мысль как решить эту проблему.

Monday, June 8, 2015

Моделирование формирования видов в процессе эволюции

Копия Шиманчик_курсач_141222
РЕЗЮМЕ
Тема курсовой работы:“Моделирование формирования видов в процессе эволюции”
Работа содержит 21 страницу, 4 изображения.
Ключевые слова: моделирование, биология, эволюция, простейшие.

Моделирование примитивных условных рефлексов на основе нейронной сети

- no title specified

РЕЗЮМЕ

 

Тема курсовой работы

«Моделирование примитивных условных рефлексов на основе нейронной сети»

 

Работа содержит 14 страниц, 11 изображений.

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

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


Friday, October 17, 2014

Modeling of the theory of evolution

Recently I've found my ancient code. It belongs to my favorite application, which I called "Spores". There are small entities in 2D world, moving randomly. Each spore has an RGB color. Red channel value means spore's moving speed. Higher value - faster speed. Green means expected life long. Blue - speed of recuperation for reproducing. If blue value is high, then spore can reproduce frequently. When two sexually mature spores meet, they give birth to new spore with average value of both parent spores's colors plus with some probability it can mutate. As well as mutation value can be positive, it can be negative.
So, what have we got? At the beginning we have 10 spores with (10,10,10) color.