Чи справді шаховий AI насправді не застосовується в покрокових стратегічних іграх?


13

Очевидно, що спроба застосувати алгоритм min-max на цілому дереві рухів працює лише для невеликих ігор (я вибачаюся перед усіма шанувальниками шахів, під "малим" я не маю на увазі "спрощеним"). Для типових покрокових стратегічних ігор, де дошка часто ширше, ніж 100 плиток, і всі шматки в бік можуть рухатися одночасно, алгоритм min-max не застосовується.

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

Я був би здивований, якби про це не думали раніше і намагалися. Має це? Як це працює?


1
Ви можете експериментувати з спільною дифузією . Він працює за допомогою значення дифузіїg у сітку, вороги потім піднімаються на сітку. Це працює принаймні для наведення маршруту. Якщо ви зробили більше значень для дифузного (окремо?) Та більш складного підйому на пагорб (виберіть, куди йти далі, виходячи з кількох значень) ...
user712092

А як щодо альфа-бета-обрізки ? Краще варіант min-max.
користувач712092

Я бачу альфа-бета-обрізку як своєрідний міні-макс.
Джон

Так. Але це повинно бути швидше. Не знаю, чи допоможе вам ...
user712092

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

Відповіді:


5

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


9

Це не алгоритм minimax, проте хлопці, відповідальні за AI Killzone, випустили документ на основі функцій оцінювання позицій, які також використовує деякі шахові AI.

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

Документ може бути знайдений у програмі AI Game Programming Wisdom 3 та має назву Динамічна оцінка тактичної позиції.

З проектом статті можна ознайомитись у мережі Інтернет тут:
http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf

Сподіваюся, що це допомагає.


2

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


2

Я б запропонував принаймні виконати min-max з обрізкою альфа-бета.

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

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

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

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


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

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

1

Переможець виклику AI Google 2011 року використав min-max (глибина 1). Ще один найкращий учасник використовував випадкові вибірки . Цей учасник конкурсу зазначив, що поєднання мінімальної та випадкової вибірки, що в основному те, що я описав у своєму запитанні, мало успішно. Це, напевно, це вирішує.

З іншого боку, це показує, що можна використовувати min-max у великих іграх. Однак, мабуть, потрібно було обмежити це лише невеликими групами мурах, а робота з повним набором всіх мурашок була б, ймовірно, надто повільною. Ще одне цікаве спостереження полягає в тому, що глибини 1 було достатньо. Ми (люди) стали непогано грати в шахи, і AI для цієї гри потребує набагато глибших дерев пошуку, щоб бути складним. Нові складніші ігри не граються і не вивчаються так довго, і більш глухі ІС можуть мати достатню розважальну цінність.


1

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

Основна ідея вимагає від вас скласти список усіх можливих рухів і повторити цей процес для всіх цих рухів і т. Д. Це можливо в шахах (де список можливих наступних рухів ефективно перелічений; на стартовій шаховій дошці є 20 можливих рухів ) та до певного моменту для інших речей, таких як нарди, шашки та вирішення кубика Рубіка.

Якщо взяти за приклад просту покрокову гру (Civilization 2), кожен із ваших хлопців може за один раз перейти до загальної кількості 8 квадратів (або 24). Якщо у вас є 10 хлопців (що не так багато, зазвичай ви маєте більше до того моменту, як це стане цікаво), загальна кількість можливих "рухів" від поточного стану (так що єдиний рівень) вже 8 ^ 10 або близько 4 мільярдів. Навіть якщо обрізати 99,99% з них, ви все одно не можете заглибитися в дерево, оскільки кількість можливих рухів вибухає дуже швидко.

Додайте до цього, що гра схожа на проблему з кубиком Рубіка, де ви бачите прогрес лише через 10 або 12 рухів, проблема вибухає до тієї точки, коли переваги стандартного хв / макс переважають лише при ємності пам'яті більше, ніж матиме ваш типовий комп’ютер.

Іншими словами, стратегії, які вона знайде, будуть відтворюваними, але поганими.

Що стосується актуальної проблеми, як зробити гідний AI, я б пішов у напрямку керованого випадкового руху (рухайте кожного хлопця з трохи базового інтелекту), оцінки та налаштування. Зробіть це паралельно для 100 або 1000 різних і виберіть той, який у кінцевому підсумку є найкращим. Ви можете надіслати відгуки про результати в оригінальному інтелектуальному рульовому управлінні, щоб знову його налаштувати. Трохи як моделювання Монте-Карло.


0

Щоб успішно застосувати min / max до покрокової стратегічної гри, потрібно правильно застосувати всі доступні шахові прийоми ...

Функція оцінювання

Навіть шахові двигуни мають дуже погану міцність, якщо ваші функції оцінки погані. Найпростіший варіант функції оцінювання: 1 = гра, виграна білим, -1 = гра, виграна чорним, 0 = всі інші випадки; Але це призведе до дуже поганих показників. Те саме відбувається з вашою покроковою грою! Якщо ви хочете використовувати min / max (з обрізкою альфа / бета та інше), як у шахах, ви також повинні застосувати розумну оціночну функцію! Крім того, ви не можете порівнювати ефективність цих алгоритмів при застосуванні до стратегічної гри з випадком, який застосовується до шахів.

Те, що виконують функції оцінювання шахових двигунів, - це оцінка таких предметів:

  • Наскільки добре розташоване положення шматка на дошці?
  • Скільки разів напав шматок?
  • Скільки разів захищається шматок?
  • Наскільки добре кожен твір може вільно «рухатися» по дошці? (або: скільки плиток "контролює")

Ці частини функції оцінювання потрібно спочатку "перекласти" у вашу гру:

  • Положення штуки: Це, наприклад, на пагорбі, який розширює дальність стрільби?
  • Нападник: Скільки загрожує кожен шматок? (наприклад, сума значень атаки одиниць, здатних атакувати спеціальний підрозділ, помножена на деяку ймовірність нападу на нього; ймовірність збільшується, якщо одиниця вже пошкоджена; зменшується, якщо багато інших одиниць знаходяться в зоні дії атакуючої частини)
  • Власна атака: Скільки одиниць може напасти на кожну одиницю?
  • Захист: Скільки власних штук поруч (на допомогу)? Можливо, підрозділ може не атакувати підрозділи на мінімальній відстані, а краще захистити його одиницею, що має можливість атакувати поблизу підрозділи.
  • Мобільність: Наскільки мобільний ваш пристрій? (може втекти?)

Різні оцінки повинні бути підсумовані за функцією зважування (factor_a * rating_a + factor_b * ranting_b + ...) для всіх одиниць ...

У стратегічних іграх також слід враховувати залишені ресурси (золото, дерево, ...).

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

Можливі рухи в кожній позиції

Найбільш проблематичним питанням використання min / max для стратегічних ігор є те, що ви можете командувати декількома одиницями за один оборот, тоді як у шахах вам дозволяється командувати лише одним блоком (за винятком кастингу, але це чітко визначена комбінація руху). Це спричиняє 5 ^ N можливих переміщень для N одиниць для кожної «позиції» (шаховий термін), якщо ви вирішите лише «рухатись на північ, південь, захід, схід АБО зупинка» для кожної одиниці. Ви можете вирішити це, розбивши складну команду на команди низького рівня: наприклад, виберіть дію для підрозділу A, увійдіть у глибину та вирішіть для блоку B .... вирішіть для блоку N ..., а потім закінчіть цей поворот. Але, це одне не змінює складності! Ви повинні оптимізувати порядок, в якому дії призначаються одиницям (наприклад, перший блок B, C, D, а потім блок A). Ви можете записати вплив рішення для кожної одиниці під час останнього розрахунку, а потім сортувати за важливістю. Таким чином обрізку альфа-бета можна використовувати для того, щоб відрізати будь-яку погану комбінацію з дерева пошуку дуже рано. Найвищим пріоритетом завжди має бути "не робити більше нічого і закінчувати свою чергу" (нульовий хід обрізки) у кожній ітерації. Таким чином ви можете "пропустити" призначення завдань більшості підрозділів і дозволити їм просто продовжувати те, що вони робили раніше. Таким чином, пошук швидко піде в глибину, просто подивившись на "критичні" одиниці (наприклад, ті, які дійсно зараз в бою). Не забудьте лише один раз командувати кожним підрозділом ... Ви також можете використовувати деяку випадковість, щоб переконатися, що "важливі" одиниці також час від часу отримують команду. Особливо, підрозділи, які закінчують якусь роботу (наприклад,

Ітераційне поглиблення + таблиця кешування / хешу

Потім ви можете «інтерактивне поглиблення» все більше і більше заглиблюватися в глибину, поки не буде досягнуто деякого часового обмеження. Таким чином, ви будете шукати глибше, якщо менше одиниць, і у вас завжди є якийсь "результат", якщо ви перестанете шукати кращого рішення. Ітераційне поглиблення вимагатиме використання хеш-таблиці для кешування попередніх результатів пошуку. Це також дозволяє повторно використовувати деякі результати пошуку за останніми поворотами (гілка дерева пошуку, яка охоплює команди, які були фактично виконані в останню чергу). Щоб здійснити це, вам потрібна дуже хороша хеш-функція (подивіться на "ключ zbrist"), який може бути ітераційно оновлений. Оновлення хеш-ключа означає, що ви можете просто взяти хеш-ключ старої "позиції" і можете просто натиснути на зміну позиції (наприклад, зніміть одиницю у позиції x і поставте її у положення y). Таким чином, обчислення хеш-ключа є швидким, і вам не потрібно обробляти ситуацію з усіма дошками, щоб обчислити її, просто перевірити, чи містить хеш попередній запис для цієї позиції. У такий спосіб ви повинні переконатися, що не трапляються хеш-зіткнення.

Недетермінована поведінка

Недетермінована поведінка є проблемою для мінімальних / максимальних пошуків. Це означає, що невірно, чи вдаритеся ви в атаку (наприклад, ймовірність 10%). Тоді ви не можете просто планувати, що це станеться. У цьому випадку вам потрібно змінити алгоритм і поставити між ними шар "ймовірності". Це трохи схоже на "його ймовірність повернути". Кожен незалежний результат слід розглядати окремо. Оцінка через цей «шар» глибини повинна бути відібрана для вибірки (відбір проб monte carlo), а результат поглибленої оцінки повинен бути зважений на ймовірність виникнення. Різні результати шару ймовірності повинні розглядатися як різні попередні ходи (але замість min / max слід розраховувати "середнє"). Це, звичайно, збільшить складність дерева пошуку.

Підсумок

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

Хороший ресурс для пояснення цих прийомів (для шахів) - http://chessprogramming.wikispaces.com/

Ви навіть можете реалізувати якусь спрямовану випадковість у min / max пошуку. Замість того, щоб детерміновано досліджувати найкращі результати спочатку в кожній ітерації, ви можете просто рандомізувати це, і нехай його порядок визначається розподілом вірогідності, який базується на поточних оцінках ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.