Skip to content

vpuhoff/NeuroLife

Repository files navigation

C# — Моделирование «разумной» жизни на базе нейронных сетей Программирование*, Ненормальное программирование*, Машинное обучение*, Занимательные задачки, C#* Данная статья посвящена исследованию возможностей нейронных сетей при их использовании в качестве основы для индивидуального разума моделируемого объекта.

Цель: показать, способна ли нейронная сеть (или ее данная реализация) воспринимать «окружающий» мир, самостоятельно обучаться и на основе собственного опыта принимать решения, которые можно считать относительно разумными.

Задачи

Описать и построить информационную модель. Реализовать модель и объекты на языке программирования Реализовать основные свойства, присущие разумным созданиям. Реализовать мыслительный аппарат и механизмы «восприятия» объектом модели окружающего мира Реализовать механизм взаимодействия объекта модели с окружающим миром и другими объектами

  1. Информационная модель Для описания информационной модели нужно понять какие основные характеристики объекта мы хотим увидеть, в качестве «основных» характеристик разумного существа я выделил следующие: Наличие механизмов восприятия окружающего мира; Наличие механизма взаимодействия с окружающим миром; Наличие памяти; Наличие мыслительных систем (какие бы они ни были); Возможность принимать решения о взаимодействии с окружающим миром на основе информации, которая воспринимается и опыта. Под окружающим миром примем пространство в плоскости с эвклидовой метрикой, с некоторым конечным количеством моделируемых объектов. Механизмы восприятия в пространстве могут быть различны, в данной модели такими механизмами приму 4 сенсора, объекта, которые могут дать информацию о окружающем мире. Под информацией об окружающем мире будет подразумеваться некое значение, пропорциональное расстоянию до ближайшего другого объекта. Так как 4 сенсора будут смещены относительно «центра» объекта он получит представление о том, где находится ближайший объект (в теории). Механизм взаимодействия в модели примем следующий: 4 «движителя», каждый из которых представляет то, насколько быстро объект стремится двигаться в том или ином направлении. 4 «движителя» позволят свободно перемещаться в пределах плоскости. Взаимодействием в таком случае будет возможность двигаться в пространстве. Наличие памяти возможно реализовать следующим образом: объекту будет сохранять информацию о данных с сенсоров и текущих «ускорениях» в движителях, таким образом имея массив из подобной информации можно составить полную информацию о том, что происходило с объектом. Под мыслительной системой будет подразумеваться нейронная сеть в той или иной конфигурации. Возможность принимать решения обусловлена архитектурой нейронной сети, опыт и воспринимаемая информация предоставляется памятью и сенсорами. Для того, чтобы решения имели какой либо смысл примем «стремления» для объектов:

  2. «Съесть» другой объект (в нашем случае объект будет «съеден» другим в случае, если приблизится на достаточное расстояние и будет «достаточно силен»).

  3. «Не быть съеденным», в нашем случае стараться не позволить другим объектам приблизиться к себе, чтобы не дать им возможности себя «съесть». Для принятия решения о «силе» ближайшего объекта примем еще 1 канал информации, который будет сообщать «сильнее ли ближайший объект». Таким образом, описанная модель объекта удовлетворяет всем поставленным требованиям.

  4. Реализация модели Для реализации модели будет использоваться язык программирования C#. В качестве реализации нейронной сети будет применяться Encog Machine Learning Framework. Он очень гибкий и быстрый, не говоря уже о простоте использования. Код модели достаточно простой, это не единственная возможная его реализация, данную модель может дополнить и изменить каждый. Функционирование объекта в данной реализации модели построено вокруг функции DoLive(), в которой поочередно происходят следующие жизненные этапы объекта: RefreshSense — обновление данных сенсоров (огляделся вокруг); Move — сделал шаг (переместился в пространстве); SaveToMemory — обновил память, запомнил текущую обстановку; Train — «обучился», проанализировал память; Compute — принял решение о положении движителей на основе опыта и информации о ближайшем объекте; Output — задал параметры движителей на основе принятого решения: Таким образом, протекает каждый жизненный цикл всех объектов на протяжении всего их существования.

  5. Проверка модели

Для просмотра результата моделирования потребуется каким либо образом извлечь информацию о текущем состоянии модели на каждом ее этапе, т.к. модель динамическая наиболее эффективным будет использование видеозаписи. Для реализации вывода в видео файл воспользуемся библиотекой AForge.Video.FFMPEG.

Пример 1. Без информации о силе ближайшего объекта (нет стремления избежать гибели): https://youtu.be/U4WHV2ut2h8

Пример 2. Высокая «инертность» мышления (реже останавливается поразмышлять о окружающем его мире и проанализировать опыт): https://youtu.be/nICAufwTXys

Пример 3. Конечный вариант реализации https://youtu.be/HQfK_hFbQGI

Пример 4. С функциями «размножения» и «охоты» https://youtu.be/G-39Zy3sHRQ

Пример 5. Расширенная модель, «генетическое» наследование «удачных» генов, мутации генов при наследовании, большее генетическое разнообразие (16 видов активации нейронов, различное число и конфигурация слоев) https://youtu.be/Rc-B62smeao

Пример 6. Расширение возможностей восприятия, объекты воспринимают не только ближайший объект, но и другие объекты также. https://youtu.be/ba6R-Yzkk74

Пример 7. Частичное наследование памяти от «родителя». https://youtu.be/U0fYdXymqOY

  1. Выводы Объектам подавалось минимум информации, не было никаких правил относительно движения или управления движителями, только информация об окружающем пространстве, объектах и обратная связь о своем состоянии. Этой информации оказалось достаточно, чтобы объекты "научились" самостоятельно находить и «поедать» «слабых» и «убегать» от «сильных». В целом нейронная сеть может использоваться для моделирования действий, достаточно разумных. Применение нейронных сетей в моделировании может иметь и прикладное значение, например в управлении игровыми объектами, достаточно описать "возможности", далее объекты будут «жить» своей жизнью, используя доступные возможности для своей выгоды. Принцип показанный в статье может найти применение в робототехнике, достаточно дать программе доступ к сенсорным системам, системам управления и поставить цель, благодаря памяти и нейронной сети устройство может самостоятельно "научиться" управлять доступными системами так, чтобы поставленная цель была достигнута. Все материалы, исходные коды бесплатны и доступны всем желающим. Надеюсь данная статья поможет тем, кто хочет научиться использовать нейронные сети.

About

Neuro network Life model

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages