Справжній віртуальний супротивник - Інформатика, програмування

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

Віртуального супротивника необхідно також вчити помилятися, лінуватися, зосереджувати увагу, бути в міру розумним і всяким різним людським штучкам. Розум тягне у себе відповідні поняття з психології. Без їхньої реалізації гра ніколи не буде розумною. При всьому страшному звучанні психологічних понять вони відносно нескладні за діями. У більшості випадків людина просто не уявляє, як висловити подібне поняття як алгоритмічні рішення.

Психологічне поняття безпосередньо пов'язане із місцем існування персонажа, отже, алгоритмічна реалізація поняття може значно відрізнятися залежно від середовища проживання. Наприклад, алгоритм оцінки навколишнього оточення навколо ігрового персонажа буде значно простіше, ніж такий же алгоритм у людиноподібного робота, тому що довкілля, а також фактори, що впливають на оцінку обстановки, у них різні. Універсальних алгоритмів під будь-які довкілля створити неможливо. Реально лише описати загальні складові психологічного поняття, як вони пов'язані друг з одним. На основі таких описів будується алгоритм стосовнопевному середовищі проживання.

Постараюся пояснити створення скелета лише необхідних у грі психічних функцій розуму. Пояснення будуватиму на базі покрокової стратегії. В принципі, схожий скелет також підійде як для стратегій реального часу, так і для багатьох ігор жанру 3D-Action.

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

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

Аферентний синтез є узагальнення потоків інформації. Слово "аферентний" означає "узагальнюючий", а в подальшому слово "аферентація", що використовується, означає "узагальнення". Синтез складається з обстановної аферентації, домінуючої мотивації, пускової аферентації та пам'яті. Початок такту синтезу завжди починається з обстановкової аферентації і закінчується пусковою аферентацією.

Ситуаційна аферентація - узагальнення поточної обстановки (стан справ) у ситуації, що склалася. У простому вигляді процесузагальнення виглядає так. Спочатку на ігровій карті відбираються лише видимі віртуальному супротивнику ворожі персонажі (на досліджених областях карти) і, природно, свої власні персонажі. Чужі солдати використовуються для узагальнення станів за загрозливими факторами, свої ж солдати - для узагальнення ситуацій з власних сил, можливого накопичення грошей, збирання артефактів, побудови будинків тощо.

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

Надалі ці відомості потрібні функції прийняття рішень. Якщо дані щодо кожного конкретного персонажа необхідні для його ефективного управління, то загальні для віртуального супротивника відомості про загрози, сили та можливості потрібні для прийняття таких рішень, як побудова нових міст, доукомплектація військ, купівля нового обладнання, технологій тощо.

Операція узагальнення зводиться до банального кількісного підрахунку загрозливих та факторів, що залучають. Іншими словами: "Скажи мені в числовому вираженні, скільки у мене можливостей підняти золота, напасти на ворога, отримати від нього тумаків і так далі". Також звертаю вашу увагу на те, що у функції обстановної аферентації віртуальний супротивник просто зобов'язаний задіяти таке поняття як "увага".

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

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

справжній

Як видно з малюнка, місту не загрожує ніяка небезпека, а ось персонажу "C" загрожує небезпека переважаючих сил противника. Персонаж "A" здатний взяти максимум золота. Крім того, персонажі "A" та "B" за один хід можуть прийти один одному на допомогу. Також існує загальна загроза віртуальному противнику, оскільки на карті існує на 1 солдат більше ворожих сил. Думаю, не складно зробити висновок, що персонаж "A" потрібно відправити зібрати максимум золота для покупки нового нового солдата. Персонаж "B" можна відправити за персонажем "A",щоб на нього не надумав напасти ворожий солдат, що близько стояв. А ось персонажу "C" потрібно наказати виходити із зони небезпеки, тому що його сил не вистачить для бою.

Фактично, віртуальний противник прагне знизити загрозу, що виникла, і мінімальними діями компенсувати перевагу ворожих сил, щоб вже в наступних ходах гідно зустріти напад. В результаті у нього починає з'являтися вміння вичікувати відповідного моменту.

Ще хотілося б помітити, що віртуальному супротивнику для просунутого оцінювання обстановки можна додати аналіз ворожих персонажів. Тобто дати йому можливість глянути на свої армії очима ворога. Тоді він зможе додатково оцінювати слабкі сторони ворожих солдатів, а отже, буде здатний з'ясувати, який із них потрібно атакувати зараз, а який не варто. Також не завадить, що віртуальний супротивник зможе оцінити, кого імовірно зі своїх солдатів стане атакувати ворог. Але тут слід пам'ятати, що у ворога своя інформація про досліджені ділянки карти, і цією інформацією не володіє віртуальний супротивник, адже він бачить карту зі свого погляду.

Продовжимо розглядати частини функції аферентного синтезу, що залишилися. Наступною частиною йде домінуюча мотивація. У грі вона ніби містить напрямну лінію "чого найбільше хоче досягти гравець в даний момент часу". Якщо реалізовано домінуючу мотивацію, тоді віртуальний противник може іноді змінювати стратегію своєї поведінки. Наприклад, зараз він хоче накопичити побільше грошей, щоб створити супер зброю і разом знищити всіх ворогів, але через кілька ходів він бачить армію противника, що наближається до його міста. За розрахунками він із нею не впорається самотужки, але разом із силами третього противника може одержати гору. Уцей момент домінуючим мотивом стане виступити підкуп третього противника, навіть на шкоду попередньому мотиву накопичення великої кількості грошей. В результаті бачимо зміну стратегії поведінки, спричинене домінуючою мотивацією.

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

Пускова аферентація та пам'ять. Якщо з пам'яттю все зрозуміло – це просто набір знань про ігрових персонажів, то пускова аферентація (або узагальнюючий запуск) нерозривно пов'язана з механізмами психіки. Як тільки в навколишньому світі з'являється щось, здатне задовольнити нашу потребу, включається механізм пускової аферентації, а вона включає нашу поведінку, що задовольняє потребу. Щоб зрозуміти навколишній світ, необхідно залучати психіку, а психіка у свою чергу складається з пізнавальної (когнітивної), регулятивної та комунікативної функції.

Пускова аферентація обслуговується слідом за домінуючою мотивацією. У цей момент вже сформовано мотив поведінки на поточний хід гри, і він передається пусковій аферентації, щоб вона шукала в навколишньому світі те, що може задовольнити потребу, що виникла. Наприклад, у разі виникненняв наведеному прикладі мотиву підкупу третього супротивника пускова аферентація повинна з'ясувати у своїй базі знань, чи реально його підкупити, чи вистачить коштів на підкуп і як його виконувати (хабар, бартерний обмін артефактами, містами). Результатом роботи пускової аферентації є сигнал для функції прийняття рішень про можливість задовольнити мотив домінуючої мотивації.

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

В останньому варіанті стека персонаж отримує вміння оперувати не забутими, але відстроченими у часі мотивами. Наприклад: "Зараз не зможу підкупити третього противника, але мені це вкрай потрібно, тому поки відкладу мотив у пам'яті, і чекатиму кращого часу. А натомість займуся збором золота".

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

Давайте знову повернемося до малюнка роботи обстановки і спробуємо вирішити, що робити з персонажем "C". Зрозуміло, його потрібно виводити із зони небезпеки.Але куди, в який бік? Обстановкова аферентація для персонажа було виконано межах області уваги, тому невідомо, як справи поза цієї області. З цього випливає, що функція прийняття рішень повинна вміти виконувати для проблемних персонажів свого роду урізану обстановку з набагато більшою областю уваги.

Чому урізану? А тому що для цих персонажів шукається шлях виходу, а не скільки кожен із них може набрати золота, артефактів тощо. Не виключено, що можна застосувати повну аферентацію. Можливо, персонаж може набрати максимум золота за свою смерть. Для цього сфера уваги розширюється, наприклад, до максимальної довжини руху персонажа за два-три ходи. Якщо за цей час йому ніхто зі своїх солдатів не прийде на допомогу (у розширеній області уваги продовжують переважати ворожі сили), тоді все одно загине. У цьому випадку найкращим рішенням буде відправити його у напрямку недосліджених областей карти або у бік накопичення золота, щоб смерть персонажа не була марною.

Моделювання дії та її виконання

Ці функції реалізуються за допомогою різних існуючих алгоритмів пошуку шляху тощо. Як ви розумієте, такі алгоритми мають безліч модифікацій та прив'язані виключно до сюжету гри. В Інтернеті достатньо інформації щодо подібних алгоритмів. До речі, більшість із них належать саме до функції моделювання програми дії. Так, наприклад, алгоритм пошуку шляху лише моделює програму дії: через які клітини карти персонаж піде в необхідне місце. А ось тільки потім двигун гри рухає персонаж, виконуючи тим самим змодельовану дію.