Бібліотека алгоритмів штучного інтелекту для ігор. Частина 1. (Исходники), Комп’ютерні ігри, Різне, статті








Ми сподіваємося, що статті будуть цікаві будь-яким програмістам і дизайнерам, які цікавляться розробкою ігор.


Ми будемо вдячні пропозиціям і побажанням по публікованих статей і тем. Обговорити статтю можна буде на нашому форумі.







 

Рисунок 14

Ви вже бачили установку змінних середовища через панель управління. Однак є більш гнучкий спосіб установки з використанням утиліт установки змінних середовища. Ці утиліти можна викликати як безпосередньо в командному вікні, так і через різні скрипти (наприклад, через bat файли). Серед них найбільш відома setx – Ця версія підійде як для Windows 2000 так і для WindowsXP, вона також міститься в пакеті SupportTools для WindowsXP. Невеликий урок для Вашого setx перебувати на www.ss64.com/nt/setx.html. Також існує ще одна утиліта подібного плану http://barnyard.syr.edu/~Evefatica/#SETENV.

Опис включених до бібліотеки аніматов

Отже, тепер ви можете запускати аніматов, але не вистачає опису, які конкретно функції реалізовані під тим чи іншим ім’ям. Нижче в алфавітному порядку перераховані всі приклади, що виходять в інсталяцію бібліотеки FEAR.

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

Bouncer – простий анімат, бігає по рівню і спостерігає за своїм станом. Якщо Bouncer у що то впирається, його швидкість падає. Вимірюючи свою швидкість просування, Bouncer робить висновок про зіткнення і виробляє поворот до тих пір, поки не зможе продовжити свій рух.

Breaker – анімат використовує правила (rulebased animat) для виведення своїх дій, англійська версія уроку з використання даного анімат дано aigamedev.com/tutorials/RuleBasedSystem.html. Однак, у зв’язку із змінами в основному коді бібліотеки у версії fear 4 даний приклад працює з помилками. Проте, в силу того, що в FEAR останньої версії є інший анімат, що працює на rulebased принципах – Stalker, ви можете спробувати знайти помилки і відповідним чином виправити їх. Також можна поекспериментувати з попередніми версіями FEAR, які ви знайдете на офіційному сайті.

Brutus – простий анімат з рисами поведінки нагадують поведінку собаки, реалізує елементарний рівень процедурної експертної системи. Здатний слідувати за гравцем або зупинятися біля його ніг. Кожне з дій закодовано найпростішої if () then послідовністю.

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

Jacky – анімат, що використовує fuzzy логіку для визначення своїх дій – посадку на платформу, відкриття дверей, виклик елеватора, якщо анімат не знаходиться близько згаданих об’єктів – він просто мандрує по рівню.

Kanga – анімат, який застосовує генетичний алгоритм для знаходження параметрів для відскоків і поворотів для відходу від запускається в нього Rocket launcher. Для того, щоб натренувати Kanga бажано знайти та завантажити невелику сцену (який-небудь bsp файл і покласти його в baseq2Maps, наприклад нехай це буде файл baseq2Mapstest.bsp), тоді ваш файл для запуску сервера буде мати рядок

quake2.exe +set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map test

або в рядку налагодження

set game fear +set dedicated 1 +set maxclients 32 +set deathmatch 1 +map test

Потім, ви або повинні увійти в гру і вибравши Rocket launcher переслідувати Kanga, або запустіть анімата Salty. Salty буде стояти на місці і стріляти ракетами в усі що рухається навколо, в цьому випадку зручніше увійти для спостереження за процесом тренування необхідно увійти як Spectator, інакше, у разі входу як гравець, Salty вб’є вас.

Marvin – анімат, який реалізує алгоритм відходу від зіткнень (collision avoidance), в процесі роботи Marvin збирає інформацію про навколишній світ через виклики space-> TraceWalk і обробивши її робить повороти.

Можливі проблеми з простим підходом відходу від зіткнень з цим аніматом:
– Локальні пастки – рівень може бути досить складним, і успішний обхід перешкод може бути утруднений. У разі кутів, анімат може застрягти. Це відбудеться, коли анімат вирішить повернутися в одну сторону, але потім зрозуміє, що інший поворот потенційно краще. Для вирішення таких проблем необхідно додавати штрафні функції для повороту або якісь інші способи поділу рішень; тривалий тестування коду, яке породжується масою інших проблем, крім пасток, тому незважаючи на простоту, йде маса часу на доведення параметрів;
– Не дуже високий реалізм – в силу простих правил – анімат виглядає занадто роботоподобним;
– Не висока масштабованість – якщо доводиться обходити додатковим кодуванням кілька ситуацій, то трудомісткість налагодження різко зросте.

Mole – анімат Darth Mole використовує навчання з підкріпленням (reinforcement learning) для знаходження адаптивних deathmatch стратегій.

Moody – aнімат демонструє виникнення різних емоцій під впливом вхідних впливів. Помістіть Moody в простій рівень і додайте кілька Stalker і Salty аніматов. Емоції визначаються двома кінцевими автоматами для почуттів і сприйняття.

Onno – анімат, що використовує нейронну мережу, розроблений для попередньої версії бібліотеки, не працює в останній версії 0.4 FEAR (поексперементіруйте c з попередніми версіями, які ви знайдете на сайті FEAR). Урок, присвячений даному анімату можна знайти тут: aigamedev.com/tutorials/NeuralNetwork.html.

Pain – анімат Major Pain, іспользется простий персептрон для навчання моментів часу стрільби. Він стріляє, коли є ворог і готово зброю. Персептрон навчається простої операції AND над двома вхідними впливами.

Picky – анімат з простим скриптом (перевірте наявність файлу fearmodulesweapon_select.py, він є в архіві коду) для процедури голосування вибору кращого зброї. Скрипт може безпосередньо взаємодіяти з оточенням, збираючи необхідну інформацію. Вибране зброя повертається через високорівнева інтерфейс. Однак, даний приклад містить помилку, правда, безпосередньо не впливає на роботу анімата. Помилка пов’язана з реалізацією сінглентона і конкретно функцією Factory & Factory :: GetInstance () з файлу factory.hpp. Природа помилки в тому, що модуль С + + Framework бібліотеки FEAR линкуется статично з кожною dll (у даному випадку з двома dll game.dll і PickyBrain.dll). Тому при запуску анімата Picky виникає ситуація, коли Factory & Factory :: GetInstance () повертає в PickyBrain.dll локальну копію фабрики, яка не збігається з фабрикою створеної в game.dll і містить необхідну інформацію. Виходом із ситуації могло бути перетворення проекту файлів Fасtory в окрему dll, для цього потрібно зробити такі кроки – створити проект Dll для Factory і вставити його в загальний проект FEAR. Перемістити до нього посилання на файл Factory.cpp, а потім додати генеруються dll і lib у всіх потрібних ситуаціях. Крім того, є й інша особливість – з файлу Factory.cpp перенесена в файл Architecture.cpp реалізація конструктора Exception :: Exception (const std :: string & msg, const std :: string & fn, const int l). Даний підхід усуває проблему з Picky, але створює проблему з динамічною лінковкою стандартної бібліотеки. Насправді, приклад прекрасно працює, проте, як рішення усунення warnings в процесі компіляції може бути а) написання свого map (наприклад http://www.thecodeproject.com/vcpp/stl/bimap.asp http://www.codeproject.com/cpp/ufstmaps.asp), або обігу до статей http:/ / support.microsoft.com/kb/q168958 / http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html. Однак, оскільки Microsoft стверджує, що map експортувати не можна, зіткнувшись з труднощами реалізації підходу описаної (як працює) по другій засланні, я припинив спроби.

Модифікація бібліотеки (в тому числі інші додавання) виходять за рамки статті.

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

Pinbot простий анімат, що демонструє обробку повідомлень ботом від модуля фізики.

Pyrophoric – простий анімат входить до групи аніматов в директорії demosanimats, не включений в основний проект Animats.sln, але файли для роботи цього анімата встановлюються в Quake 2 директорію, тому його варто згадати. Може бути використаний для вивчення коду та самостійних експериментів. Код можна поправити вивчаючи код Bouncer і Marvin, спробуйте змусити його працювати.

Rampage анімат, що є розвитком PinBot а, додає до Pinbot у навички використання зброї (без використання самого зброї).

Remote – досить складний анімат, що демонструє емоції, які обчислюються з використанням пам’яті про стан, відчуття з приводу власного стану та оточення, демонструє and displays витонченість і поліпшену правдоподноность симуляції переміщення тіла. Використовує ієрархічний підхід до обчислення настрою.

Rookie простий анімат, який вміє прицілюватися і вибирати цілі.

Salty анімат, вибирає найближчого гравця, як його противника і прямує прямо в цьому напрямі. Розрахунок траєкторій можливого попадання проводиться тільки під час бою.

Selector – анімат, що використовує дерево рішень (decision tree) для оцінки цінності наявного у нього зброї в залежності від поточної ситуації. Це призводить у більшості випадків до вибору найкращого зброї.

Spin найпростіший анімат, який просуваючись постійно повертається. Упершись в перешкоду – зупиняється.

Splash – пророкує положення ворога, потім вибирає випадкову мета біля нього, використовуючи персептрон для оцінки ймовірність ураження цілі. Якщо зміни ймовірності попадання задовільні, вистрілюється ракета.

Stalker – анімат, слід уздовж стін, використовуючи систему правил (rule based system, RBS).

Tank – анімат Sir Tank реалізує пряме реактивне реагування. Іншими словами при виникненні однієї ситуації (для Tank – зіткнення) здійснює інше, пов’язане дію дію (для Tank а дія відскоку). Цей анімат відрізняється тим, що рух корпусу не пов’язано з його орієнтацією. Цей прийом дозволяє простежити, як рух можна розділити від інших можливостей, наприклад прицілювання.

Tobor – анімат, схожий на Bouncerа. Також як і останній, бігає по рівню і спостерігає за своїм оточенням. На відміну від Bouncer а Tobor перевіряє стан прапора наявності зіткнення, в разі виставленого прапора зіткнення, Tobor повертається до тих пір, поки не може продовжити свій рух.

Невелике післямова.

Зручність роботи у віконному режимі і можливості налаштовувати більшу кількість параметрів, ніж в стандартному quake2, коду quake2_Q2CP додає, однак, деякі складності конфігурації бажаних параметрів, виникають через помилок при збереженні cfg файлів.

При роботі з FEAR і quake2_Q2CP з командами запуску, наведеними у статті, будуть використовуватися такі файли cfg

baseq2config.cfg

fearconfig.cfg

fearplayer.cfg

fearspectactor.cfg

В принципі, плутанину в чому легко уникнути, якщо запускати ярлики або bat файли без вказівки специфічних конфігураційних файлів, наприклад:

(FEAR) Player

quake2.exe +set game fear +connect 127.0.0.1

замість

quake2.exe +set game fear +connect 127.0.0.1 +exec player.cfg

і (FEAR) Spectator

quake2.exe +set game fear +connect 127.0.0.1 +set spectator 1

замість

quake2.exe +set game fear +connect 127.0.0.1 +set spectator 1 +exec spectator.cfg

Такий підхід трохи зменшить гнучкість налаштування режимів – зате розбиратися доведеться всього лише в двох файлах

baseq2config.cfg

fearconfig.cfg

Нарешті, ви можете розібратися з кодом збереження cfg файлів quake2_Q2CP і виправити його.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*