FIT ČVUT

Adam Vesecký

NI-APH
Přednáška 10

Herní AI

AI úvod

Game AI

Klasické herní AI je hlavně o skriptování a stavových automatech.
Není to o tom, že by nám machine learning neposkytovalo zajímavé výstupy. Je to o tom, že ty výstupy nemusí nutně dodávat tu game experience, kterou hledáme.Jacob Schrum

Umělá inteligence ve hrách

  • Sada pravidel generující chování, které hráči poskytuje iluzi inteligence
  • Měly by být dostatečně sofistikované, aby si hráči mysleli, že interagují s něčím inteligentním
  • Realistické AI nutně neznamená zábavný gameplay
AI in games
AI in games
AI in games

AI Techniky

AI techniques

AI ve hrách

Doom 1 (1993)

  • infighting - monstra bojují proti sobě
  • stavové automaty a atribut SPECIAL přímo v mapě

Age of Empires (1997)

  • AI je dostatečně inteligentní na nalezení frakcí na mapě, ale velmi slabé v obraně

Half-life (1998)

  • monstra mohou hráče vystopovat, případně utéct, když jim ubývá HPčko
  • vojáci měli "automated announcement system", uměli se krýt

Starcraft (1998)

  • particle model pro odhad pozic jednotek, které AI nevidí

Unreal Tournament (1999)

  • Bayesovské sítě

Quake III (1999)

  • HFSM pro rozhodování, AAS (Area Awareness System) pro kolize a pathfinding
Gordon Freeman

AI techniky ve hrách

Black and White (2001)

  • Belief-Desire-Intention model

Halo 2 (2004)

  • behaviorální stromy a fuzzy logika

F.E.A.R. (2005)

  • GOAP pro taktické plánování vojáků, krycí palba

XCOM: Enemy Unknown (2012)

  • utility-based system, kalkulace užitečnosti každé akce

ARMA 3 (2013)

  • issue ordering, situation-based decision, stáhnutí se z boje
  • HTN (Hierarchical task network) pro generátor misí

DOTA 2 (2013) a podobné hry

  • OpenAI boti

Starcraft II (2013)

  • AlphaStar deep neural network (2019)
Starcraft

Výzvy pro herní AI

S čím vlastně počítáme

  • real-time
  • omezené zdroje
  • nekompletní znalost
  • plánování
  • učení
  • akcelerační model

Vlastnosti

  • předvídatelnost (prvky překvapení)
  • komunikace mezi hráčem a AIčkem
  • překvapení - léčky, překvapivé útoky, týmová podpora
  • "winning well and losing well"
  • podvádění - akceptovatelné, pokud si toho hráč nevšimne
AI challenges
AIčko musí hráči nabízet "fun prvek". Každý dokáže udělat AI, které vždy vyhraje.

Pravidla pro dobré AI

  • Dobré AIčko hráči poskytuje jisté výhody
    • např. bojový systém ve hře Doom (2016) - pouze část monster hráče pronásleduje
  • Dobré AIčko řekne hráči, co si myslí
    • např. hlídka řekne do vysílačky "Někdo tu je!"
  • Dobré AI je dostatečně předvídatelné
    • hráč se může naučit taktizovat
  • Dobré AI dokáže interagovat s herním systémem
    • sbírání zbraní, otevírání dveří
  • Dobré AI má vlastní cíle
    • nejedná se jen o náhodně spawnutého enemáka
  • Dobré AI není jen o nepřátelích
    • i NPCčka poskytují "fun" prvek

AI pro moby

Skriptování

  • IF-THIS-THEN-THAT
  • Vše je hardkódované
  • jednoduché, dobře se ladí a rozšiřuje
  • hráč se musí chovat tak, jak designéři předpokládají
  • je potřeba pokrýt velké množství situací
1 // Doom 2: find player to chase
2 void A_Look (mobj_t* actor) {
3 mobj_t* targ;
4 actor->threshold = 0; // any shot will wake up
5 targ = actor->subsector->sector->soundtarget;
6 if (actor->flags & MF_AMBUSH){
7 if (P_CheckSight (actor, actor->target))
8 goto seeyou;
9 } else goto seeyou;
10
11 if (!P_LookForPlayers (actor, false)) return;
12 // go into chase state
13 seeyou:
14 P_ChasePlayer();
15 }
Doom scripting

Konečný stavový automat

  • nejstarší a nejběžnější model pro herní AI
  • vhodný pro entity s malým množstvím disjunktních stavů
    Dungeon FSM
  • každá entita může být v daném čase v právě jednom stavu
  • Definice
    • čtveřice: (Q, \Sigma, \delta, q_0)
    • Q  je konečná, neprázdná množina stavů
    • \Sigma  je konečná množina vstupů
    • \delta: Q \times \Sigma \rightarrow Q  je přechodová funkce
    • q_0  je počáteční stav, q_0 \in Q
  • dá se implementovat polymorfismem nebo přechodovou tabulkou
  • není vhodné pro komplexní systémy (nebezpečí kombinatorické exploze)

Příklad: Pacman FSM

FSM pacman
pacman

Příklad: Pacman - přechodová tabulka

StavPřechodPodmínka
Procházej bludištěmPronásleduj PacmanaPacman zahlédnut
Procházej bludištěmUtíkej od PacmanPacman snědl Power Pellet
Pronásleduj PacmanaProcházej bludištěmPacman ztracen z dohledu
Pronásleduj PacmanaUtíkej od PacmanaPacman snědl Power Pellet
Utíkej od PacmanaVrať se do domečkuKolize s Pacmanem
Utíkej od PacmanaProcházej bludištěmPowerPellet expiroval
Vrať se do domečkuProcházej bludištěmDoběhnuto do domečku

Příklad: Doomguard

FSM doomguard
doomguard

Příklad: Doomguard

  • přidejme funkci "uspat"
doomguard
FSM doomguard extended

Hierarchický stavový automat

  • další název - statechart
  • každý stav může mít superstav a množinu podstavů
  • skupiny stavů sdílí přechody
  • dá se implementovat zásobníkem
    • vlož stav nižší úrovně při přechodu
    • vytáhni další stav při návratu a přesuň se do něj
HFSM doomguard
doomguard

Fuzzy logika

  • komplementární struktura pro stavové automaty a skriptování
  • místo prahování můžeme rozmazávat přechody mezi stavy
  • použito ve hře Halo 3 pro řízení jednotek a vyhodnocování hrozeb
  • další aplikace: proximity, mood management
fuzzy logic diagram

Behaviorální stromy

  • stromy uzlů, které řídí rozhodovací procesy
  • původně pro hru Halo 2 (2004)
  • kombinuje elementy ze skriptování a HFSM
  • neexistuje formální definice
  • depth-first průchod
  • každý uzel vrací status
    • SUCCESS, FAILURE, RUNNING, (SUSPENDED)
behavior tree example

Behaviorální strom

behavior tree
Typ uzluSuccessFailureRunning
SelectorPokud jeden potomek uspějePokud všichni potomci failnouPokud jeden potomek běží
SequencePokud všichni potomci uspějíPokud jeden potomek failnePokud jeden potomek běží
DecoratorTo záležíTo záležíTo záleží
ParallelPoku N potomků uspějePoku M-N potomků uspějePokud všichni potomci běží
ActionPři dokončeníPři chyběBěhem dokončení
ConditionPokud truePokud falseNikdy

Příklad: Unreal Engine BT Editor

behavior tree in unrel engine

Příklad: Doomguard

behavior tree with doomguard

Možná vylepšení

  • můžeme definovat podmínkový selector pro zjednodušení diagramu
behavior tree optimizationbehavior tree optimization

Příklad: Zamčené dveře

doom door opening
behavior tree door

BDI Systémy

  • Belief-Desire-Intention model
  • Belief - zjednodušený stav herního světa (nemusí se zakládat na pravdě)
  • Desire - motivace, touhy
  • Intention - volby, cíle
  • Vlastnosti
    • Deliberativní - vytváří symbolickou reprezentaci herního světa
    • Logické - volby se řídí výrokovou logikou a ne heuristikou
    • Racionální - volby jsou prováděny v nejlepším zájmu agenta
    • Goal-oriented
  • Implementace
    • PRS (Procedural Reasoning System)
    • GOAP (Goal-oriented action planning)

Goal-Oriented Action Planning

  • považuje cíle za žádané stavy -> vyber si cíl a zkus se k němu dostat
  • každá akce obsahuje podmínky, které je nutno splnit
  • implementováno ve hře F.E.A.R (2005) a Tomb Raider (2013)
goal-oriented action planning diagram

Příklad: F.E.A.R

  • každý mob má nějaké cíle o různých prioritách
  • používá se plánovač k tomu, aby byl uspokojen ten s nejvyšší prioritou
  • AI se rozhoduje na základě aktuální herní situace
SoldierAssassinRat
AttackAttackAnimate
AttackCrouchInspectDisturbanceIdle
SuppressionFireLookAtDisturbanceGotoNode
FlushOutWithGrenadeAttackMeleeUncloaked
AttackFromCoverTraverseBlockedDoor
BlindFireFromCoverAttackFromAmbush
ReloadCoveredAttackLungeUncloaked
FEAR soldier
FEAR assassin
FEAR rat

AI pro navigaci

Predikce oponentů

  • boti by neměli vědět, kde hráč je = partial observation
    predicting opponents
  • Obecné metody:
    • Skrytý semi-markovský model
    • Particle filtry
  • Metody pro FPSka:
    • Occupancy map
    • SOAR cognitive architecture (použito ve hře Quake II)
    • Vision Cone (ve hře Bioshock)
    • Influence Sphere (dle vzdálenosti od hráče)
  • Metody pro strategie:
    • Threat map
    • Influence map
    • Bayesovské sítě
    • Delaunayova triangulace
    • K-průměrování

Occupancy map

  • pravidelná mřížka přes herní mapu
  • udržuje pravděpodobnost pozice hráče pro každou buňku
  • jakmile se hráč ztratí z dohledu, dojde k propagaci do sousedních buněk
occupancy map animation

Threat map

  • uchovává pro každou buňku potenciální damage, který hráč může dostat
  • lehce se integruje do pathfindingu
  • využití např. pro vyhnutí se předsunuté základně
threat map diagram

AI ve strategiích

RTS

  • Real-time strategie je bayesovská hra s nulovým součtem (Rubinstein, 1994)
    Total War
  • hra, kde hráč kontroluje obvykle vojenské jednotky s cílem porazit ostatní frakce
  • cíle: postavit základnu, získat zdroje, vybudovat armádu, porazit nepřítele
  • metody: layer-based AI, rule-based AI

Herní prvky

  • mapa, minimapa
  • zdroje
  • jednotky a jejich staty
  • budovy

Další prvky

  • obvykle real-time gameplay
  • fog of war
  • tech tree

RTS hry

Dune II
1992
C&C Red Alert
1995
Total Annihilation
1997
Warcraft 3: Reign of Chaos
2002
Starcraft II
2010
Ashes of the Singularity
2016

RTS Featury

Resource Control

  • čím více zdrojů má hráč pod kontrolou, tím rychleji buduje

Tech tree

  • přímý graf obsahující technologická vylepšení frakce

Build order (otevření)

  • prvních pár minut hraní, kdy hráč postaví klíčové budovy
RTS build order

Fog of war

  • mlha, která zakrývá neprozkoumaná místa na mapě
  • vyžaduje posílání průzkumných jednotek

Micromanagement

  • ovládání jednotek v boji

Příklad: Starcraft 2 Tech-tree

Starcraft II Tech-tree

RTS vrstvy pro AIčko

  • micromanagement
  • tactics (budování armády)
  • strategy (tech tree)
RTS AI layers

Layer-based AI

  • každá vrstva řeší určitý problém
  • rozhodovací komponenty vyhodnocují dostupné informace a exekutoři vykonávají doporučené akce
  • Sensor - čte herní stav
  • Analyzer - dává dohromady koherentní obraz situace ve hře
  • Memorizer - ukládá data jako analýza terénu, historie rozhodování,...
  • Decider - stanovuje cíle
  • Executor - překládá cíle na akce
  • Coordinator - synchronizuje skupiny jednotek
  • Actuator - provádí přímou akci
Layer-based AI in games

Příklad: Layer-based AI

Layer Based AI diagram
Cossacks 3

Příklad: Megaglest

  • Open-source 3D RTS (ODKAZ)
  • sedm frakcí: technická, magická, indiáni, egypt,...
  • rule-based AI
Megaglest

Megaglest architektura

Megaglest architecture

Megaglest pravidla

PravidloPodmínkaPříkazFrekvence [ms]
AiRuleWorkerHarvestWorker stoppedOrder worker to harvest2 000
AiRuleRefreshHarvesterWorker reassigned20 000
AiRuleScoutPatrolBase is stableSend scout patrol10 000
AiRuleRepairBuilding DamagedRepair10 000
AiRuleReturnBaseStopped unitOrder return to base5 000
AiRuleMassiveAttackEnough soldiersOrder massive attack1 000
AiRuleAddTasksTasks emptyAdd tasks5 000
AiRuleBuildOneFarmNot enough farmsBuild farm10 000
AiRuleResourceProducerNot enough resourcesBuild resource producer5 000
AiRuleProducePerforming prod. task2 000
AiRuleBuildPerforming build task2 000
AiRuleUpgradePerforming upg. task30 000
AiRuleUnBlockBlocked unitsMove surrounding units3 000

Co jsme si řekli

  • Něco o základních challengích, které se v herním AI řeší
  • Techniky herního AI jako skriptování, FSM, and HFSM
  • Něco málo o behaviorálních stromech
  • Něco málo o RTS hrách

Hláška na závěr

All you had to do was follow the damn train!GTA, San Andreas