Computer Science МФТИ Changes    |    Index    |    Search
::: TerrariumProject :::

 
  ACM . Agent . TerrariumProject # Edit # Attach # Diffs # Printable # More :::

Main
• Register
• Users
• Site Map

Curriculum

Agent Web
• projects

Algorithms

Web Learn

Image Kit

ProgTech

Publishing

Разработка травоядного существа для платформы Terrarium.


1. Автоматный подход.

В данном проекте использовалось существо, построенное на основе конечного автомата, в рамках подхода примененного в работе [1]. Подробное описание проекта приводится. Данный подход состоит в следующем. Есть набор входных переменных, который зависит от состояния существа и от состояния окружающей среды. Данный набор параметров является набором переменных типа boolean. На каждом шаге по времени системы Terrarium (tick) происходит следующее. На первом этапе в зависимости от входных переменных и текущего состояния автомата, существо либо переходит в другое состояние, либо остается в том же. Следующим шагом происходит действие, соответствующее состоянию, на которое запрограммирован автомат. После чего совершается следующий шаг по времени.

2. Описание существа.

Существо, созданное в работе [1], было доработано в рамках данного проекта. Улучшение состояло в добавлении к возможностям исходного существа возможности атаки. Сила атаки данного существа значительно меньше, чем сила атаки плотоядных животных, однако ее достаточно для того, чтобы успешно бороться за жизненное пространство. В техническом плане изменение состояло в добавлении исходному автомату, который кодировал состояние существа, еще четырех состояний. Первое состояние – атака, второе состояние – идти к цели, и, наконец, третье состояние было введенно специально для случая, когда животное достигло точки, к которой оно шло. Необходимость последнего состояния обусловлена отсутствием в исходном автомате правильным образом работающей обработки подобного события. Наконец, последнее состояние ¬– “общение”. Помимо того, для работы автомата было необходимо ввести еще четыре входных переменных. x21 – цель находится в пределах досягаемости. По этой переменной происходит переход в состояние атаки. x22 – цель жива. Эта переменная используется для перехода в состояние преследования цели, а также для выхода из состояния атаки. x33 – переменная служащая для обозначения состояния, когда нет направления, в котором движется животное, или это направление уже достигнуто, x44 – переменная, кодирующая состояние животного – голодно оно или нет. X55 – переменная свидетельствующая о наличии рядом животного своего класса. Входные переменные.

Обозначение Название Описание
X2 Растение подходит для еды Проверяется, не нанесен ли большой ущерб растению
X3 Растение близко Находится ли растение достаточно близко, чтобы его можно было есть
X4 Плотоядное в зоне видимости Есть ли плотоядное в зоне видимости. Если есть, оно заносится в attackerAnimal
X5 Можно размножаться Может ли существо размножаться и достаточно ли для этого энергии
X6 Плотоядного не видно Нет ли плотоядного в зоне видимости
X7 Рядом другое травоядное Есть ли рядом травоядное другого вида
X8 Существует ли растение, к которому идет существо Существует ли растение указанное в targetPlant
X9 Остановка в результате блокировки Если X15, то была ли причиной остановки блокировка
X10 BornEventHandler Устанавливается, если первый ход
X11 AttackCompletedEventHandler Устанавливается после окончания атаки
X12 EatCompletedEventHandler Устанавливается, когда существо закончило есть
X13 ReproduceCompletedEventHandler Устанавливается, когда воспроизводство потомства окончено
X14 AttackedEventHandler Устанавливается при атаке разрабатываемого существа другим существом. Информация об атакующем существе в attackerAnimal
X15 MoveCompletedEventHandler Вызывается при окончании движения
X16 DefendCompletedEventHandler Вызывается при окончании подготовки к защите

Переменные x1-x9 используются для “разума” существа, x10-x16 используются для взаимодействия со средой Terrarium. Дополнительные входные переменные, которые были добавлены в ходе данного проекта

Обозначение Название Описание
X21 Есть цель Есть животное, которого надо атаковать. Информация о нем содержится в attackingAnimal
X22 Цель жива Если тот, кого мы хотим атаковать еще жив
X33 Reached currentDestination Достигли точки, к которой шли
X44 CanEat Животное может есть
X55 Рядом свои Рядом животное своего класса, с которым можно “общаться”

Выходные переменные

Обозначение Название Описание
Z1 Защищаться Защищаться от существа, информация о котором хранится в переменной attackerAnimal
Z2 Гулять Идти в случайном направлении. Присвоить координаты точки, к которой идем, переменной currentDestionation
Z3 Идти к еде Идти к еде (targetPlant). Присвоить координаты точки, к которой идем, переменной currentDestionation
Z4 Есть Есть растение (targetPlant)
Z5 Воспроизводиться Воспроизводиться
Z6 Бежать Убегать от существа (attackerAnimal). Присвоить координаты точки, к которой идем, переменной currentDestionation
Z7 Стоять Ничего не делать
Z8 Сменить направление Повернуться на 90 градусов влево от точки currentDestination
Z9 Вернуть направление Идти к точке (currentDestination)
Z21 Атаковать Атаковать существо указанное в attackingAnimal
Z22 Идти к цели Идти к существу указанному в attackingAnimal
Z33 Выбрать новое направление движения В зависимости от того, есть ли рядом другое травоядное, есть ли растение или нет ничего, принимается решение идти в том или ином направлении. Если существо оказывается заблокированным при попытке подойти к растению своими существами, принимается решение идти в произвольном направлении.
Z55 “Общаться” Если рядом есть животное своего класса, то в случае, если мы находимся в состоянии поиска еды, и рядом нет растений или еще чего-нибудь, производится осмотр антенн встречного существа. Если оно находится в состоянии идти к еде, или если оно ест или ждет у еды, принимается решение идти к этому существу, или в направлении, в котором оно движется.

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

3. Результаты доработки.

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

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

Новый вариант очень хорошо зарекомендовал себя. При запуске в Террариум исходных существ и новых существ в количестве в два раза меньшем, через некоторое время оказывалось, что новые существа практически полностью вырезали исходных (см. Таблицу 1). Это неудивительно, поскольку у исходных существ не существовало реакции на атаку других травоядных. Оставим это на совести разработчиков. Стоит, однако, заметить, что кандидата на роль подобного травоядного в природе, которое уничтожало бы других травоядных в рамках борьбы за ресурс найти сложно. Более вероятно использование разными животными разных растений.

Таблица 1.

Время, мин 1 3 5 10 20 28
DeafLeopard 15 15 15 28 26 92 234
Исх.существо(creature1) 30 23 15 24 5 11

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

Таблица 2.

Время, мин 1 3 5 10 12 15 18 20
DeafLeopard 30 30 43 58 39 50 80 133 190
Исх.существо(creature1) 31 23 31 36 14 17 13 8 1
office-dog - хищник 5 5 5 5 6 8 3 4 7

В таблице 3 приведен результат эксперимента при запуске в Террариум доработанных существ и еще травоядных другого вида. Отличительной особенностью другого вида были: большая скорость еды, что приводило к пракитически мгнонвенному поеданию существом найденного растения, а также наличие защиты при нападении существа любого вида, чего не было у существа на основе конечного автомата. Любопытно, что в схватках доработанное в ходе этого проекта существо как правило проигрывало, что по всей видимости обусловленно более высоким уровнем DefencePoints. Через некоторое время оказывается, что большая часть растений съедена в результате деятельности bradsbug'ов. Как следствие, сами животные вымирали, в то время, как DeafLeopard'ы благодаря заложенному еще в исходное существо щадящему отношению к растениям выжили и успешно продолжали размножаться.

Таблица 3.

Время, мин 1 2 5 10 15 17 20
DeafLeopard 30 27 24 33 26 32 44 56
bradsbug 30 29 24 28 10 17 1

Исходный код программы вместе с подробными комментариями прилагается.

Для сборки существа следуйте инструкциям сайта [2]

4. Направления дальнейших улучшений

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

5. Установка.

1. Скачайте Террариум по ссылке Следуйте инструкциям.

2. Запустите приложение и перейдите в режим Terrarium (О назначении всех кнопок и иконок также можно узнать на сайте).

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

Доработанное существо - DeafLeopard.dll. Cоздайте новый террариум и добавьте в него существо.

4. Результат – добавятся описанные выше животные. При необходимости можно скачать других животных и растений с сервера тем же методом, только теперь надо выбрать ServerList. Добавлять еще экземпляры уже существующих животных – из списка внизу.

6. Ссылки

  1. С.М. Марков, А.А. Шалыто. Система управления травоядным существом для игры «Terrarium»: http://is.ifmo.ru/?i0=projects&i1=terrarium
  2. Terrarium Home: http://www.windowsforms.net/Terrarium
  3. Terrarium GUI Walk-Through: http://www.windowsforms.net/Terrarium/docs/GUI/
  4. Terrarium Advanced Developer Guide http://www.windowsforms.net/Terrarium/docs/OrganismSDK/default.aspx

-- UkHarder? - 01 Jun 2004

Rambler's Top100 Rambler's Top100


# Edit menu  

Topic revision r1.5 - 03 Jun 2004 - 09:10 GMT - AndreyUstyuzhanin Copyright © 2003-2017 by the contributing authors.