Моделирование поведения животных с использованией нейронных сетей

Моделирование поведения животных с использованией нейронных сетей

Курсовая работа

Выполнил студент 3 курса, 302-МАИ группы, Николаев Дмитрий

Оренбургский государственный педагогический университет

Оренбург 2010

Введение

Нейронная сеть в (теории искусственного интеллекта) — упрощённая модель биологической нейронной сети.

Нейронные сети возникли из исследований в области искусственного интеллекта, а именно, из попыток воспроизвести способность биологических нервных систем обучаться и исправлять ошибки, моделируя низкоуровневую структуру мозга. Основной областью исследований по искусственному интеллекту в 60-е — 80-е годы были экспертные системы. Такие системы основывались на высокоуровневом моделировании процесса мышления (в частности, на представлении, что процесс нашего мышления построен на манипуляциях с символами). Скоро стало ясно, что подобные системы, хотя и могут принести пользу в некоторых областях, не ухватывают некоторые ключевые аспекты человеческого интеллекта. Согласно одной из точек зрения, причина этого состоит в том, что они не в состоянии воспроизвести структуру мозга. Чтобы создать искусственных интеллект, необходимо построить систему с похожей архитектурой.

Cвою силу нейронные сети черпают, во-первых, из распараллеливания обработки информации и, во-вторых, из способности самообучаться, т.е. создавать обобщения. Под термином обобщение понимается способность получать обоснованный результат на основании данных, которые не встречались в процессе обучения. Эти свойства позволяют нейронным сетям решать сложные (масштабные) задачи, которые на сегодняшний день считаются трудноразрешимыми. Однако на практике при автономной работе нейронные сети не могут обеспечить готовые решения. Их необходимо интегрировать в сложные системы. В частности, комплексную задачу можно разбить на последовательность относительно простых, часть из которых может решаться нейронными сетями.

Некоторые преимущества и достоинства нейронных сетей перед традиционными вычислительными системами:

- решение задач при неизвестных закономерностях;

- устойчивость к шумам во входных данных;

- адаптирование к изменениям окружающей среды;

- потенциальное сверхвысокое быстродействие.

Зачастую нейронные сети используются для моделирования. К примеру, в такой науке, как искусственная жизнь.

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

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

В своей курсовой работе я буду рассматривать одно из направлений искусственной жизни — синтетическую науку о поведении. Её очень чётко описывает Брюс МакЛеннан:

«Синтетическая наука о поведении — это подход к изучению поведения животных, при котором простые синтетические организмы определенным образом действуют в синтетическом мире. Так как и мир, и организмы являются синтетическими, они могут быть сконструированы для особых целей, а именно для проверки определенных гипотез» 

Целью данной курсовой работы является создание модели искусственной жизни.

Для достижения этой цели я собираюсь создать простейшую модель пищевой цепочки, используя в качестве мозга агентов-животных нейронную сеть, построенную по принципу «победитель получает всё».

1. Модель пищевой цепочки

1.1 Общие сведения

Пищевая цепочка описывает иерархию живых организмов в экосистеме. Например, рассмотрим очень простую абстрактную пищевую цепочку, которая состоит из трех особей:

Хищник

- мигрирующие агенты, поедающие травоядных.

Травоядное

- мигрирующие агенты, поедающие растения.

Растение

- представляют собой неподвижный источник еды для травоядных животных.

В нижней части цепочки находятся растения. Они получают энергию из окружающей среды (дождя, почвы и солнца). Следующий уровень занимают травоядные животные, — для выживания они поедают растения. На верхней ступени находятся хищники. В этой модели хищники поедают травоядных животных, чтобы выжить. Мёртвые травоядные и хищники удаляться из модели.

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

Данный баланс может моделироваться и изучаться в сфере искусственной жизни и науки о поведении. 

Если какой-либо агент живет в среде определённое время и не получает еды, он сам погибает от голода. Когда агент поглощает достаточное количество пищи, он может размножаться. Таким образом, в среде создаётся новый агент определенного типа. Происходит эволюция, при которой мутирует мозг агента. 

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

Чтобы смоделировать пищевую цепочку, необходимо определить некоторые параметры: 

Окружающую среду (физическое пространство, в котором взаимодействуют агенты)

Самих агентов (а также их восприятие и поведение в среде)

Группу правил, которые определяют, как и когда происходит действие.

Травоядные животные являются мигрирующими агентами, которые определенным образом воспринимают окружающую среду и едят растения. Другими мигрирующими агентами в среде являются хищники, поедающие травоядных животных. Хищники могут есть только травоядных, а травоядные могут есть только растения. Если какой-либо агент живет в среде определённое время и не получает еды, он сам погибает от голода. Когда агент поглощает достаточное количество пищи, он может размножаться. Таким образом, в среде создается новый агент определенного типа. Происходит эволюция, при которой мутирует мозг агента (нейронная сеть).

1.2 Окружающий мир

Агенты живут в мире, построенным по принципу сетки, грани которой соединены, если агент перемещается за грань в определённом направлении, то проявляется на «противоположной» стороне.

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

1.3 Анатомия агента

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

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

Суть принципа: вместо процесса естественного отбора процессом эволюции управляет наследственность.

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

1.4 Сенсоры

Агенты могут чувствовать, что происходит вокруг них в среде. Однако агент не видит всей среды, он реагирует только на группу ячеек вокруг него.

Локальная среда, которую может чувствовать агент, разделена на четыре отдельные области. Самая ближняя называется областью близости, и эта та область, в которой агент может действовать (съесть другого агента, например). Область впереди агента называется «фронтом» и занимает 5 ячеек, а области слева и справа называются именуются «лево» и «право».

















Фронт

Фронт

Фронт

Фронт

Фронт





Слева

Близость

Близость

Близость

Справа





Слева

Близость

Агент

Близость

Справа



















Агент может определить объект в поле видимости, поэтому для четырёх областей предполагаются три числа, которые позволяют определить тип имеющихся в этом поле объектов (растение, травоядное, хищник), то есть всего двенадцать входов. 

1.5 Активаторы

Агент может выполнять ограниченное количество действий в среде: перейти на одну ячейку в заданном направлении, повернуть налево/направо или съесть объект, который находится в области близости. Действие, которое производит агент, определяется его мозгом при оценке входов, полученных на уровне сенсоров.

1.6 Энергия и метаболизм

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

1.7 Воспроизведение

Если агент поглощает достаточное количество пищи, чтобы достичь показателя 90% от максимального уровня энергии, то он допускается к участию в воспроизведении. Воспроизведение позволяет агентам, которые смогли выжить в окружающей среде, создать потомство (естественный отбор). При создании потомства агент изменяет веса своих нейронных сетей посредством произвольной мутации. Обучение в среде недоступно, однако то, что агент может воспроизводить себя, означает, что его нейронная сеть будет передана его потомку, что повторяет принцип эволюции Ламарка, поскольку характеристики агента передаются его потомству (ребёнок наследует нейронную сеть своего родителя).

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

1.8 Смерть

Агент может умереть двумя способами: либо он не может найти пищу и умирает от голода, либо его съест агент, который стоит выше в пищевой цепочке. В любом случае мёртвый агент удаляется из модели.

1.9 Соревновательность

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

1.10 Мозг агента

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

Как уже говорилось выше, в качестве мозга я использую нейронную сеть, построенную по принципу «Победитель получает всё», чтобы сохранить аналогию с биологической мотивацией.

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

2. Нейронные сети

2.1 Краткая история

Изучению человеческого мозга — тысячи лет. С появлением современной электроники, начались попытки аппаратного воспроизведения процесса мышления. Первый шаг был сделан в 1943 г. с выходом статьи нейрофизиолога Уоррена Маккалоха (Warren McCulloch) и математика Уолтера Питтса (Walter Pitts) про работу искусственных нейронов и представления модели нейронной сети на электрических схемах.

1949 г. — опубликована книга Дональда Хебба (Donald Hebb) «Организация поведения», где исследована проблематика настройки синаптических связей между нейронами.

1950-е гг. — появляются программные модели искусственных нейросетей. Первые работы проведены Натаниелом Рочестером (Nathanial Rochester) из исследовательской лаборатории IBM. И хотя дальнейшие реализации были успешными, эта модель потерпела неудачу, поскольку бурний рост традиционных вычислений оставил в тени нейронные исследования.

1956 г. — Дартмутский исследовательский институт искусственного интеллекта обеспечил подъем искусственного интеллекта, в частности, нейронных мереж. Стимулирование исследований искусственного интеллекта разделилось на два направления: промышленные применения систем искусственного интеллекта (экспертные системы) и моделирование мозга.

1958 г. — Джон фон Нейман (John fon Neumann) предложил имитацию простых функций нейронов с использованием вакуумных трубок.

1959 г. — Бернард Видроу (Bernard Widrow) и Марсиан Хофф (Marcian Hoff) разработали модели ADALINE и MADALINE (Множественные Адаптивные Линейные Элементы (Multiple ADAptive LINear Elements)). MADALINE действовала, как адаптивный фильтр, устраняющих эхо на телефонных линиях. Эта нейросеть до сих пор в коммерческом использовании.

Нейробиолог Френк Розенблатт (Frank Rosenblatt) начал работу над перцептроном. Однослойный перцептрон был построен аппаратно и считается классической нейросетью. Тогда перцептрон использовался для классификации входных сигналов в один из двух классов. К сожалению, однослойный перцептрон был ограниченым и подвергся критике в 1969 г., в книге Марвина Мински (Marvin Minsky) и Сеймура Пейперта (Seymour Papert) «Перцептроны».

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

Эти опасения, объединенные с невыполненными обещаниями, вызвали множество разочарований специалистов, подвергших критике исследования нейронных сетей. Результатом было прекращение финансирования. Период спада продолжался до 80-х годов.

1982 г. — к возрождению интереса привело несколько событий. Джон Хопфилд (John Hopfield) представил статью в национальную Академию Наук США. Подход Хопфилда показал возможности моделирования нейронных сетей на принципе новой архитектуры.

В то же время в Киото (Япония) состоялась Объединенная американо-японская конференция по нейронным сетям, которые объявили достижением пятой генерации. Американские периодические издания подняли эту историю, акцентируя, что США могут остаться позади, что привело к росту финансирования в области нейросетей.

С 1985 г. Американский Институт Физики начал ежегодные встречи — «Нейронные сети для вычислений».

1989 г. — на встрече «Нейронные сети для обороны» Бернард Видров сообщил аудитории о начале четвертой мировой войны, где полем боя являются мировые рынки и производства.

1990 г. — Департамент программ инновационных исследований защиты малого бизнеса назвал 16 основных и 13 дополнительных тем, где возможно использование нейронных сетей.

В настоящее время активно продолжаются исследования нейронных сетей и ведутся интенсивные работы по практическим применениям нейросетевых алгоритмов.

В нашей стране существует Всероссийская ассоциация нейроинформатики, объединяющая энтузиастов-нейросетевиков. Ассоциация имеет широкие международные связи, под эгидой ассоциации проведен ряд конференций, симпозиумов, выставок, совещаний.

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

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

2.2 Аналогия с мозгом

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

Кора головного мозга человека является плоской поверхностью, образованной из нейронов, толщиной от 2 до 3 мм площадью около 2200 см2, что вдвое превышает площадь поверхности стандартной клавиатуры. Кора главного мозга содержит около 1011 нейронов, что приблизительно равно числу звезд Млечного пути. Каждый нейрон связан с 103 — 104 другими нейронами. В целом мозг человека имеет приблизительно от 1014 до 1015 взаимосвязей.

Сила человеческого ума зависит от числа базовых компонент, многообразия соединений между ними, а также от генетического программирования и обучения.

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

2.3 Биологический нейрон

Нейрон (нервная клетка) является особой биологической клеткой, которая обрабатывает информацию. Она состоит из тела клетки — сомы (soma), и двух типов внешних древовидных ответвлений: аксона (axon) и дендритов (dendrites). Тело клетки содержит ядро (nucleus), которое содержит информацию о наследственных свойствах нейрона, и плазму, обладающую молекулярными средствами для производства необходимых нейрону материалов. Нейрон получает сигналы (импульсы) от других нейронов через дендриты (приемники) и передает сигналы, сгенерированные телом клетки, вдоль аксона (передатчика), который в конце разветвляется на волокна (strands). На окончаниях волокон находятся синапсы (synapses).

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

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

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

2.4 Искусственный нейрон и нейронные сети

История создания искусственных нейронов уходит своими корнями в 1943 год, когда шотландец МакКаллок и англичан Питтс создалитеорию формальных нейросетей, а через пятнадцать лет Розенблатт изобрёл искусственный нейрон (перцептрон), который впоследствии и лёг в основу нейрокомпьютера.

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

Во-первых, основу каждой нейросети составляют относительно простые, в большинстве случаев – однотипные, элементы (ячейки), имитирующие работу нейронов мозга. Далее под нейроном будет подразумеваться искусственный нейрон, то есть ячейка нейросети. Каждый нейрон характеризуется своим текущим состоянием по аналогии с нервными клетками головного мозга, которые могут быть возбуждены или заторможены. Он обладает группой синапсов – однонаправленных входных связей, соединенных с выходами других нейронов, а также имеет аксон – выходную связь данного нейрона, с которой сигнал (возбуждения или торможения) поступает на синапсы следующих нейронов. Общий вид нейрона приведен на рисунке. Каждый синапс характеризуется величиной синаптической связи или ее весом wi, который по физическому смыслу эквивалентен электрической проводимости.

 

Искусственный нейрон

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

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

Выбор структуры нейросети осуществляется в соответствии с особенностями и сложностью задачи. Для решения некоторых отдельных типов задач уже существуют оптимальные, на сегодняшний день, конфигурации. Если же задача не может быть сведена ни к одному из известных типов, разработчику приходится решать сложную проблему синтеза новой конфигурации. При этом он руководствуется несколькими основополагающими принципами: возможности сети возрастают с увеличением числа ячеек и плотности связей между ними и числом выделенных слоев; введение обратных связей наряду с увеличением возможностей сети поднимает вопрос о ее динамической устойчивости; сложность алгоритмов функционирования сети (в том числе, www.uznai.su например, введение нескольких типов синапсов – возбуждающих, тормозящих и др.) также способствует усилению мощи нейросети.

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

2.5 Обучение нейросети

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

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

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

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

2.6 Классификации

2.6.1 Бинарные и аналоговые 

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

2.6.2 Синхронные и асинхронные

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

2.6.3 Настройка весов

- Сети с фиксированными связями – весовые коэффициенты нейронной сети выбираются сразу, исходя из условий задачи;

- Сети с динамическими связями по данным сайта www.skladrabot.ru – для них в процессе обучения происходит настройка синаптических весов.

2.6.4 Применяемая модель нейронной сети

Сети прямого распространения – все связи направлены строго от входных нейронов к выходным. К таким сетям относятся, например: простейший персептрон (разработанный Розенблаттом) и многослойный персептрон.

Реккурентные нейронные сети – сигнал с выходных нейронов или нейронов скрытого слоя частично передается обратно на входы нейронов входного слоя.

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

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

2.6.5 Характер обучения

- Обучение с учителем — выходное пространство решений нейронной сети известно

- Обучение без учителя — нейронная сеть формирует выходное пространство решений только на основе входных воздействий. Такие сети называют самоорганизующимися

- Обучение с подкреплением — система назначения штрафов и поощрений от среды

2.7 Применение нейронных сетей

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

2.8 Отличия от машин с архитектурой фон Неймана

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

- массовый параллелизм;

- способность к обучению и обобщению;

- свойство контекстуальной обработки информации;

- толерантность к ошибкам;

- низкое энергопотребление.

3. Искусственная жизнь

3.1 Общие сведение

В конце 80-х — начале 90-х годов возникло одно интересное направление кибернетических исследований: «Искусственная жизнь» (английское название Artificial Life или Alife).

Основной мотивацией исследований искусственной жизни служит желание понять и промоделировать формальные принципы организации биологической жизни. Как сказал руководитель первой международной конференции по искусственной жизни К. Лангтон «основное предположение искусственной жизни состоит в том, что «логическая форма» организма может быть отделена от материальной основы его конструкции».

Сторонники направления «Искусственная жизнь» часто считают, что они исследуют более общие формы жизни, чем те, которые существуют на Земле. Т.е. изучается жизнь, какой она могла бы в принципе быть («life-as-it-could-be»), а не обязательно та жизнь, какой мы ее знаем («life-as-we-know-it»).

Искусственная жизнь — это синтетическая биология, которая по аналогии с синтетической химией пытается воспроизвести биологическое поведение в различных средах. Это жизнь, созданная человеком, а не природой («life made by Man rather than by Nature»). Исследования искусственной жизни направлены не только на теоретические исследования свойств жизни, но и (аналогично синтетической химии) на практические приложения, такие как подвижные роботы, медицина, нанотехнология, «жизнь» социальных систем и тому подобное.

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

Отмечу, что хотя лозунг «Искусственная жизнь» был провозглашен в конце 80-х, в действительности идейно близкие модели разрабатывались в 50-70-е годы. Два примера из истории отечественной науки.

В 60-х годах блестящий кибернетик и математик М. Л. Цетлин предложил и исследовал модели автоматов, способных адаптивно приспосабливаться к окружающей среде. Работы М. Л. Цетлина инициировали целое научное направление, получившее название «коллективное поведение автоматов».

В 60-70-х годах под руководством талантливого кибернетика М. М. Бонгарда была построена весьма нетривиальная модель «Животное», характеризующая адаптивное поведение искусственных организмов, живущих на разбитой на клетки плоскости и обладающих рядом конкурирующих между собой потребностей.

3.2 Модели искусственной жизни

Некоторые примеры характерных исследований искусственной жизни:

- Исследование динамики жизнеподобных структур в клеточных автоматах (К.Лангтон).

- ПолиМир (PolyWorld) Л. Ягера: компьютерная модель искусственных организмов, которые имеют структурированную нейронную сеть, обладают цветовым зрением, могут двигаться, питаться (и увеличивать тем самым свою энергию), могут скрещиваться и бороться друг с другом.

Тьерра (Tierra) Т.Рэя: модель эволюции самовоспроизводящися компьютерных программ. «Организмы» Тьерры содержат геномы, которые определяют инструкции исполнительных программ. Взаимодействия между организмами проводят к эволюционному возникновению сложного «биоразнообразия» самовоспроизводящися программ.

- Авида (Avida) К. Адами с сотрудниками, эта модель – развитие модели Тьерра. По сравнению с Тьерой Авида более проста и обладает большей общностью. Модель анализировалась аналитическими методами. Были получены характеристики распределения особей в эволюционирующих популяциях. Исследования на модели Авида количественно поддерживают ту точку зрения, что эволюция движется скачками, а не непрерывно.

- Анализ взаимодействия между обучением и эволюцией, выполненный Д.Экли и М. Литтманом. Эта работа продемонстрировала, что «обучение и эволюция вместе более успешны в формировании адаптивной популяции, чем обучение либо эволюция по отдельности».

- ЭХО (ECHO) Дж.Холланда. Эта модель описывает эволюцию простых агентов, которые взаимодействуют между собой путем скрещивания, борьбы и торговли. Взаимодействия между агентами приводит к формированию различных экологических систем: «войны миров», симбиозов и тому подобное.

- Модель эволюции двух конкурирующих популяций, одна из которых есть популяция программ, решающих определенную прикладную проблему (задачу сортировки), а вторая – популяция задач, эволюционирующих в направлении усложнения проблемы (Д. Хиллис). Первая из популяций может рассматриваться как популяция особей-хозяев, а вторая как популяция паразитов. Моделирование показало, что коэволюция в системе паразит-хозяин проводит к нахождению значительно лучших решений проблемы по сравнению с тем решением, которое можно найти в результате эволюции одной только первой популяции (популяции особей-хозяев).

- «Муравьиная ферма» (AntFarm) Р. Коллинза и Д Джефферсона. Эта модель разработана на базе «Коннекшен-машины» (Connection-Machine). Модель имитирует поведение поиска пищи в огромных эволюционирующих популяциях искусственных муравьев.

- Классифицирующие системы Дж.Холланда с сотрудниками. Это модель эволюции когнитивного процесса. Классифицирующая система есть система индуктивного вывода, которая основана на наборе логических правил. Каждое правило имеет следующую форму: «если <условие>, тогда <действие>». Система правил оптимизируется как посредством обучения, так и эволюционным методом. В процессе обучения меняются приоритеты использования правил (т.е. меняются коэффициенты, характеризующие силу правил). При обучении используется так называемый алгоритм «пожарной бригады»: при успехе поощеряются не только те правила, которые непосредственно привели к успешному действию, но и те, которые были предшественниками успеха. Поиск новых правил осуществляется эволюционным методом.

3.3 Подведение итогов

Исследования искусственной жизни тесно связаны с другими интересными направлениями: моделями происхождения жизни, автоматами С. А. Кауффмана, работами по прикладному эволюционному моделированию, по теории нейронных сетей, эволюция популяций искусственных организмов, управление поведением искусственных организмов.

Управление поведением искусственных организмов (синтетическая наука о поведении) – одно из ведущих направлений исследований искусственной жизни.

Управление поведением, как правило, моделируется с помощью нейронных сетей.

4. Моделирование поведения животных

4.1 Принцип работы программы

Рассмотрим структуры, которые описывают окружащую среду, агентов и другие объекты.

Характеристики агента: 

- тип (травоядное или хищник)

- уровень энергии

- координаты (x и y)

- массив inputs (значение входов в нейронную сеть на этапе восприятия окружеющей среды)

- массив actions (значения выходов, действия)

- массив weight_oi

- массив biasso (смещения)

Входной массив задаёт входы как объект и область (например, хищное животное и область «лево»). Чтобы дать агенту возможность различать эти элементы, для каждого из них определяется отдельный вход в нейронную сеть. Выходы также связаны с отдельными выходными ячейками выходного вектора, который представляет одно действие.

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

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

Теперь рассмотрим ход выполнения программы.

int main( int argc, char *argv[] )

{

<...>

init();

for (i = 0 ; i < MAX_STEPS ; i++) {

emitLandscape();

simulate();

<...>

}

Функция main инициализирует модель, а затем выполняет в цикле итерации, количество которых указано в заговолочном файле.

Функция init инициализирует среду и объекты в ней. Сначала инициализируется плоскость растений (функция growPlans), для этого создаются растения в количестве, заданном константой. Далее инициализируются агенты (initAgent); чтобы создать максимальное количество агентов (указано константой) каждый раз резервируется половина пространства. Сначала инициализируются травоядные, потом хищники. 

Функций growPlans находит пустое место на плоскости растений и помещает в эту ячейку новое растение. Гарантируется, что растение будет помещено только в пустую ячейку.

В ходе инициализации плоскостей агентов программа в цикле проходит по массиву, содержащему типы агентов. Сначала инициализируется поле energy, энергия устанавливается в значение, равное половине от максимального. С помощью findEmptySpot() определяется начальное положение агента, эта находит пустую ячейку в заданной плоскости и сохраняет координаты агента в его структуре. Наконец, инициализируются веса и смещения для нейронной сети агента.

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

void simulate()

{

int i, type;

// Первыми действуют травоядные

for (type = TYPE_HERBIVORE ; type <= TYPE_CARNIVORE ; type++) {

for (i = 0 ; i < MAX_AGENTS ; i++) {

if (agents[i].type == type) {

simulateAgent( &agents[i] );

}

}

}

} 

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

Для того, чтобы агент чувствовал среду ему сначала нужно идентифицировать координаты сетки, которые составляют его поле зрения (на основании направления движения), а затем разбить данную область на четыре отдельные зоны. Каждый вызов функции percept суммирает объекты в определённой зоне. При вызове в неё передаются текущие координаты агента, из массива inputs выбираются нужные данные о значениях на входах нейронной сети агента, а также список координат offset и их смещений. Если агент смотрит на север, то в функцию передаётся набор координат north<zone>, а если на юг, то передаётся тот же набор координт, но со смещением -1, аналогично и области для west<zone>. Смещения координат в каждой зоне определяются выбранным направлением, но они могут быть изменены на координаты противоположного направления. Для лучшего понимания приведу листинг:

// Сетка смещений (север-юг)

const offsetPairType northFront[]=

{{-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {9,9}};

const offsetPairType northLeft[]={{0,-2}, {-1,-2}, {9,9}};

const offsetPairType northRight[]={{0,2}, {-1,2}, {9,9}};

const offsetPairType northProx[]=

{{0,-1}, {-1,-1}, {-1,0}, {-1,1}, {0,1}, {9,9}};

// Сетка смещений (восток-запад)

const offsetPairType westFront[]=

{{2,-2}, {1,-2}, {0,-2}, {-1,-2}, {-2,-2}, {9,9}};

const offsetPairType westLeft[]={{2,0}, {2,-1}, {9,9}};

const offsetPairType westRight[]={{-2,0}, {-2,-1}, {9,9}};

const offsetPairType westProx[]=

{{1,0}, {1,-1}, {0,-1}, {-1,-1}, {-1,0}, {9,9}};

Здесь представлены два набора координат для векторов смещения. Предположим, что агент имеет координаты (7,9) в среде (используя систему координат (х,у)). Используя вектор northRight в качестве смещения координат, программа рассчитывает две новые пары координат: (7,11) и (6,11) (координаты (9,9) представляют конец списка). Данные координаты отображают два положения в правой зоне для агента, который смотрит на север. Если бы агент смотрел на юг, программа бы инвертировала координаты northRight перед тем, как добавить их к текущему положению. В результате получилось бы следующее: (7,7) и (8,7). Эти координаты представляют два положения в правой зоне при условии, что агент смотрит на юг.

Продолжим изучение трёх других частей функции simulateAgent. Следующий этап заключается в том, чтобы провести переменные inputs, полученные на предыдущей стадии, в выходные ячейки нейронной сети агента. Результатом является набор значений выходных ячеек, которые рассчитаны на основании входных сигналов с использованием весов соединений между нейронами в сети. Затем (базируясь на том, какая ячейка имеет наибольшее значение) программа выбирает действие, которое будет выполнено агентом, по принципу «победитель получает всё». Для выполнения действия используется оператор case, для выбора доступны следующие действия: повернуть налево, повернуть направо, съесть, продвинуться вперёд на одну ячейку. 

Последний этап симуляции агента — проверка его энергии. На каждом этапе агент теряет часть своей энергии (количество потерянной энергии различно для травоядных и хищников). Если энергия агента падает до нуля, то он умирает от голода и выбывает из симуляции. 

Рассмотрим функции, используемые simulateAgent в порядке их вызова (percept, turn, move, eat и killAgent).

Функция percept использует цикл для изучения всех плоскостей и рассчитывает суммы на основании информации о соответствующей плоскости. Дляодин объект.

Функция turn изменяет направление, в которое агент смотрит. В зависимости от текущего направления агента и направления для поворота устанавливается новое направление. 

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

Выволнение функции eat разбито на два этапа: поиск объекта для съедения в области «близости» агента и, если таковой существует, запись об удалении съеденного объекта.

Суть первого этапа заключается в том, чтобы выбирается плоскость для поиска. Выбор основывается на типе текущего агента. Если агент является травоядным, то поиск ведётся на плоскости растений, в противном случае — на плоскости травоядных (для хищников). Далее, используя направление движения агента, программа вызывает функцию ChooseObject, чтобы вернуть координаты объекта интереса на нужную плоскость. В этой функции вновь задействованы пары смещения, но внимание уделяется только области близости — в напралении движения агента. Если объект был найден, функция ChooseObject возвращает значение, которое не равно нулю, и заполняет координаты x и y в соотвествии с функцией eat. 

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

Следующий этап — съедение объекта. Если подходящий объект был найден, программа проверяет плоскость, в которой он был обнаружен. Для плоскости растений выполняется поиск в массиве plants, после чего растение удаляется из массива landscape, затем создаётся новое растение, которое будет помещено в произвольную пустую ячейку. Для плоскости травоядных животных программа убивает съедаемое травоядное с помощью функции killAgent. Благодаря съедению объекта увеличивается уровень текущего объекта. 

Наконец, если объект достиг уровня энергии, который необходим для воспроизводства, вызывается функция reproduceAgent, чтобы позволить агенту «родить» нового агента данного типа.

После уничтожения агента программа определяет, нужно ли инициализировать нового случайного агента данного типа вместо уничтоженного. Решение зависит от количества агентов данного типа, присутствующих в модели. Поскольку эволюционный аспект симуляции является самым интересным, требуется сохранить количество открытых позиций для агентов, чтобы любой агент при достижении определённого уровня энергии мог воспроизвести себя, поэтому новому случайному агенту позволяется занять место уничтоженного агента только если популяция данного типа агентов составляет менее 25% от общего количества агентов. Это позволяет сохранять 25% мест для агентов одного типа свободными для следующего воспроизведения.

Последняя функция симуляции, reproduceAgent , является самой интересной, поскольку она вносит в модель аспект эволюции Ламарка. Когда агент воспроизводит себя, он передает свою нейронную сеть ребенку. Ребенок наследует нейронную сеть родителя, а потом производится с небольшой вероятностью мутация

Сначала необходимо определить, есть ли свободное место для ребенка, проверив, заполнено пространство для агентов данного типа на 50% или нет. Если для ребенка было найдено свободное место, структура агента-родителя копируется для ребёнка, а затем отыскивается свободная ячейка, которую займёт ребёнок. Далее посредством мутации изменяется один из весов в нейронной сети агента. Затем выполняется запись, а энергия родителя делится поровну между ним и ребёнком, что заставляет их двигаться по среде в поисках пищи, пока они не наберут нужного количества энергии для следующего воспроизведения.

Функция emitLandscape сканирует все три плоскости и выводит на экран текущее положение всех объектов.

Заключение

В своей курсовой работе понятие «искусственная жизнь» я рассматривал на примере моделирования пищевой цепочки. Искусственная жизнь предлагает платформу для изучения различных феноменов в биологических и и социальных системах. Преимущество искусственной жизни в теории синтетического поведение — возможность играть в ролевые игры, изменяя параметры модели и отслеживая результаты. В данной курсовой концепции синтетической теории поведения были продемонстрированы с помощью несложной симуляции хищник/жертва. Можно увидеть, что и хищники, и жертвы выработали ряд интересных стратегий поведения, например:

- инстинкт стада для травоядных

Травоядное будет следовать за травоядным, если оно находится в области фронта. Сила травоядных в их количестве, конечно, если это не то травоядное, которое идёт впереди.

- хищники поджидают травоядных возле растений

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

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

Список литературы

1. М. Тим Джонс, «Программирование ИИ в приложениях», ДМК Пресс, Москва, 2006 г.

2. В. Г. Редько, курс лекций «Эволюционная кибернетика». 

3. С. Осовский, «Нейронные сети для обработки информации», Финансы и статистика, Москва, 2002 г.