Управление группой мобильных объектов

Автор работы: Пользователь скрыл имя, 26 Февраля 2013 в 06:52, курсовая работа

Описание работы

Данная курсовая работа посвящена разработке алгоритма интеллектуального управления танком для участия в конкурсе «Российский кубок по программированию искусственного интеллекта CodeTanks 2012 (Russian AI Cup)». В работе рассмотрены принципы наиболее эффективного поведения танка, позволяющие ему эффективно передвигаться по полю, минимизировать повреждения от танков оппонентов и набирать как можно большее количество очков за счет уничтожения танков оппонентов. Алгоритм реализован на языке программирования Python 2.7.3 в среде разработки JetBrains PyCharm 2.6.3.

Содержание работы

Введение 3
1 О мире CodeTanks 2012 4
1.1Общие положения и правила 4
1.2 Описание игрового мира 5
1.3 Описание танков 7
1.4 Описание снарядов и механики попаданий 9
1.5 Описание бонусов 10
1.6 Начисление баллов 11
2 Стратегия управления танком 12
2.1 Выбор танка 12
2.2 Принципы поведения танка 14
2.2.1 Движение танка 15
2.2.1.1 Уворот 19
2.2.1.2 Рикошет 20
2.2.2 Стрельба 22
Заключение 24
Список использованной литературы 25
Приложение А 26

Файлы: 1 файл

kur.docx

— 3.01 Мб (Скачать файл)

- Падение бронепробиваемости  – свойство снаряда, которое  показывает, влияет ли скорость  его полета на бронепробиваемость

- Угол рикошета – максимальный  угол (от нормали к поверхности  танка), при котором снаряд считается попавшим в танк. Если угол попадания превышает угол рикошета, то снаряд просто отскакивает от танка и отлетает в сторону. Премиумные снаряды не рикошетят.

1.5 Описание бонусов

 

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

Типы бонусов:

- Аптечка – восстанавливает  35 единиц здоровья экипажа. Здоровье  не может превысить отметку  в 100.

- Ремкомплект – восстанавливает  50 единиц прочности корпуса танка.  Прочность корпуса не может  превышать максимальной границы,  определённой для каждого типа  танка.


Изм.

Лист

№ докум.

Подпись

Дата

Лист

11

1304.123074.000 ПЗ


- Ящик с боеприпасами  – редкий бонус. Танк получает  в свой боекомплект 3 премиумных  снаряда, которые он может использовать  на свое усмотрение.

Если бонус не был подобран, то он автоматически убирается из игрового мира по прошествии 1000 тиков  с момента его появления.

1.6 Начисление баллов

 

Количество набранных  игроками баллов – единственный фактор, который определяет победителя.

Действия, выполняя которые  в бою игрок зарабатывает себе баллы:

- Нанесение урона танкам  других игроков – за каждую  единицу урона корпусу или  экипажу игрок получает 1 балл

- Уничтожение танка другого  игрока – за каждую уничтоженную  боевую машину игрок получает 25 баллов

- Уничтожение всех танков  других игроков – за уничтожение  всех вражеских танков игрок  получает 100 баллов.

 


Изм.

Лист

№ докум.

Подпись

Дата

Лист

12

1304.123074.000 ПЗ


2 Стратегия управления танком

 

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

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

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

2.1 Выбор танка

 

Как уже было упомянуто, на выбор представлены три возможные  разновидности танков: средний, тяжелый  и противотанковое орудие.

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

 


Изм.

Лист

№ докум.

Подпись

Дата

Лист

13

1304.123074.000 ПЗ


Таблица 3. Достоинства и  недостатки различных видов танков

Вид танка

Достоинства 

Недостатки

Средний танк

Высокая мобильность

Большая скорость поворота башни

Маленькие габариты

Низкая масса

Низкие показатели брони

Тяжелый танк

Большая масса

Высокие показатели брони

Низкая мобильность

Маленькая скорость поворота башни

Большие габариты

Противотанковое орудие

Большая масса

Очень большая скорость поворота турели

Высокие показатели фронтальной  брони

Крайне низкая мобильность

Ограниченный угол поворота башни

Большие габариты

Низкие показатели боковой  брони


 

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

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


Изм.

Лист

№ докум.

Подпись

Дата

Лист

14

1304.123074.000 ПЗ


2.2 Принципы поведения танка

 

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

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

 

2.2.1 Движение танка

 

Движение танка разбито  на три основные фазы:

1. Движение в максимально безопасную позицию

2. Оборона позиции

3. Выезд за бонусами  и уничтожение оставшихся танков

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

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


Изм.

Лист

№ докум.

Подпись

Дата

Лист

15

1304.123074.000 ПЗ


Рисунок 1. Выбор танком безопасного  угла в зависимости от его начального положения


Изм.

Лист

№ докум.

Подпись

Дата

Лист

16

1304.123074.000 ПЗ


Рисунок 2. Схема алгоритма  движения танка до угла

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


Изм.

Лист

№ докум.

Подпись

Дата

Лист

17

1304.123074.000 ПЗ


Рисунок 3. Танк удерживает безопасную позицию в нижнем левом углу

 

Рисунок 4. Алгоритм удержания  танком позиции


Изм.

Лист

№ докум.

Подпись

Дата

Лист

18

1304.123074.000 ПЗ


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

Рисунок 5. Танк собирает бонус «аптечка»

Рисунок 6. Алгоритм сбора танком бонусов


Изм.

Лист

№ докум.

Подпись

Дата

Лист

19

1304.123074.000 ПЗ


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

2.2.1.1 Уворот

 

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

Для реализации уворота используется следующий алгоритм:

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

Если в обоих вариантах  моделирования снаряд всё равно  попадает в танк, то танк продолжает действовать согласно своему стандартному алгоритму.

Рисунок 7. Моделирование  попадания снаряда 


Изм.

Лист

№ докум.

Подпись

Дата

Лист

20

1304.123074.000 ПЗ


На рисунке 7 продемонстрировано моделирование попадание снаряда  в танк через некоторое время. Танки, выполненные штриховой линией – возможное положение через  время, за которое снаряд долетает до танка. Очевидно, что при движении назад, танк не успевает выйти за пределы  поражения снаряда, в то время  как при движении вперед через  некоторое время снаряд становится безопасен для танка.

Уворот реализован в методе moveToDodge модуля Dodge.py, продемонстрированном в приложении А.

2.2.1.2 Рикошет

 

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


Изм.

Лист

№ докум.

Подпись

Дата

Лист

21

1304.123074.000 ПЗ


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

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

Рисунок 8. Принцип работы рикошета

Рикошет реализован в методе rotateToDodge модуля Dodge.py, продемонстрированном в приложении А.

 


Изм.

Лист

№ докум.

Подпись

Дата

Лист

22

1304.123074.000 ПЗ


2.2.2 Стрельба

 

При стрельбе необходимо ответить на следующие вопросы:

- В какой танк стрелять?

- Каким типом снарядов  стрелять?

- На какой угол для  этого повернуть башню?

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

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

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


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

Лист

№ докум.

Подпись

Дата

Лист

23

1304.123074.000 ПЗ

Информация о работе Управление группой мобильных объектов