Грайте наодинці — і три з чотирьох замків обороняє машина. Кожен комп’ютерний воєначальник крутить ту саму коротку петлю: знайти м’яч, вартий страху, вгадати, де він перетне твою стіну, ковзнути йому назустріч, — а прірва між ганчіркою і загрозою зводиться до чотирьох чисел.
Написано й відредаговано англійською. Цю українську версію створено машинним перекладом; там, де важлива точність, авторитетним є англійський оригінал. Читати оригінал англійською →
Перша робота воєначальника, сто двадцять разів на секунду, — це сортування. Коли на арені гуляє до двох м’ячів, ШІ мусить вирішити, який із них заслуговує на його щит. Він оцінює кожен активний, не впійманий м’яч за відстанню до власного короля, а тоді віднімає сталий бонус у 250 одиниць від будь-якого м’яча, що справді прямує до кута: м’яч, що віддаляється, трактується так, ніби він на 250 одиниць далі, ніж насправді. 1 Найнижча оцінка здобуває увагу щита.
У підсумку маємо захисника, який не панікує через м’яч, що нешкідливо пропливає повз, але чіпляється за той, який ближчий і летить на нього. Це грубувата модель того, що людина робить не думаючи: стеж за тим, що йде на тебе, не зважай на те, що йде геть. Уся ця оцінка — один скалярний добуток між швидкістю м’яча і напрямком до короля: додатне значення означає «цілить у мене», і цього досить.
Обравши загрозу, воєначальник мусить вирішити, де саме на своїй діагональній рейці бути. Він не розв’язує повного шляху відскоків: ніякого трасування відбиттів, ніякого прогнозування від стін. Він бере позицію м’яча, підштовхує її на короткий крок уперед уздовж поточної швидкості (упередження на 0,12 секунди) і проєктує цю майбутню точку прямо на рейку, щоб дістати цільову частку між 0 і 1. 1
Це навмисно неглибоке передбачення, і саме тому ШІ можна перемогти. Оскільки він упереджує лише на одну восьму секунди й ніколи не передбачає рикошету, м’яч, який прилетить через відскок від стіни, його дурить: він прив’язується до того, куди м’яч показує зараз. Людина, яка відбиває кидки від країв арени, використовує саме цю сліпу зону. Машина реагує на теперішнє з волосинкою передбачливості; вона не планує.
Комп’ютер не обчислює майбутнього м’яча. Він нахиляється на одну восьму секунди вперед, наводить свій щит туди, де м’яч був би, якби ніщо не втрутилося, і дозволяє всьому, що втручається, стати вашою нагодою.
Три рівні складності поділяють один і той самий код. Між легким, середнім і складним змінюється рядок із чотирьох налаштувальних чисел. 1 Тремтіння додає випадкову похибку до цілі щита, тож приціл легкого воєначальника блукає майже на п’яту частину його рейки, тоді як складний майже точний. Дистанція реакції задає, наскільки близько мусить підійти м’яч, перш ніж воєначальник завдасть собі клопоту його відстежувати: легкий не зважає ні на що далі за 420 одиниць від свого короля, трохи менше за половину ширини поля; складний відстежує через усю арену. Шанс упіймати — це ймовірність, що він схопить м’яч, який підійшов до його щита досить близько, щоб бути впійманим. А приціл-по-суперниках — це один-єдиний перемикач, який вирішує, чи воєначальник узагалі грає в атаці.
| Регулятор | Легкий | Середній | Складний |
|---|---|---|---|
| Тремтіння прицілу (частки рейки) | 0.18 | 0.07 | 0.015 |
| Дистанція реакції (одиниці) | 420 | 700 | 2,000 |
| Шанс упіймати | 0% | 25% | 55% |
| Цілить у суперників? | ні | ні | так |
Усі чотири значення походять з однієї невеликої налаштувальної таблиці всередині ігрового рушія Bulwark, по рядку на рівень. Дистанцію реакції на складному записано як подвійну ширину арени, а арена — квадрат зі стороною 1000 одиниць, тож 2000 одиниць означає «відстежувати завжди». 1
Легкий чи середній воєначальник ніколи не ловить із наміром ударити. Легкий не ловить узагалі ніколи, а середній — лише вряди-годи, без жодного плану, що робити з м’ячем, коли той уже в нього. Перемкніть приціл-по-суперниках — те, що робить лише складний рівень, — і ШІ перестає бути суто реактивним. Тримаючи м’яч, він оглядає поле, обирає найбільш пораненого суперника (того, у кого лишилося найменше цеглин) і цілить туди. 1
Робить він це без жодного пошуку шляху. Він пробує одинадцять кандидатних позицій уздовж власної рейки і для кожної відтворює арифметику випуску з рушія, щоб побачити, у якому напрямку полетів би той кидок, а тоді лишає позицію, чий вихідний вектор указує найпряміше на обрану жертву. 1 Це радше груба сила над жменею варіантів, ніж кмітливість, але терпляча: обравши місце, воєначальник тримає м’яч, доки щит справді туди не ковзне, і відпускає лише тоді, коли той прибув або коли він протримав достатньо довго, щоб чекання коштувало більше, ніж вартий кидок. Намір безпомилково стратегічний — саме те, що зробила б людина, яка полює на легке вбивство. Вибір цілі за принципом «найменше цеглин» наводить трьох незалежних захисників на того, хто вже й так програє.
Кожна «випадкова» річ, яку робить воєначальник, — тремтіння його прицілу, підкидання монети щодо того, ловити чи ні, — береться з генератора із сідом, компактної процедури, відомої як mulberry32, що перетворює одне початкове число на довгий, повторюваний потік псевдовипадкових значень. 2 Дайте йому той самий сід — і він довіку видаватиме ту саму послідовність. Жива партія бере сід із годинника, тож дві гри ніколи не починаються однаково, але поверніть той самий сід — і матч відтвориться точно: ті самі кути запуску, ті самі хитання, ті самі упіймання.
Цей детермінізм не косметична дрібниця. Саме він робить гру придатною для тестування: її набір тестів програє цілі матчі комп’ютера проти комп’ютера від фіксованого сіду й очікує щоразу того самого результату; і саме він дозволяє запакувати всю симуляцію, разом із курсором генератора, у JSON і відбудувати заново, тож в онлайні хост може транслювати свій стан, а кожен з інших гравців відбудовує ідентичне поле. Воєначальники здаються живими, бо їхні помилки виглядають по-людськи; під сподом їхні «інстинкти» — це коротка арифметична рекурентність, яку будь-хто може перемотати до початку. Машині, що охороняє замок, виявляється, потрібно лише кілька чисел і потік відтворюваної удачі. 2