рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Работа сделанна в 2010 году

Моделирование поведения животных - Курсовая Работа, раздел Биология, - 2010 год - Моделирование поведения животных с использованией нейронных сетей Моделирование Поведения Животных. Принцип Работы Программы Рассмотрим Структу...

Моделирование поведения животных. Принцип работы программы Рассмотрим структуры, которые описывают окружащую среду, агентов и другие объекты. Характеристики агента: - тип (травоядное или хищник) - уровень энергии - координаты (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 сканирует все три плоскости и выводит на экран текущее положение всех объектов.

– Конец работы –

Эта тема принадлежит разделу:

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

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

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Моделирование поведения животных

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Эта работа не имеет других тем.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги