UzgÄju interesantu materiÄlu par mÄkslÄ«go intelektu spÄlÄs. Ar vienkÄrÅ”u piemÄru skaidrojumu par AI pamata lietÄm, un iekÅ”pusÄ ir daudz noderÄ«gu rÄ«ku un metožu tÄ Ärtai izstrÄdei un projektÄÅ”anai. Tur ir arÄ« norÄdÄ«ts, kÄ, kur un kad tÄs lietot.
LielÄkÄ daļa piemÄru ir rakstÄ«ti pseidokodÄ, tÄpÄc nav nepiecieÅ”amas progresÄ«vas programmÄÅ”anas zinÄÅ”anas. Zem griezuma ir 35 teksta lapas ar attÄliem un gifiem, tÄpÄc gatavojieties.
UPD. Es atvainojos, bet es jau esmu tulkojis Å”o rakstu par HabrÄ
Kas ir AI?
SpÄles AI koncentrÄjas uz to, kÄdas darbÄ«bas objektam jÄveic, pamatojoties uz apstÄkļiem, kÄdos tas atrodas. To parasti sauc par "inteliÄ£entÄ aÄ£enta" vadÄ«bu, kur aÄ£ents ir spÄlÄtÄja varonis, transportlÄ«dzeklis, robots vai dažreiz kaut kas abstraktÄks: vesela vienÄ«bu grupa vai pat civilizÄcija. KatrÄ gadÄ«jumÄ tÄ ir lieta, kurai jÄredz sava vide, jÄpieÅem lÄmumi, pamatojoties uz to, un jÄrÄ«kojas saskaÅÄ ar tiem. To sauc par sajÅ«tu/domÄt/rÄ«koties ciklu:
- SajÅ«ta: aÄ£ents atrod vai saÅem informÄciju par lietÄm savÄ vidÄ, kas var ietekmÄt viÅa uzvedÄ«bu (draudi tuvumÄ, priekÅ”meti, ko savÄkt, interesantas vietas, ko izpÄtÄ«t).
- PadomÄjiet: aÄ£ents izlemj, kÄ reaÄ£Ät (apsver, vai ir pietiekami droÅ”i savÄkt priekÅ”metus, vai viÅam vispirms ir jÄcÄ«nÄs/slÄpjas).
- RÄ«kojieties: aÄ£ents veic darbÄ«bas, lai Ä«stenotu iepriekÅ”Äjo lÄmumu (sÄk virzÄ«ties uz ienaidnieku vai objektu).
- ...tagad situÄcija ir mainÄ«jusies varoÅu darbÄ«bas dÄļ, tÄpÄc cikls atkÄrtojas ar jauniem datiem.
AI mÄdz koncentrÄties uz cilpas Sense daļu. PiemÄram, autonomÄs automaŔīnas fotografÄ ceļu, apvieno tos ar radara un lidara datiem un interpretÄ tos. To parasti veic maŔīnmÄcÄ«Å”anÄs, kas apstrÄdÄ ienÄkoÅ”os datus un pieŔķir tiem nozÄ«mi, iegÅ«stot semantisko informÄciju, piemÄram, "20 jardus priekÅ”Ä jums ir cita automaŔīna". TÄs ir tÄ sauktÄs klasifikÄcijas problÄmas.
SpÄlÄm nav nepiecieÅ”ama sarežģīta sistÄma, lai iegÅ«tu informÄciju, jo lielÄkÄ daļa datu jau ir tÄs neatÅemama sastÄvdaļa. Nav nepiecieÅ”ams palaist attÄlu atpazÄ«Å”anas algoritmus, lai noteiktu, vai priekÅ”Ä ir ienaidnieks ā spÄle jau zina un ievada informÄciju tieÅ”i lÄmumu pieÅemÅ”anas procesÄ. TÄpÄc cikla SajÅ«tu daļa bieži vien ir daudz vienkÄrÅ”Äka nekÄ daļa DomÄ un rÄ«kojies.
SpÄles AI ierobežojumi
AI ir vairÄki ierobežojumi, kas jÄievÄro:
- AI nav iepriekÅ” jÄapmÄca, it kÄ tas bÅ«tu maŔīnmÄcÄ«Å”anÄs algoritms. Nav jÄgas izstrÄdes laikÄ rakstÄ«t neironu tÄ«klu, lai uzraudzÄ«tu desmitiem tÅ«kstoÅ”u spÄlÄtÄju un uzzinÄtu labÄko veidu, kÄ spÄlÄt pret viÅiem. KÄpÄc? Jo spÄle nav izlaista un spÄlÄtÄju nav.
- SpÄlei jÄbÅ«t jautrai un izaicinoÅ”ai, tÄpÄc aÄ£entiem nevajadzÄtu atrast labÄko pieeju pret cilvÄkiem.
- AÄ£entiem ir jÄizskatÄs reÄlistiskiem, lai spÄlÄtÄji justos tÄ, it kÄ viÅi spÄlÄ pret Ä«stiem cilvÄkiem. AlphaGo programma pÄrspÄja cilvÄkus, taÄu izvÄlÄtie soļi bija ļoti tÄlu no tradicionÄlÄs spÄles izpratnes. Ja spÄle simulÄ cilvÄka pretinieku, Å”ai sajÅ«tai nevajadzÄtu pastÄvÄt. Algoritms ir jÄmaina, lai tas pieÅemtu ticamus, nevis ideÄlus lÄmumus.
- AI jÄstrÄdÄ reÄllaikÄ. Tas nozÄ«mÄ, ka algoritms nevar monopolizÄt CPU izmantoÅ”anu ilgu laiku, lai pieÅemtu lÄmumus. Pat 10 milisekundes ir pÄrÄk ilgs laiks, jo lielÄkajai daļai spÄļu ir nepiecieÅ”amas tikai 16 lÄ«dz 33 milisekundes, lai veiktu visu apstrÄdi un pÄrietu uz nÄkamo grafikas kadru.
- IdeÄlÄ gadÄ«jumÄ vismaz daļai sistÄmas vajadzÄtu bÅ«t balstÄ«tai uz datiem, lai lietotÄji, kas nav kodÄti, varÄtu veikt izmaiÅas un veikt pielÄgojumus ÄtrÄk.
Apskatīsim AI pieejas, kas aptver visu Sense/Think/Act ciklu.
PamatlÄmumu pieÅemÅ”ana
SÄksim ar vienkÄrÅ”Äko spÄli - Pong. MÄrÄ·is: pÄrvietojiet lÄpstiÅu tÄ, lai bumba atlÄktu no tÄs, nevis lidotu tai garÄm. Tas ir kÄ tenisÄ, kur tu zaudÄ, ja netrÄpi pa bumbu. Å eit AI ir salÄ«dzinoÅ”i viegls uzdevums - izlemt, kurÄ virzienÄ pÄrvietot platformu.
NosacÄ«ti paziÅojumi
AI Pong visredzamÄkais risinÄjums ir vienmÄr mÄÄ£inÄt novietot platformu zem bumbas.
VienkÄrÅ”s algoritms tam, rakstÄ«ts pseidokodÄ:
katrs kadrs/atjauninÄjums spÄles darbÄ«bas laikÄ:
ja bumba atrodas pa kreisi no lÄpstiÅas:
pÄrvietot lÄpstiÅu pa kreisi
citÄdi, ja bumba atrodas pa labi no lÄpstiÅas:
pÄrvietojiet lÄpstiÅu pa labi
Ja platforma pÄrvietojas ar bumbiÅas Ätrumu, tas ir ideÄls Pong algoritms AI. Nevajag neko sarežģīt, ja aÄ£entam nav tik daudz datu un iespÄjamo darbÄ«bu.
Å Ä« pieeja ir tik vienkÄrÅ”a, ka viss Sense/Think/Act cikls ir tikko pamanÄms. Bet tas ir tur:
- Sense daļa ir divos if paziÅojumos. SpÄle zina, kur atrodas bumba un kur atrodas platforma, tÄpÄc AI meklÄ Å”o informÄciju.
- DomÄÅ”anas daļa ir iekļauta arÄ« divos if paziÅojumos. Tie ietver divus risinÄjumus, kas Å”ajÄ gadÄ«jumÄ ir viens otru izslÄdzoÅ”i. RezultÄtÄ tiek izvÄlÄta viena no trim darbÄ«bÄm - pÄrvietot platformu pa kreisi, pÄrvietot to pa labi vai neko nedarÄ«t, ja tÄ jau ir pareizi novietota.
- DarbÄ«bas daļa ir atrodama paziÅojumos Move Paddle Left un Move Paddle Right. AtkarÄ«bÄ no spÄles dizaina viÅi var pÄrvietot platformu uzreiz vai ar noteiktu Ätrumu.
Å Ädas pieejas sauc par reaktÄ«vÄm - ir vienkÄrÅ”s noteikumu kopums (Å”ajÄ gadÄ«jumÄ, ja kodÄ ir paziÅojumi), kas reaÄ£Ä uz paÅ”reizÄjo pasaules stÄvokli un rÄ«kojas.
LÄmumu koks
Pong piemÄrs faktiski ir lÄ«dzvÄrtÄ«gs formÄlai AI koncepcijai, ko sauc par lÄmumu koku. Algoritms iziet cauri tam, lai sasniegtu ālapuā ā lÄmumu par to, kÄ rÄ«koties.
Izveidosim mÅ«su platformas algoritma lÄmumu koka blokshÄmu:
Katru koka daļu sauc par mezglu ā AI izmanto grafu teoriju, lai aprakstÄ«tu Å”Ädas struktÅ«ras. Ir divu veidu mezgli:
- LÄmuma mezgli: izvÄle starp divÄm alternatÄ«vÄm, pamatojoties uz kÄda nosacÄ«juma pÄrbaudi, kur katra alternatÄ«va tiek attÄlota kÄ atseviŔķs mezgls.
- Beigu mezgli: veicamÄ darbÄ«ba, kas atspoguļo galÄ«go lÄmumu.
Algoritms sÄkas no pirmÄ mezgla (koka āsaknesā). Tas vai nu pieÅem lÄmumu par to, uz kuru bÄrnmezglu pÄriet, vai arÄ« izpilda mezglÄ saglabÄto darbÄ«bu un iziet.
KÄds ir labums no lÄmumu koka, kas veic to paÅ”u darbu, ko iepriekÅ”ÄjÄ sadaÄ¼Ä sniegtie if paziÅojumi? Å eit ir vispÄrÄja sistÄma, kurÄ katram lÄmumam ir tikai viens nosacÄ«jums un divi iespÄjamie rezultÄti. Tas ļauj izstrÄdÄtÄjam izveidot AI no datiem, kas atspoguļo lÄmumus kokÄ, bez nepiecieÅ”amÄ«bas tos stingri kodÄt. Iesniegsim to tabulas veidÄ:
Koda pusÄ jÅ«s iegÅ«sit sistÄmu virkÅu nolasÄ«Å”anai. Izveidojiet mezglu katram no tiem, savienojiet lÄmumu loÄ£iku, pamatojoties uz otro kolonnu, un pakÄrtotos mezglus, pamatojoties uz treÅ”o un ceturto kolonnu. Jums joprojÄm ir jÄieprogrammÄ nosacÄ«jumi un darbÄ«bas, taÄu tagad spÄles struktÅ«ra bÅ«s sarežģītÄka. Å eit jÅ«s pievienojat papildu lÄmumus un darbÄ«bas un pÄc tam pielÄgojat visu AI, vienkÄrÅ”i rediÄ£Äjot koka definÄ«cijas teksta failu. PÄc tam failu pÄrsÅ«tiet spÄles izstrÄdÄtÄjam, kurÅ” var mainÄ«t uzvedÄ«bu, nepÄrkompilÄjot spÄli vai nemainot kodu.
LÄmumu koki ir ļoti noderÄ«gi, ja tie tiek veidoti automÄtiski, izmantojot lielu piemÄru kopu (piemÄram, izmantojot ID3 algoritmu). Tas padara tos par efektÄ«vu un augstas veiktspÄjas rÄ«ku situÄciju klasificÄÅ”anai, pamatojoties uz iegÅ«tajiem datiem. TomÄr mÄs pÄrsniedzam vienkÄrÅ”u sistÄmu, lai aÄ£enti varÄtu atlasÄ«t darbÄ«bas.
ScenÄriji
MÄs analizÄjÄm lÄmumu koka sistÄmu, kurÄ tika izmantoti iepriekÅ” izveidoti nosacÄ«jumi un darbÄ«bas. Persona, kas izstrÄdÄ AI, var sakÄrtot koku, kÄ vien vÄlas, taÄu viÅam joprojÄm ir jÄpaļaujas uz kodÄtÄju, kurÅ” to visu ir ieprogrammÄjis. Ko darÄ«t, ja mÄs varÄtu dot dizainerim rÄ«kus, lai radÄ«tu savus apstÄkļus vai darbÄ«bas?
Lai programmÄtÄjam nebÅ«tu jÄraksta kods nosacÄ«jumiem Is Ball Left Of Paddle un Is Ball Right Of Paddle, viÅÅ” var izveidot sistÄmu, kurÄ dizaineris ierakstÄ«s nosacÄ«jumus, lai pÄrbaudÄ«tu Ŕīs vÄrtÄ«bas. Tad lÄmumu koka dati izskatÄ«sies Å”Ädi:
Tas bÅ«tÄ«bÄ ir tÄds pats kÄ pirmajÄ tabulÄ, taÄu risinÄjumiem paÅ”iem ir savs kods, nedaudz lÄ«dzÄ«gs if priekÅ”raksta nosacÄ«tajai daļai. Koda pusÄ tas bÅ«tu lasÄms lÄmuma mezglu otrajÄ kolonnÄ, taÄu tÄ vietÄ, lai meklÄtu konkrÄtu izpildÄmu nosacÄ«jumu (Is Ball Left Of Paddle), tas novÄrtÄ nosacÄ«juma izteiksmi un attiecÄ«gi atgriež patiesu vai nepatiesu. Tas tiek darÄ«ts, izmantojot Lua vai Angelscript skriptu valodu. Izmantojot tos, izstrÄdÄtÄjs var paÅemt objektus savÄ spÄlÄ (bumbu un lÄpstiÅu) un izveidot mainÄ«gos, kas bÅ«s pieejami skriptÄ (ball.position). TurklÄt skriptu valoda ir vienkÄrÅ”Äka nekÄ C++. Tam nav nepiecieÅ”ams pilns kompilÄcijas posms, tÄpÄc tas ir ideÄli piemÄrots Ätrai spÄles loÄ£ikas pielÄgoÅ”anai un ļauj ānekodÄtÄjiemā paÅ”iem izveidot nepiecieÅ”amÄs funkcijas.
IepriekÅ” minÄtajÄ piemÄrÄ skriptu valoda tiek izmantota tikai nosacÄ«juma izteiksmes novÄrtÄÅ”anai, taÄu to var izmantot arÄ« darbÄ«bÄm. PiemÄram, dati Move Paddle Right var kļūt par skripta paziÅojumu (bumbiÅa.pozÄ«cija.x += 10). Lai darbÄ«ba bÅ«tu definÄta arÄ« skriptÄ, bez nepiecieÅ”amÄ«bas ieprogrammÄt Move Paddle Right.
Varat iet vÄl tÄlÄk un uzrakstÄ«t visu lÄmumu koku skriptu valodÄ. Tas bÅ«s kods cietkodÄtu nosacÄ«jumu paziÅojumu veidÄ, taÄu tie atradÄ«sies ÄrÄjos skripta failos, tas ir, tos var mainÄ«t, nepÄrkompilÄjot visu programmu. Bieži vien spÄles laikÄ varat rediÄ£Ät skripta failu, lai Ätri pÄrbaudÄ«tu dažÄdas AI reakcijas.
Notikuma atbilde
IepriekÅ” minÄtie piemÄri ir lieliski piemÄroti Pong. ViÅi nepÄrtraukti vada Sense/Think/Act ciklu un rÄ«kojas, pamatojoties uz jaunÄko stÄvokli pasaulÄ. Bet sarežģītÄkÄs spÄlÄs ir jÄreaÄ£Ä uz atseviŔķiem notikumiem, nevis jÄnovÄrtÄ viss uzreiz. Pongs Å”ajÄ gadÄ«jumÄ jau ir slikts piemÄrs. IzvÄlÄsimies citu.
IedomÄjieties Å”ÄvÄju, kurÄ ienaidnieki nekustas, lÄ«dz pamana spÄlÄtÄju, pÄc tam viÅi rÄ«kojas atkarÄ«bÄ no savas āspecializÄcijasā: kÄds skries āsteigtiesā, kÄds uzbruks no tÄlienes. TÄ joprojÄm ir pamata reaktÄ«vÄ sistÄma - "ja spÄlÄtÄjs ir pamanÄ«ts, dariet kaut ko" -, taÄu to var loÄ£iski sadalÄ«t notikumÄ SpÄlÄtÄjs redzÄts un reakcijÄ (atlasiet atbildi un izpildiet to).
Tas mÅ«s atgriež pie SajÅ«tu/DomÄ/ RÄ«kojies cikla. MÄs varam kodÄt Sense daļu, kas pÄrbaudÄ«s katru kadru, vai AI redz atskaÅotÄju. Ja nÄ, nekas nenotiek, bet, ja redz, tad tiek izveidots notikums Player Seen. Kodam bÅ«s atseviŔķa sadaļa, kurÄ teikts: "Kad notiek notikums Player Seen, dariet", kur ir atbilde, kas jums nepiecieÅ”ama, lai risinÄtu sadaļas DomÄ un rÄ«kojies. TÄdÄjÄdi jÅ«s iestatÄ«sit reakcijas uz notikumu Player Seen: āsteidzÄ«gajamā varonim - ChargeAndAttack un snaiperim - HideAndSnipe. Å Ä«s attiecÄ«bas var izveidot datu failÄ Ätrai rediÄ£ÄÅ”anai bez nepiecieÅ”amÄ«bas atkÄrtoti kompilÄt. Å eit var izmantot arÄ« skriptu valodu.
Sarežģītu lÄmumu pieÅemÅ”ana
Lai gan vienkÄrÅ”as reakcijas sistÄmas ir ļoti spÄcÄ«gas, ir daudz situÄciju, kad ar tÄm nepietiek. Dažreiz jums ir jÄpieÅem dažÄdi lÄmumi, pamatojoties uz to, ko aÄ£ents paÅ”laik dara, taÄu to ir grÅ«ti iedomÄties kÄ nosacÄ«jumu. Dažreiz ir pÄrÄk daudz nosacÄ«jumu, lai tos efektÄ«vi attÄlotu lÄmumu kokÄ vai skriptÄ. Dažreiz jums ir iepriekÅ” jÄizvÄrtÄ, kÄ situÄcija mainÄ«sies, pirms izlemjat par nÄkamo soli. Lai atrisinÄtu Ŕīs problÄmas, ir vajadzÄ«gas sarežģītÄkas pieejas.
GalÄ«gÄ stÄvokļa maŔīna
IerobežotÄ stÄvokļa maŔīna jeb FSM (finite state machine) ir veids, kÄ pateikt, ka mÅ«su aÄ£ents paÅ”laik atrodas vienÄ no vairÄkiem iespÄjamiem stÄvokļiem un ka tas var pÄriet no viena stÄvokļa uz citu. Ir zinÄms skaits Å”Ädu stÄvokļu, tÄpÄc arÄ« nosaukums. LabÄkais piemÄrs no dzÄ«ves ir luksofors. DažÄdÄs vietÄs ir dažÄdas gaismu secÄ«bas, bet princips ir viens ā katrs stÄvoklis kaut ko attÄlo (apstÄties, iet utt.). Luksofors jebkurÄ laikÄ atrodas tikai vienÄ stÄvoklÄ« un pÄrvietojas no viena uz otru, pamatojoties uz vienkÄrÅ”iem noteikumiem.
Tas ir lÄ«dzÄ«gs stÄsts ar NPC spÄlÄs. PiemÄram, Åemsim aizsargu ar Å”Ädiem stÄvokļiem:
- PatrulÄÅ”ana.
- Uzbrūk.
- BÄgÅ”ana.
Un Å”ie nosacÄ«jumi tÄ stÄvokļa maiÅai:
- Ja apsargs redz ienaidnieku, viÅÅ” uzbrÅ«k.
- Ja apsargs uzbrÅ«k, bet vairs neredz ienaidnieku, viÅÅ” atgriežas patrulÄt.
- Ja apsargs uzbrÅ«k, bet ir smagi ievainots, viÅÅ” bÄg.
Var rakstÄ«t arÄ« if-izteikumus ar aizbildÅa stÄvokļa mainÄ«go un dažÄdÄm pÄrbaudÄm: vai tuvumÄ ir ienaidnieks, kÄds ir NPC veselÄ«bas lÄ«menis utt. Pievienosim vÄl dažus stÄvokļus:
- DÄ«kstÄve - starp patruļÄm.
- MeklÄÅ”ana ā kad pazudis pamanÄ«tais ienaidnieks.
- PalÄ«dzÄ«bas atraÅ”ana - kad ienaidnieks ir pamanÄ«ts, bet ir pÄrÄk spÄcÄ«gs, lai cÄ«nÄ«tos viens.
Katram no viÅiem izvÄle ir ierobežota ā piemÄram, apsargs nedosies meklÄt slÄptu ienaidnieku, ja viÅam ir slikta veselÄ«ba.
Galu galÄ ir milzÄ«gs "ja" saraksts , Tas " var kļūt pÄrÄk apgrÅ«tinoÅ”i, tÄpÄc mums ir jÄformalizÄ metode, kas ļauj mums paturÄt prÄtÄ stÄvokļus un pÄrejas starp stÄvokļiem. Lai to izdarÄ«tu, mÄs Åemam vÄrÄ visus stÄvokļus un zem katra stÄvokļa sarakstÄ ierakstÄm visas pÄrejas uz citiem stÄvokļiem kopÄ ar tiem nepiecieÅ”amajiem nosacÄ«jumiem.
Å Ä« ir stÄvokļa pÄrejas tabula - visaptveroÅ”s veids, kÄ pÄrstÄvÄt MFV. UzzÄ«mÄsim diagrammu un iegÅ«sim pilnÄ«gu pÄrskatu par to, kÄ mainÄs NPC uzvedÄ«ba.
Diagramma atspoguļo Ŕī aÄ£enta lÄmumu pieÅemÅ”anas bÅ«tÄ«bu, pamatojoties uz paÅ”reizÄjo situÄciju. TurklÄt katra bultiÅa parÄda pÄreju starp stÄvokļiem, ja blakus esoÅ”ais nosacÄ«jums ir patiess.
KatrÄ atjauninÄjumÄ mÄs pÄrbaudÄm aÄ£enta paÅ”reizÄjo stÄvokli, apskatÄm pÄreju sarakstu un, ja ir izpildÄ«ti pÄrejas nosacÄ«jumi, tas pieÅem jauno stÄvokli. PiemÄram, katrs kadrs pÄrbauda, āāvai 10 sekunžu taimeris nav beidzies, un, ja tÄ, tad apsargs pÄriet no tukÅ”gaitas stÄvokļa uz PatrulÄÅ”anu. TÄdÄ paÅ”Ä veidÄ UzbrÅ«koÅ”ais stÄvoklis pÄrbauda aÄ£enta veselÄ«bu ā ja tas ir zems, tad tas pÄriet BÄgÅ”anas stÄvoklÄ«.
Tas attiecas uz pÄreju starp stÄvokļiem, bet kÄ ar uzvedÄ«bu, kas saistÄ«ta ar paÅ”iem stÄvokļiem? RunÄjot par faktiskÄs uzvedÄ«bas ievieÅ”anu konkrÄtam stÄvoklim, parasti ir divu veidu "ÄÄ·is", kurÄ mÄs pieŔķiram darbÄ«bas MFV:
- DarbÄ«bas, kuras mÄs periodiski veicam paÅ”reizÄjam stÄvoklim.
- DarbÄ«bas, ko veicam, pÄrejot no viena stÄvokļa uz otru.
PiemÄri pirmajam tipam. PatrulÄÅ”anas stÄvoklis pÄrvietos aÄ£entu pa patruļas marÅ”rutu katrÄ kadrÄ. Uzbrukuma stÄvoklis mÄÄ£inÄs uzsÄkt uzbrukumu katrÄ kadrÄ vai pÄriet uz stÄvokli, kurÄ tas ir iespÄjams.
Otrajam veidam apsveriet pÄreju āja ienaidnieks ir redzams un ienaidnieks ir pÄrÄk spÄcÄ«gs, pÄrejiet uz MeklÄÅ”anas palÄ«dzÄ«bas stÄvokli. AÄ£entam ir jÄizvÄlas, kur vÄrsties pÄc palÄ«dzÄ«bas, un jÄsaglabÄ Å”Ä« informÄcija, lai palÄ«dzÄ«bas meklÄÅ”anas stÄvoklis zinÄtu, kur vÄrsties. Kad palÄ«dzÄ«ba tiek atrasta, aÄ£ents atgriežas uzbrucÄja stÄvoklÄ«. Å ajÄ brÄ«dÄ« viÅÅ” vÄlÄsies pastÄstÄ«t sabiedrotajam par draudiem, tÄpÄc var notikt NotifyFriendOfThreat darbÄ«ba.
VÄlreiz mÄs varam aplÅ«kot Å”o sistÄmu caur cikla Sense/Think/Act objektÄ«vu. JÄga ir ietverta datos, ko izmanto pÄrejas loÄ£ika. PadomÄ ā pÄrejas pieejamas katrÄ stÄvoklÄ«. Un aktu veic darbÄ«bas, kas periodiski tiek veiktas stÄvoklÄ« vai pÄrejÄs starp stÄvokļiem.
Dažreiz nepÄrtrauktas aptaujas pÄrejas nosacÄ«jumi var bÅ«t dÄrgi. PiemÄram, ja katrs aÄ£ents veic sarežģītus aprÄÄ·inus katrÄ kadrÄ, lai noteiktu, vai tas var redzÄt ienaidniekus un saprast, vai tas var pÄriet no patrulÄÅ”anas stÄvokļa uz uzbrukumu, tas prasÄ«s daudz CPU laika.
SvarÄ«gas izmaiÅas pasaules stÄvoklÄ« var uzskatÄ«t par notikumiem, kas tiks apstrÄdÄti, tiklÄ«dz tie notiek. TÄ vietÄ, lai FSM pÄrbaudÄ«tu pÄrejas nosacÄ«jumu "vai mans aÄ£ents var redzÄt atskaÅotÄju?" katrÄ kadrÄ, atseviŔķu sistÄmu var konfigurÄt, lai tÄ pÄrbaudÄ«tu retÄk (piemÄram, 5 reizes sekundÄ). RezultÄtÄ tiek izdots Player Seen, kad Äeks ir izturÄts.
Tas tiek nodots MFV, kurai tagad jÄiet uz nosacÄ«jumu, ka notikums ir redzÄts, un attiecÄ«gi jÄreaÄ£Ä. RezultÄtÄ uzvedÄ«ba ir tÄda pati, izÅemot gandrÄ«z nemanÄmu kavÄÅ”anos pirms atbildes. TaÄu veiktspÄja ir uzlabojusies, atdalot Sense daļu atseviÅ”Ä·Ä programmas daļÄ.
Hierarhiska galÄ«go stÄvokļu maŔīna
TomÄr darbs ar lieliem FSM ne vienmÄr ir Ärti. Ja mÄs vÄlamies paplaÅ”inÄt uzbrukuma stÄvokli, lai atdalÄ«tu MeleeAttacking un RangedAttacking, mums bÅ«s jÄmaina pÄrejas no visiem pÄrÄjiem stÄvokļiem, kas noved pie Attacking stÄvokļa (paÅ”reizÄjais un nÄkotnes).
JÅ«s droÅ”i vien pamanÄ«jÄt, ka mÅ«su piemÄrÄ ir daudz pÄreju dublikÄtu. LielÄkÄ daļa pÄreju tukÅ”gaitas stÄvoklÄ« ir identiskas pÄrejÄm patrulÄÅ”anas stÄvoklÄ«. BÅ«tu jauki neatkÄrtoties, it Ä«paÅ”i, ja pievienojam vÄl lÄ«dzÄ«gus stÄvokļus. Ir jÄga grupÄt tukÅ”gaitu un patrulÄÅ”anu zem vispÄrÄjÄ apzÄ«mÄjuma "bez kaujas", kur ir tikai viens kopÄ«gs pÄreju kopums uz kaujas stÄvokļiem. Ja mÄs domÄjam par Å”o etiÄ·eti kÄ stÄvokli, tad tukÅ”gaita un patrulÄÅ”ana kļūst par apakÅ”stÄvokļiem. AtseviŔķas pÄrejas tabulas izmantoÅ”anas piemÄrs jaunai ar kauju nesaistÄ«tai apakÅ”stÄvoklim:
Galvenie stÄvokļi:
Ärpus kaujas statuss:
Un diagrammas formÄ:
TÄ ir tÄ pati sistÄma, bet ar jaunu bezkaujas stÄvokli, kas ietver tukÅ”gaitu un patrulÄÅ”anu. Katram stÄvoklim, kurÄ ir FSM ar apakÅ”stÄvokļiem (un Å”ie apakÅ”stÄvokļi, savukÄrt, satur savus FSM ā un tÄ tÄlÄk tik ilgi, cik jums nepiecieÅ”ams), mÄs iegÅ«stam hierarhisko galÄ«go stÄvokļu maŔīnu vai HFSM (hierarhisko galÄ«go stÄvokļu maŔīnu). GrupÄjot bezkaujas stÄvokli, mÄs izgriezÄm virkni lieku pÄreju. MÄs varam darÄ«t to paÅ”u jebkuriem jauniem stÄvokļiem ar kopÄ«gÄm pÄrejÄm. PiemÄram, ja nÄkotnÄ mÄs paplaÅ”inÄsim Attacking stÄvokli uz TuvcÄ«Åas uzbrukuma un MissileAttacking stÄvokļiem, tie bÅ«s apakÅ”stÄvokļi, kas pÄriet savÄ starpÄ, pamatojoties uz attÄlumu lÄ«dz ienaidniekam un munÄ«cijas pieejamÄ«bu. RezultÄtÄ sarežģītas uzvedÄ«bas un apakÅ”uzvedÄ«bas var attÄlot ar minimÄlu dublikÄtu pÄreju skaitu.
Uzvedības koks
Izmantojot HFSM, vienkÄrÅ”Ä veidÄ tiek izveidotas sarežģītas uzvedÄ«bas kombinÄcijas. TomÄr ir nelielas grÅ«tÄ«bas, ka lÄmumu pieÅemÅ”ana pÄrejas noteikumu veidÄ ir cieÅ”i saistÄ«ta ar paÅ”reizÄjo stÄvokli. Un daudzÄs spÄlÄs tas ir tieÅ”i tas, kas nepiecieÅ”ams. Un rÅ«pÄ«ga stÄvokļa hierarhijas izmantoÅ”ana var samazinÄt pÄrejas atkÄrtojumu skaitu. Bet dažreiz jums ir nepiecieÅ”ami noteikumi, kas darbojas neatkarÄ«gi no jÅ«su atraÅ”anÄs vietas vai ir spÄkÄ gandrÄ«z jebkurÄ Å”tatÄ. PiemÄram, ja aÄ£enta veselÄ«bas stÄvoklis pasliktinÄs lÄ«dz 25%, jÅ«s vÄlaties, lai viÅÅ” aizbÄgtu neatkarÄ«gi no tÄ, vai viÅÅ” bija kaujÄ, dÄ«kstÄvÄ vai runÄja ā jums Å”is nosacÄ«jums bÅ«s jÄpievieno katram stÄvoklim. Un, ja jÅ«su dizainers vÄlÄk vÄlas mainÄ«t zemo veselÄ«bas slieksni no 25% uz 10%, tad tas bÅ«s jÄdara vÄlreiz.
IdeÄlÄ gadÄ«jumÄ Å”Ä« situÄcija prasa sistÄmu, kurÄ lÄmumi par to, ākÄdÄ stÄvoklÄ« atrastiesā, ir Ärpus paÅ”iem stÄvokļiem, lai veiktu izmaiÅas tikai vienÄ vietÄ un neskartu pÄrejas nosacÄ«jumus. Å eit parÄdÄs uzvedÄ«bas koki.
Ir vairÄki veidi, kÄ tos ieviest, taÄu bÅ«tÄ«ba ir aptuveni vienÄda visiem un ir lÄ«dzÄ«ga lÄmumu kokam: algoritms sÄkas ar āsaknesā mezglu, un kokÄ ir mezgli, kas atspoguļo lÄmumus vai darbÄ«bas. TomÄr ir dažas galvenÄs atŔķirÄ«bas:
- Mezgli tagad atgriež vienu no trim vÄrtÄ«bÄm: Succeeded (ja darbs ir pabeigts), Failed (ja to nevar sÄkt) vai Running (ja tas joprojÄm darbojas un nav gala rezultÄta).
- Vairs nav lÄmumu pieÅemÅ”anas mezglu, no kuriem izvÄlÄties starp divÄm alternatÄ«vÄm. TÄ vietÄ tie ir dekoratora mezgli, kuriem ir viens pakÄrtots mezgls. Ja viÅiem izdodas, viÅi izpilda savu vienÄ«go bÄrnu mezglu.
- Mezgli, kas veic darbÄ«bas, atgriež Running vÄrtÄ«bu, lai attÄlotu veicamÄs darbÄ«bas.
Å o nelielo mezglu kopu var apvienot, lai izveidotu lielu skaitu sarežģītu darbÄ«bu. IedomÄsimies HFSM aizsargu no iepriekÅ”ÄjÄ piemÄra kÄ uzvedÄ«bas koku:
Izmantojot Å”o struktÅ«ru, nevajadzÄtu bÅ«t acÄ«mredzamai pÄrejai no tukÅ”gaitas/patrulÄÅ”anas stÄvokļiem uz uzbrukuma vai citiem stÄvokļiem. Ja ir redzams ienaidnieks un varoÅa veselÄ«ba ir zema, izpilde tiks pÄrtraukta BÄgÅ”anas mezglÄ neatkarÄ«gi no tÄ, kuru mezglu tas iepriekÅ” izpildÄ«ja ā PatrulÄÅ”ana, TukÅ”gaita, UzbrÅ«kÅ”ana vai jebkura cita.
UzvedÄ«bas koki ir sarežģīti ā ir daudz veidu, kÄ tos izveidot, un atrast pareizo dekoratoru un salikto mezglu kombinÄciju var bÅ«t izaicinÄjums. Rodas arÄ« jautÄjumi par to, cik bieži koku pÄrbaudÄ«t ā vai gribam iziet cauri katrai tÄ daļai vai tikai tad, kad ir mainÄ«jies kÄds no apstÄkļiem? KÄ mÄs saglabÄjam mezglu stÄvokli ā kÄ mÄs zinÄm, kad esam dÄ«kstÄvÄ 10 sekundes, vai kÄ mÄs zinÄm, kuri mezgli darbojÄs pÄdÄjo reizi, lai mÄs varÄtu pareizi apstrÄdÄt secÄ«bu?
TÄpÄc ir daudz ievieÅ”anu. PiemÄram, dažÄs sistÄmÄs dekoratoru mezgli ir aizstÄti ar iebÅ«vÄtiem dekoratoriem. ViÅi atkÄrtoti novÄrtÄ koku, kad mainÄs dekoratora apstÄkļi, palÄ«dz pievienoties mezgliem un nodroÅ”ina periodiskus atjauninÄjumus.
Uz komunÄlajiem pakalpojumiem balstÄ«ta sistÄma
DažÄm spÄlÄm ir daudz dažÄdu mehÄniku. VÄlams, lai viÅi saÅemtu visas vienkÄrÅ”o un vispÄrÄ«go pÄrejas noteikumu priekÅ”rocÄ«bas, bet ne vienmÄr pilnÄ«ga uzvedÄ«bas koka veidÄ. TÄ vietÄ, lai bÅ«tu skaidrs izvÄļu kopums vai iespÄjamo darbÄ«bu koks, ir vieglÄk izskatÄ«t visas darbÄ«bas un izvÄlÄties konkrÄtajÄ brÄ«dÄ« piemÄrotÄko.
Uz utilÄ«tprogrammÄm balstÄ«tÄ sistÄma palÄ«dzÄs tieÅ”i Å”ajÄ jautÄjumÄ. Å Ä« ir sistÄma, kurÄ aÄ£entam ir dažÄdas darbÄ«bas un viÅÅ” izvÄlas, kuras no tÄm veikt, pamatojoties uz katras darbÄ«bas relatÄ«vo lietderÄ«bu. Ja lietderÄ«ba ir patvaļīgs mÄrs tam, cik svarÄ«gi vai vÄlams aÄ£entam ir veikt Å”o darbÄ«bu.
AprÄÄ·inÄtÄ darbÄ«bas lietderÄ«ba, pamatojoties uz paÅ”reizÄjo stÄvokli un vidi, aÄ£ents jebkurÄ laikÄ var pÄrbaudÄ«t un atlasÄ«t vispiemÄrotÄko citu stÄvokli. Tas ir lÄ«dzÄ«gi MFV, izÅemot gadÄ«jumus, kad pÄrejas nosaka katra potenciÄlÄ stÄvokļa novÄrtÄjums, ieskaitot paÅ”reizÄjo. LÅ«dzu, Åemiet vÄrÄ, ka mÄs izvÄlamies visnoderÄ«gÄko darbÄ«bu, lai turpinÄtu (vai paliekam, ja esam to jau pabeiguÅ”i). Lai iegÅ«tu lielÄku dažÄdÄ«bu, Ŕī varÄtu bÅ«t lÄ«dzsvarota, bet nejauÅ”a atlase no neliela saraksta.
SistÄma pieŔķir patvaļīgu lietderÄ«bas vÄrtÄ«bu diapazonu, piemÄram, no 0 (pilnÄ«gi nevÄlams) lÄ«dz 100 (pilnÄ«gi vÄlams). Katrai darbÄ«bai ir vairÄki parametri, kas ietekmÄ Å”Ä«s vÄrtÄ«bas aprÄÄ·inÄÅ”anu. Atgriežoties pie mÅ«su aizbildÅa piemÄra:
PÄrejas starp darbÄ«bÄm ir neskaidras ā jebkura valsts var sekot jebkurai citai. DarbÄ«bas prioritÄtes ir atrodamas atgrieztajÄs lietderÄ«bas vÄrtÄ«bÄs. Ja ir redzams ienaidnieks un Å”is ienaidnieks ir spÄcÄ«gs un varoÅa veselÄ«ba ir zema, gan Fleeing, gan FindingHelp atgriezÄ«s augstas vÄrtÄ«bas, kas nav nulles. Å ajÄ gadÄ«jumÄ FindingHelp vienmÄr bÅ«s augstÄks. TÄpat arÄ« ar kauju nesaistÄ«tÄs aktivitÄtes nekad neatmaksÄ vairÄk par 50, tÄpÄc tÄs vienmÄr bÅ«s zemÄkas par kaujas aktivitÄtÄm. Tas jÄÅem vÄrÄ, veidojot darbÄ«bas un aprÄÄ·inot to lietderÄ«bu.
MÅ«su piemÄrÄ darbÄ«bas atgriež vai nu fiksÄtu konstantu vÄrtÄ«bu, vai vienu no divÄm fiksÄtÄm vÄrtÄ«bÄm. ReÄlistiskÄka sistÄma atgrieztu aplÄsi no nepÄrtraukta vÄrtÄ«bu diapazona. PiemÄram, darbÄ«ba BÄgÅ”ana atgriež augstÄkas lietderÄ«bas vÄrtÄ«bas, ja aÄ£enta veselÄ«bas stÄvoklis ir zems, un darbÄ«ba Attacking atgriež zemÄkas lietderÄ«bas vÄrtÄ«bas, ja ienaidnieks ir pÄrÄk spÄcÄ«gs. Å Ä« iemesla dÄļ darbÄ«bai BÄgÅ”ana ir augstÄka par Uzbrukumu jebkurÄ situÄcijÄ, kad aÄ£entam Ŕķiet, ka viÅam nav pietiekami daudz veselÄ«bas, lai uzvarÄtu ienaidnieku. Tas ļauj noteikt darbÄ«bÄm prioritÄti, pamatojoties uz jebkuru kritÄriju skaitu, padarot Å”o pieeju elastÄ«gÄku un mainÄ«gÄku nekÄ uzvedÄ«bas koks vai MFV.
Katrai darbÄ«bai ir daudz nosacÄ«jumu programmas aprÄÄ·inÄÅ”anai. Tos var rakstÄ«t skriptu valodÄ vai kÄ matemÄtisko formulu sÄriju. Sims, kas simulÄ varoÅa ikdienas rutÄ«nu, pievieno papildu aprÄÄ·inu slÄni - aÄ£ents saÅem virkni "motivÄcijas", kas ietekmÄ lietderÄ«bas vÄrtÄjumus. Ja varonis ir izsalcis, tas laika gaitÄ kļūs vÄl izsalkuÅ”i, un EatFood darbÄ«bas lietderÄ«bas vÄrtÄ«ba palielinÄsies, lÄ«dz varonis to izpildÄ«s, samazinot izsalkuma lÄ«meni un atgriežot EatFood vÄrtÄ«bu uz nulli.
Ideja par darbÄ«bu atlasi, pamatojoties uz vÄrtÄÅ”anas sistÄmu, ir diezgan vienkÄrÅ”a, tÄpÄc uz utilÄ«tu balstÄ«tu sistÄmu var izmantot kÄ daļu no AI lÄmumu pieÅemÅ”anas procesiem, nevis kÄ pilnÄ«gu to aizstÄjÄju. LÄmumu koks var pieprasÄ«t divu pakÄrtoto mezglu lietderÄ«bas novÄrtÄjumu un atlasÄ«t augstÄko. LÄ«dzÄ«gi uzvedÄ«bas kokam var bÅ«t salikts lietderÄ«bas mezgls, lai novÄrtÄtu darbÄ«bu lietderÄ«bu, lai izlemtu, kuru bÄrnu izpildÄ«t.
KustÄ«ba un navigÄcija
IepriekÅ”Äjos piemÄros mums bija platforma, kuru mÄs pÄrvietojÄm pa kreisi vai pa labi, un apsargs, kas patrulÄja vai uzbruka. Bet kÄ tieÅ”i mÄs rÄ«kojamies ar aÄ£entu kustÄ«bu noteiktÄ laika periodÄ? KÄ mÄs uzstÄdÄm Ätrumu, kÄ izvairÄmies no ŔķÄrŔļiem un kÄ mÄs plÄnojam marÅ”rutu, kad nokļūt galamÄrÄ·Ä« ir grÅ«tÄk, nekÄ braukt pa taisnu lÄ«niju? ApskatÄ«sim Å”o.
Vadība
SÄkotnÄjÄ posmÄ mÄs pieÅemsim, ka katram aÄ£entam ir Ätruma vÄrtÄ«ba, kas ietver to, cik Ätri tas pÄrvietojas un kÄdÄ virzienÄ. To var izmÄrÄ«t metros sekundÄ, kilometros stundÄ, pikseļos sekundÄ utt. Atsaucot atmiÅÄ Sense/Think/Act cilpu, mÄs varam iedomÄties, ka daļa Think izvÄlas Ätrumu, bet daļa DarbÄ«ba piemÄro Å”o Ätrumu aÄ£entam. Parasti spÄlÄm ir fizikas sistÄma, kas veic Å”o uzdevumu jÅ«su vietÄ, apgÅ«stot katra objekta Ätruma vÄrtÄ«bu un pielÄgojot to. TÄpÄc jÅ«s varat atstÄt AI ar vienu uzdevumu - izlemt, kÄdam Ätrumam vajadzÄtu bÅ«t aÄ£entam. Ja zinÄt, kur aÄ£entam jÄatrodas, tad tas jÄpÄrvieto pareizajÄ virzienÄ ar noteiktu Ätrumu. Ä»oti triviÄls vienÄdojums:
wish_travel = galamÄrÄ·a_pozÄ«cija ā aÄ£enta_pozÄ«cija
IedomÄjieties 2D pasauli. AÄ£ents atrodas punktÄ (-2,-2), galamÄrÄ·is atrodas kaut kur ziemeļaustrumos punktÄ (30, 20), un nepiecieÅ”amais ceļŔ, lai aÄ£ents tur nokļūtu, ir (32, 22). PieÅemsim, ka Ŕīs pozÄ«cijas mÄra metros ā ja pieÅemsim, ka aÄ£enta Ätrums ir 5 metri sekundÄ, tad mÄs mÄrogosim savu nobÄ«des vektoru un iegÅ«sim Ätrumu aptuveni (4.12, 2.83). Izmantojot Å”os parametrus, aÄ£ents galamÄrÄ·Ä« nonÄktu gandrÄ«z 8 sekundÄs.
JÅ«s jebkurÄ laikÄ varat pÄrrÄÄ·inÄt vÄrtÄ«bas. Ja aÄ£ents bÅ«tu pusceÄ¼Ä lÄ«dz mÄrÄ·im, kustÄ«ba bÅ«tu uz pusi mazÄka, bet tÄ kÄ aÄ£enta maksimÄlais Ätrums ir 5 m/s (mÄs to nolÄmÄm iepriekÅ”), Ätrums bÅ«s tÄds pats. Tas darbojas arÄ« kustÄ«giem mÄrÄ·iem, ļaujot aÄ£entam veikt nelielas izmaiÅas, kad tie pÄrvietojas.
TaÄu mÄs vÄlamies vairÄk variÄciju ā piemÄram, lÄnÄm palielinot Ätrumu, lai modelÄtu tÄlu, kas pÄriet no stÄvÄÅ”anas uz skrieÅ”anu. To paÅ”u var izdarÄ«t beigÄs pirms apstÄÅ”anÄs. Å Ä«s funkcijas ir pazÄ«stamas kÄ stÅ«rÄÅ”anas darbÄ«bas, un katrai no tÄm ir specifiski nosaukumi: MeklÄÅ”ana, BÄgÅ”ana, IeraÅ”anÄs utt. Ideja ir tÄda, ka paÄtrinÄjuma spÄkus var pielietot aÄ£enta Ätrumam, pamatojoties uz aÄ£enta pozÄ«cijas un paÅ”reizÄjÄ Ätruma salÄ«dzinÄÅ”anu ar galamÄrÄ·i. lai izmantotu dažÄdas metodes virzÄ«bai uz mÄrÄ·i.
Katrai uzvedÄ«bai ir nedaudz atŔķirÄ«gs mÄrÄ·is. MeklÄÅ”ana un ieraÅ”anÄs ir veidi, kÄ pÄrvietot aÄ£entu uz galamÄrÄ·i. Å Ä·ÄrŔļu novÄrÅ”ana un atdalÄ«Å”ana pielÄgo aÄ£enta kustÄ«bu, lai izvairÄ«tos no ŔķÄrŔļiem ceÄ¼Ä uz mÄrÄ·i. IzlÄ«dzinÄÅ”ana un kohÄzija nodroÅ”ina aÄ£entu kustÄ«bu kopÄ. Jebkuru skaitu dažÄdu stÅ«rÄÅ”anas darbÄ«bu var summÄt, lai iegÅ«tu vienu ceļa vektoru, Åemot vÄrÄ visus faktorus. AÄ£ents, kas izmanto ieraÅ”anÄs, atdalÄ«Å”anas un ŔķÄrŔļu novÄrÅ”anas darbÄ«bas, lai izvairÄ«tos no sienÄm un citiem aÄ£entiem. Å Ä« pieeja labi darbojas atklÄtÄs vietÄs bez nevajadzÄ«gÄm detaļÄm.
SarežģītÄkos apstÄkļos dažÄdu uzvedÄ«bu pievienoÅ”ana darbojas sliktÄk - piemÄram, aÄ£ents var iestrÄgt sienÄ konflikta starp IeraÅ”anos un ŔķÄrŔļu novÄrÅ”anu dÄļ. TÄpÄc jums ir jÄapsver iespÄjas, kas ir sarežģītÄkas nekÄ vienkÄrÅ”i visu vÄrtÄ«bu pievienoÅ”ana. Veids ir Å”Äds: tÄ vietÄ, lai saskaitÄ«tu katras uzvedÄ«bas rezultÄtus, varat apsvÄrt kustÄ«bu dažÄdos virzienos un izvÄlÄties labÄko variantu.
TomÄr sarežģītÄ vidÄ ar strupceļiem un izvÄli, kuru ceļu iet, mums bÅ«s nepiecieÅ”ams kaut kas vÄl progresÄ«vÄks.
CeļŔ
StÅ«rÄÅ”anas izturÄÅ”anÄs ir lieliski piemÄrota vienkÄrÅ”ai kustÄ«bai atklÄtÄ vietÄ (futbola laukumÄ vai arÄnÄ), kur nokļūŔana no A lÄ«dz B ir taisna taka ar tikai nelieliem apvedceļiem ap ŔķÄrŔļiem. Sarežģītiem marÅ”rutiem mums ir nepiecieÅ”ama ceļa atraÅ”ana, kas ir veids, kÄ izpÄtÄ«t pasauli un izlemt par marÅ”rutu caur to.
VisvienkÄrÅ”Äkais ir uzlikt režģi katram laukumam blakus aÄ£entam un novÄrtÄt, kurÅ” no tiem drÄ«kst pÄrvietoties. Ja kÄds no tiem ir galamÄrÄ·is, tad sekojiet marÅ”rutam no katra laukuma uz iepriekÅ”Äjo, lÄ«dz sasniedzat sÄkumu. Å is ir marÅ”ruts. PretÄjÄ gadÄ«jumÄ atkÄrtojiet Å”o procesu ar citiem blakus esoÅ”ajiem laukumiem, lÄ«dz atrodat galamÄrÄ·i vai izbeidzas laukums (tas nozÄ«mÄ, ka nav iespÄjama marÅ”ruta). Tas ir tas, kas formÄli tiek saukts par meklÄÅ”anas platumu vai BFS (meklÄÅ”anas algoritms pÄc platuma). Ik uz soļa viÅÅ” skatÄs uz visÄm pusÄm (tÄtad platums, "platums"). MeklÄÅ”anas telpa ir kÄ viļÅu fronte, kas kustas, lÄ«dz sasniedz vÄlamo vietu ā meklÄÅ”anas telpa katrÄ solÄ« paplaÅ”inÄs, lÄ«dz tiek iekļauts beigu punkts, pÄc kura to var izsekot lÄ«dz sÄkumam.
RezultÄtÄ jÅ«s saÅemsiet sarakstu ar laukumiem, pa kuriem tiek sastÄdÄ«ts vÄlamais marÅ”ruts. Å is ir ceļŔ (tÄtad, ceļa atraÅ”ana) ā to vietu saraksts, kuras aÄ£ents apmeklÄs, sekojot galamÄrÄ·im.
Å emot vÄrÄ to, ka mÄs zinÄm katra kvadrÄta atraÅ”anÄs vietu pasaulÄ, mÄs varam izmantot stÅ«rÄÅ”anas uzvedÄ«bu, lai pÄrvietotos pa ceļu - no 1. mezgla uz 2. mezglu, tad no 2. mezgla uz 3. mezglu un tÄ tÄlÄk. VienkÄrÅ”Äkais variants ir virzÄ«ties uz nÄkamÄ laukuma centru, bet vÄl labÄks variants ir apstÄties malas vidÅ« starp paÅ”reizÄjo un nÄkamo laukumu. Pateicoties tam, aÄ£ents varÄs nogriezt stÅ«rus asos pagriezienos.
BFS algoritmam ir arÄ« trÅ«kumi - tas pÄta tikpat daudz kvadrÄtu ānepareizajÄā virzienÄ, cik āpareizajÄā virzienÄ. Å eit tiek izmantots sarežģītÄks algoritms, ko sauc par A* (zvaigzne). Tas darbojas tÄpat, bet tÄ vietÄ, lai akli pÄrbaudÄ«tu kaimiÅu kvadrÄtus (pÄc tam kaimiÅu kaimiÅus, pÄc tam kaimiÅu kaimiÅus un tÄ tÄlÄk), tas apkopo mezglus sarakstÄ un sakÄrto tos tÄ, lai nÄkamais pÄrbaudÄ«tais mezgls vienmÄr bÅ«tu tÄds, kas ved uz Ä«sÄko ceļu. Mezgli tiek kÄrtoti, pamatojoties uz heiristisku metodi, kurÄ tiek Åemtas vÄrÄ divas lietas ā hipotÄtiskÄ marÅ”ruta āizmaksasā uz vÄlamo laukumu (ieskaitot visas ceļa izmaksas) un aplÄses par to, cik tÄlu Å”is laukums atrodas no galamÄrÄ·a (novirzot meklÄÅ”anu pareizais virziens).
Å is piemÄrs parÄda, ka aÄ£ents vienlaikus izpÄta vienu kvadrÄtu, katru reizi izvÄloties blakus esoÅ”o, kas ir visdaudzsoloÅ”Äkais. RezultÄtÄ iegÅ«tais ceļŔ ir tÄds pats kÄ BFS, taÄu Å”ajÄ procesÄ tika Åemts vÄrÄ mazÄk laukumu, kas bÅ«tiski ietekmÄ spÄles veiktspÄju.
Kustība bez režģa
TaÄu lielÄkÄ daļa spÄļu nav izkÄrtotas režģī, un bieži vien to nav iespÄjams izdarÄ«t, neupurÄjot reÄlismu. Ir vajadzÄ«gi kompromisi. KÄdam izmÄram jÄbÅ«t kvadrÄtiem? PÄrÄk lieli, un tie nespÄs pareizi attÄlot mazus koridorus vai pagriezienus, pÄrÄk mazi, un bÅ«s pÄrÄk daudz laukumu, ko meklÄt, kas galu galÄ prasÄ«s daudz laika.
Vispirms ir jÄsaprot, ka tÄ«kls sniedz mums savienoto mezglu grafiku. Algoritmi A* un BFS faktiski darbojas uz grafikiem, un tiem vispÄr nerÅ«p mÅ«su tÄ«kls. MÄs varÄtu novietot mezglus jebkurÄ spÄles pasaulÄ: kamÄr pastÄv savienojums starp jebkuriem diviem savienotiem mezgliem, kÄ arÄ« starp sÄkuma un beigu punktiem un vismaz vienu no mezgliem, algoritms darbosies tikpat labi kÄ iepriekÅ”. To bieži sauc par marÅ”ruta punktu sistÄmu, jo katrs mezgls pÄrstÄv nozÄ«mÄ«gu vietu pasaulÄ, kas var bÅ«t daļa no jebkura skaita hipotÄtisku ceļu.
1. piemÄrs: mezgls katrÄ kvadrÄtÄ. MeklÄÅ”ana sÄkas no mezgla, kurÄ atrodas aÄ£ents, un beidzas vajadzÄ«gÄ kvadrÄta mezglÄ.
2. piemÄrs: mazÄka mezglu (ceļa punktu) kopa. MeklÄÅ”ana sÄkas aÄ£enta laukumÄ, iziet cauri vajadzÄ«gajam mezglu skaitam un pÄc tam turpinÄs lÄ«dz galamÄrÄ·im.
Å Ä« ir pilnÄ«gi elastÄ«ga un jaudÄ«ga sistÄma. TaÄu ir nepiecieÅ”ama piesardzÄ«ba, izlemjot, kur un kÄ novietot pieturas punktu, pretÄjÄ gadÄ«jumÄ aÄ£enti var vienkÄrÅ”i neredzÄt tuvÄko punktu un nevarÄs sÄkt ceļu. BÅ«tu vieglÄk, ja mÄs varÄtu automÄtiski izvietot pieturas punktus, pamatojoties uz pasaules Ä£eometriju.
Å eit parÄdÄs navigÄcijas siets vai navmesh (navigÄcijas tÄ«kls). Parasti tas ir trijstÅ«ru 2D tÄ«kls, kas tiek pÄrklÄts ar pasaules Ä£eometriju ā visur, kur aÄ£entam ir atļauts staigÄt. Katrs acs trijstÅ«ris kļūst par mezglu diagrammÄ, un tam ir ne vairÄk kÄ trÄ«s blakus esoÅ”ie trÄ«sstÅ«ri, kas kļūst par diagrammas blakus mezgliem.
Å is attÄls ir piemÄrs no Unity dzinÄja - tas analizÄja Ä£eometriju pasaulÄ un izveidoja navsietu (ekrÄnuzÅÄmumÄ gaiÅ”i zilÄ krÄsÄ). Katrs navigÄcijas tÄ«kla daudzstÅ«ris ir apgabals, kurÄ aÄ£ents var stÄvÄt vai pÄrvietoties no viena daudzstÅ«ra uz citu daudzstÅ«ri. Å ajÄ piemÄrÄ daudzstÅ«ri ir mazÄki par stÄviem, uz kuriem tie atrodas - tas tiek darÄ«ts, lai Åemtu vÄrÄ aÄ£enta izmÄru, kas pÄrsniedz tÄ nominÄlo pozÄ«ciju.
MÄs varam meklÄt marÅ”rutu caur Å”o tÄ«klu, atkal izmantojot A* algoritmu. Tas mums iegÅ«s gandrÄ«z ideÄlu marÅ”rutu pasaulÄ, kas Åem vÄrÄ visu Ä£eometriju un neprasa liekus mezglus un ceļa punktu izveidi.
Ceļa meklÄÅ”ana ir pÄrÄk plaÅ”a tÄma, kurai nepietiek ar vienu raksta sadaļu. Ja vÄlaties to izpÄtÄ«t sÄ«kÄk, tad tas palÄ«dzÄs
plÄnoÅ”ana
Ar ceļa atraÅ”anu esam iemÄcÄ«juÅ”ies, ka dažreiz nepietiek tikai izvÄlÄties virzienu un pÄrvietoties ā mums ir jÄizvÄlas marÅ”ruts un jÄveic daži pagriezieni, lai nokļūtu vÄlamajÄ galamÄrÄ·Ä«. MÄs varam vispÄrinÄt Å”o ideju: mÄrÄ·a sasniegÅ”ana nav tikai nÄkamais solis, bet gan vesela secÄ«ba, kurÄ dažreiz jums ir jÄskatÄs uz priekÅ”u vairÄkus soļus, lai noskaidrotu, kam vajadzÄtu bÅ«t pirmajam. To sauc par plÄnoÅ”anu. Ceļa atraÅ”anu var uzskatÄ«t par vienu no vairÄkiem plÄnoÅ”anas paplaÅ”inÄjumiem. RunÄjot par mÅ«su ciklu Sense/Think/Act, Å”ajÄ daÄ¼Ä DomÄÅ”anas daļa plÄno vairÄkas darbÄ«bas daļas nÄkotnei.
ApskatÄ«sim galda spÄles Magic: The Gathering piemÄru. Vispirms mÄs ejam ar Å”Ädu kÄrÅ”u komplektu rokÄs:
- Purvs - dod 1 melno manu (zemes karti).
- Mežs - dod 1 zaļo manu (zemes karti).
- Fugitive Wizard ā lai izsauktu 1 zilo manu.
- Elvish Mystic ā lai izsauktu 1 zaļo manu.
MÄs ignorÄjam atlikuÅ”Äs trÄ«s kÄrtis, lai bÅ«tu vieglÄk. SaskaÅÄ ar noteikumiem spÄlÄtÄjam ir atļauts izspÄlÄt 1 zemes karti vienÄ gÄjienÄ, viÅÅ” var āpiesitā Å”ai kÄrtei, lai no tÄs izvilktu manu, un pÄc tam mest burvestÄ«bas (tostarp izsaukt radÄ«jumu) atbilstoÅ”i manas daudzumam. Å ÄdÄ situÄcijÄ spÄlÄtÄjs zina, ka jÄspÄlÄ Forest, jÄpiesit 1 zaļajam manam un pÄc tam jÄizsauc Elvish Mystic. Bet kÄ spÄle AI to var izdomÄt?
Viegla plÄnoÅ”ana
TriviÄlÄ pieeja ir izmÄÄ£inÄt katru darbÄ«bu pÄc kÄrtas, lÄ«dz vairs nav piemÄrotas. AplÅ«kojot kÄrtis, AI redz, ko Swamp var spÄlÄt. Un viÅÅ” to spÄlÄ. Vai Å”ajÄ pagriezienÄ ir vÄl kÄdas darbÄ«bas? Tas nevar izsaukt Elvish Mystic vai Fugitive Wizard, jo tiem ir nepiecieÅ”ama attiecÄ«gi zaÄ¼Ä un zilÄ mana, lai tos izsauktu, savukÄrt Swamp nodroÅ”ina tikai melno manu. Un viÅÅ” vairs nevarÄs spÄlÄt Forestu, jo viÅÅ” jau ir spÄlÄjis Purvu. TÄdÄjÄdi spÄle AI ievÄroja noteikumus, taÄu darÄ«ja to slikti. Var uzlabot.
PlÄnojot var atrast sarakstu ar darbÄ«bÄm, kas noved spÄli vÄlamajÄ stÄvoklÄ«. TÄpat kÄ katram ceļa laukumam bija kaimiÅi (ceļa atraÅ”anÄ), katrai plÄna darbÄ«bai ir arÄ« kaimiÅi vai pÄcteÄi. MÄs varam meklÄt Ŕīs darbÄ«bas un turpmÄkÄs darbÄ«bas, lÄ«dz sasniedzam vÄlamo stÄvokli.
MÅ«su piemÄrÄ vÄlamais rezultÄts ir āizsauc radÄ«jumu, ja iespÄjamsā. Pagrieziena sÄkumÄ redzam tikai divas iespÄjamÄs darbÄ«bas, ko pieļauj spÄles noteikumi:
1. SpÄlÄjiet Swamp (rezultÄts: Swamp spÄlÄ)
2. SpÄlÄt Forest (rezultÄts: Mežs spÄlÄ)
Katra veiktÄ darbÄ«ba var izraisÄ«t turpmÄkas darbÄ«bas un slÄgt citas, atkal atkarÄ«bÄ no spÄles noteikumiem. IedomÄjieties, ka mÄs spÄlÄjÄm Swamp - tas noÅems Swamp kÄ nÄkamo soli (mÄs to jau spÄlÄjÄm), un tas noÅems arÄ« Forest (jo saskaÅÄ ar noteikumiem jÅ«s varat izspÄlÄt vienu zemes karti katrÄ gÄjienÄ). PÄc tam AI kÄ nÄkamo soli pievieno 1 melnÄs manas iegÅ«Å”anu, jo nav citu iespÄju. Ja viÅÅ” iet uz priekÅ”u un izvÄlÄsies Tap the Swamp, viÅÅ” saÅems 1 vienÄ«bu melnÄ mana un nevarÄs ar to neko darÄ«t.
1. SpÄlÄjiet Swamp (rezultÄts: Swamp spÄlÄ)
1.1 āTapā purvs (rezultÄts: purvs āpiesistsā, +1 vienÄ«ba melnÄ mana)
Nav pieejama neviena darbÄ«ba ā END
2. SpÄlÄt Forest (rezultÄts: Mežs spÄlÄ)
DarbÄ«bu saraksts bija Ä«ss, nonÄcÄm strupceļÄ. MÄs atkÄrtojam procesu nÄkamajam solim. MÄs spÄlÄjam Forest, atveram darbÄ«bu ādabÅ« 1 zaļo manuā, kas savukÄrt atklÄs treÅ”o darbÄ«bu - izsauc Elvish Mystic.
1. SpÄlÄjiet Swamp (rezultÄts: Swamp spÄlÄ)
1.1 āTapā purvs (rezultÄts: purvs āpiesistsā, +1 vienÄ«ba melnÄ mana)
Nav pieejama neviena darbÄ«ba ā END
2. SpÄlÄt Forest (rezultÄts: Mežs spÄlÄ)
2.1. āTapā mežs (rezultÄts: mežs ir āpiesistsā, +1 vienÄ«ba zaļÄs manas)
2.1.1. Izsaukt Elvish Mystic (rezultÄts: Elvish Mystic spÄlÄ, -1 zaÄ¼Ä mana)
Nav pieejama neviena darbÄ«ba ā END
Visbeidzot, mÄs izpÄtÄ«jÄm visas iespÄjamÄs darbÄ«bas un atradÄm plÄnu, kas izsauc radÄ«jumu.
Å is ir ļoti vienkÄrÅ”ots piemÄrs. Ieteicams izvÄlÄties labÄko iespÄjamo plÄnu, nevis tikai jebkuru plÄnu, kas atbilst dažiem kritÄrijiem. Parasti ir iespÄjams novÄrtÄt potenciÄlos plÄnus, pamatojoties uz to Ä«stenoÅ”anas rezultÄtu vai kopÄjo ieguvumu. JÅ«s varat iegÅ«t sev 1 punktu par zemes kartes izspÄlÄÅ”anu un 3 punktus par radÄ«juma izsaukÅ”anu. SpÄlÄt Purvu bÅ«tu 1 punkta plÄns. Un spÄlÄjot Forest ā Tap the Forest ā izsauc Elvish Mystic uzreiz iedos 4 punktus.
Å Ädi plÄnoÅ”ana darbojas programmÄ Magic: The Gathering, taÄu tÄ pati loÄ£ika attiecas arÄ« uz citÄm situÄcijÄm. PiemÄram, bandinieka pÄrvietoÅ”ana, lai atbrÄ«votu vietu bÄ«skapam, lai pÄrvietotos Å”ahÄ. Vai arÄ« paslÄpieties aiz sienas, lai droÅ”i fotografÄtu Å”ÄdÄ formÄtÄ XCOM. KopumÄ jÅ«s saprotat domu.
Uzlabota plÄnoÅ”ana
Dažreiz ir pÄrÄk daudz iespÄjamo darbÄ«bu, lai apsvÄrtu visas iespÄjamÄs iespÄjas. Atgriežoties pie piemÄra ar Magic: The Gathering: pieÅemsim, ka spÄlÄ un jÅ«su rokÄ ir vairÄkas zemes un radÄ«jumu kÄrtis - iespÄjamo gÄjienu kombinÄciju skaits var bÅ«t desmitiem. ProblÄmai ir vairÄki risinÄjumi.
PirmÄ metode ir atpakaļgaitas Ä·Äde. TÄ vietÄ, lai izmÄÄ£inÄtu visas kombinÄcijas, labÄk ir sÄkt ar gala rezultÄtu un mÄÄ£inÄt atrast tieÅ”o marÅ”rutu. TÄ vietÄ, lai dotos no koka saknes uz konkrÄtu lapu, mÄs virzÄmies pretÄjÄ virzienÄ ā no lapas uz sakni. Å Ä« metode ir vienkÄrÅ”Äka un ÄtrÄka.
Ja ienaidniekam ir 1 veselÄ«ba, jÅ«s varat atrast plÄnu "nodarÄ«t 1 vai vairÄk bojÄjumu". Lai to panÄktu, ir jÄievÄro vairÄki nosacÄ«jumi:
1. BojÄjumus var radÄ«t burvestÄ«ba ā tai jÄbÅ«t rokÄ.
2. Lai veiktu burvestību, jums ir nepiecieŔams mana.
3. Lai iegÅ«tu manu, jÄizspÄlÄ zemes kÄrts.
4. Lai izspÄlÄtu zemes karti, tai ir jÄbÅ«t rokÄ.
VÄl viens veids ir vislabÄkÄ pirmÄ meklÄÅ”ana. TÄ vietÄ, lai izmÄÄ£inÄtu visus ceļus, mÄs izvÄlamies piemÄrotÄko. VisbiežÄk Ŕī metode nodroÅ”ina optimÄlu plÄnu bez liekÄm meklÄÅ”anas izmaksÄm. A* ir labÄkÄs pirmÄs meklÄÅ”anas veids ā no sÄkuma pÄrbaudot daudzsoloÅ”Äkos marÅ”rutus, tas jau var atrast labÄko ceļu, nepÄrbaudot citas iespÄjas.
Interesanta un arvien populÄrÄka labÄkÄ pirmÄ meklÄÅ”anas iespÄja ir Monte Carlo Tree Search. TÄ vietÄ, lai uzminÄtu, kuri plÄni ir labÄki par citiem, izvÄloties katru nÄkamo darbÄ«bu, algoritms katrÄ solÄ« izvÄlas nejauÅ”us pÄcteÄus, lÄ«dz tas sasniedz beigas (kad plÄns izraisÄ«ja uzvaru vai sakÄvi). PÄc tam gala rezultÄts tiek izmantots, lai palielinÄtu vai samazinÄtu iepriekÅ”Äjo opciju svaru. AtkÄrtojot Å”o procesu vairÄkas reizes pÄc kÄrtas, algoritms sniedz labu novÄrtÄjumu tam, kÄds ir labÄkais nÄkamais gÄjiens, pat ja situÄcija mainÄs (ja ienaidnieks rÄ«kojas, lai traucÄtu spÄlÄtÄjam).
Neviens stÄsts par plÄnoÅ”anu spÄlÄs nebÅ«tu pilnÄ«gs bez uz mÄrÄ·i orientÄtas rÄ«cÄ«bas plÄnoÅ”anas vai GOAP (mÄrÄ·tiecÄ«gas rÄ«cÄ«bas plÄnoÅ”anas). Å Ä« ir plaÅ”i izmantota un apspriesta metode, taÄu, izÅemot dažas atŔķirÄ«gas detaļas, tÄ bÅ«tÄ«bÄ ir atgriezeniskÄ Ä·Ädes metode, par kuru mÄs runÄjÄm iepriekÅ”. Ja mÄrÄ·is bija "iznÄ«cinÄt spÄlÄtÄju" un spÄlÄtÄjs atrodas aiz aizsega, plÄns varÄtu bÅ«t Å”Äds: iznÄ«cinÄt ar granÄtu ā iegÅ«t ā mest.
Parasti ir vairÄki mÄrÄ·i, katram ir sava prioritÄte. Ja augstÄkÄs prioritÄtes mÄrÄ·i nevar izpildÄ«t (neviena darbÄ«bu kombinÄcija nerada plÄnu "nogalinÄt spÄlÄtÄju", jo spÄlÄtÄjs nav redzams), AI atgriezÄ«sies pie zemÄkas prioritÄtes mÄrÄ·iem.
ApmÄcÄ«ba un adaptÄcija
MÄs jau teicÄm, ka spÄļu AI parasti neizmanto maŔīnmÄcÄ«Å”anos, jo tÄ nav piemÄrota aÄ£entu pÄrvaldÄ«bai reÄllaikÄ. Bet tas nenozÄ«mÄ, ka jÅ«s nevarat kaut ko aizÅemties no Ŕīs jomas. StrÄlniekÄ gribam pretinieku, no kura varam kaut ko mÄcÄ«ties. PiemÄram, uzziniet par labÄkajÄm pozÄ«cijÄm kartÄ. Vai arÄ« pretinieks kaujas spÄlÄ, kurÅ” bloÄ·Ätu spÄlÄtÄja bieži izmantotÄs kombinÄtÄs kustÄ«bas, motivÄjot viÅu izmantot citus. TÄtad maŔīnmÄcÄ«ba Å”ÄdÄs situÄcijÄs var bÅ«t diezgan noderÄ«ga.
Statistika un varbūtības
Pirms iedziļinÄmies sarežģītos piemÄros, redzÄsim, cik tÄlu mÄs varam iet, veicot dažus vienkÄrÅ”us mÄrÄ«jumus un izmantojot tos lÄmumu pieÅemÅ”anai. PiemÄram, reÄllaika stratÄÄ£ija ā kÄ noteikt, vai spÄlÄtÄjs var uzsÄkt uzbrukumu pirmajÄs spÄles minÅ«tÄs un kÄdu aizsardzÄ«bu pret to sagatavot? MÄs varam izpÄtÄ«t spÄlÄtÄja pagÄtnes pieredzi, lai saprastu, kÄdas varÄtu bÅ«t turpmÄkÄs reakcijas. SÄkumÄ mums nav Å”Ädu neapstrÄdÄtu datu, bet mÄs varam tos savÄkt - katru reizi, kad AI spÄlÄ pret cilvÄku, tas var reÄ£istrÄt pirmÄ uzbrukuma laiku. PÄc dažÄm sesijÄm mÄs iegÅ«sim vidÄjo laiku, kas bÅ«s nepiecieÅ”ams, lai spÄlÄtÄjs nÄkotnÄ varÄtu uzbrukt.
ProblÄma ir arÄ« ar vidÄjÄm vÄrtÄ«bÄm: ja spÄlÄtÄjs 20 reizes steidzÄs un 20 reizes spÄlÄja lÄni, tad nepiecieÅ”amÄs vÄrtÄ«bas bÅ«s kaut kur pa vidu, un tas mums neko noderÄ«gu nedos. Viens no risinÄjumiem ir ierobežot ievades datus - var Åemt vÄrÄ pÄdÄjos 20 gabalus.
LÄ«dzÄ«ga pieeja tiek izmantota, novÄrtÄjot noteiktu darbÄ«bu iespÄjamÄ«bu, pieÅemot, ka spÄlÄtÄja pagÄtnes preferences bÅ«s tÄdas paÅ”as arÄ« nÄkotnÄ. Ja spÄlÄtÄjs mums uzbrÅ«k piecas reizes ar ugunsbumbu, divas reizes ar zibeni un vienreiz ar tuvcÄ«Åu, ir skaidrs, ka viÅÅ” dod priekÅ”roku ugunsbumbai. EkstrapolÄsim un redzÄsim dažÄdu ieroÄu izmantoÅ”anas varbÅ«tÄ«bu: ugunsbumba=62,5%, zibens=25% un tuvcÄ«Åa=12,5%. MÅ«su spÄlei AI ir jÄsagatavojas, lai pasargÄtu sevi no uguns.
VÄl viena interesanta metode ir izmantot Naive Bayes klasifikatoru, lai izpÄtÄ«tu lielus ievades datu apjomus un klasificÄtu situÄciju tÄ, lai AI reaÄ£Ätu vÄlamajÄ veidÄ. Bajesa klasifikatori ir vislabÄk pazÄ«stami ar to izmantoÅ”anu e-pasta surogÄtpasta filtros. Tur viÅi pÄrbauda vÄrdus, salÄ«dzina tos ar to, kur Å”ie vÄrdi ir parÄdÄ«juÅ”ies iepriekÅ” (surogÄtpasta vai nÄ), un izdara secinÄjumus par ienÄkoÅ”ajiem e-pastiem. MÄs varam darÄ«t to paÅ”u pat ar mazÄku ievadi. Pamatojoties uz visu noderÄ«go informÄciju, ko redz AI (piemÄram, kÄdas ienaidnieka vienÄ«bas ir izveidotas vai kÄdas burvestÄ«bas tÄs izmanto, vai kÄdas tehnoloÄ£ijas viÅi pÄtÄ«ja), un gala rezultÄtu (karÅ” vai miers, steiga vai aizstÄvÄ«ba utt.) - mÄs izvÄlÄsimies vÄlamo AI uzvedÄ«bu.
Visas Ŕīs apmÄcÄ«bas metodes ir pietiekamas, taÄu ir vÄlams tÄs izmantot, pamatojoties uz testÄÅ”anas datiem. AI iemÄcÄ«sies pielÄgoties dažÄdÄm stratÄÄ£ijÄm, kuras ir izmantojuÅ”i jÅ«su spÄļu pÄrbaudÄ«tÄji. AI, kas pielÄgojas atskaÅotÄjam pÄc izlaiÅ”anas, var kļūt pÄrÄk paredzams vai pÄrÄk grÅ«ti uzveicams.
VÄrtÄ«bÄs balstÄ«ta adaptÄcija
Å emot vÄrÄ mÅ«su spÄļu pasaules saturu un noteikumus, mÄs varam mainÄ«t vÄrtÄ«bu kopu, kas ietekmÄ lÄmumu pieÅemÅ”anu, nevis vienkÄrÅ”i izmantot ievades datus. MÄs to darÄm:
- Ä»aujiet AI savÄkt datus par pasaules stÄvokli un galvenajiem notikumiem spÄles laikÄ (kÄ iepriekÅ”).
- MainÄ«sim dažas svarÄ«gas vÄrtÄ«bas, pamatojoties uz Å”iem datiem.
- MÄs Ä«stenojam savus lÄmumus, pamatojoties uz Å”o vÄrtÄ«bu apstrÄdi vai novÄrtÄÅ”anu.
PiemÄram, aÄ£entam ir vairÄkas telpas, no kurÄm izvÄlÄties pirmÄs personas Å”ÄvÄja kartÄ. Katrai telpai ir sava vÄrtÄ«ba, kas nosaka, cik vÄlams to apmeklÄt. AI nejauÅ”i izvÄlas, uz kuru telpu doties, pamatojoties uz vÄrtÄ«bu. PÄc tam aÄ£ents atceras, kurÄ telpÄ viÅÅ” tika nogalinÄts, un samazina tÄs vÄrtÄ«bu (iespÄjamÄ«bu, ka viÅÅ” tur atgriezÄ«sies). LÄ«dzÄ«gi arÄ« pretÄjai situÄcijai ā ja aÄ£ents iznÄ«cina daudzus pretiniekus, tad telpas vÄrtÄ«ba pieaug.
Markova modelis
Ko darÄ«t, ja mÄs izmantotu apkopotos datus, lai veiktu prognozes? Ja mÄs noteiktu laiku atcerÄsimies katru istabu, kurÄ redzam spÄlÄtÄju, mÄs prognozÄsim, uz kuru istabu spÄlÄtÄjs varÄtu doties. Izsekojot un reÄ£istrÄjot spÄlÄtÄja kustÄ«bas telpÄs (vÄrtÄ«bas), mÄs varam tÄs paredzÄt.
Å emsim trÄ«s istabas: sarkanu, zaļu un zilu. Un arÄ« novÄrojumi, ko fiksÄjÄm, skatoties spÄles sesiju:
NovÄrojumu skaits katrÄ telpÄ ir gandrÄ«z vienÄds - mÄs joprojÄm nezinÄm, kur izveidot labu vietu slazdam. Statistikas apkopoÅ”anu apgrÅ«tina arÄ« spÄlÄtÄju atdzimÅ”ana, kas vienmÄrÄ«gi parÄdÄs visÄ kartÄ. Bet dati par nÄkamo telpu, kurÄ viÅi ienÄk pÄc parÄdÄ«Å”anÄs kartÄ, jau ir noderÄ«gi.
Redzams, ka zaÄ¼Ä istaba spÄlÄtÄjiem piestÄv - no sarkanÄs istabas uz to pÄrceļas lielÄkÄ daļa cilvÄku, no kuriem 50% paliek tur tÄlÄk. Gluži pretÄji, zilÄ istaba nav populÄra, uz to gandrÄ«z neviens neiet, un, ja iet, tad ilgi neuzturas.
TaÄu dati stÄsta par kaut ko svarÄ«gÄku ā kad spÄlÄtÄjs atrodas zilÄ istabÄ, nÄkamÄ telpa, kurÄ mÄs viÅu redzam, bÅ«s sarkana, nevis zaļa. Lai gan zaÄ¼Ä istaba ir populÄrÄka par sarkano istabu, situÄcija mainÄs, ja spÄlÄtÄjs atrodas zilajÄ istabÄ. NÄkamais stÄvoklis (t.i., telpa, uz kuru spÄlÄtÄjs dosies) ir atkarÄ«gs no iepriekÅ”ÄjÄ stÄvokļa (t.i., telpas, kurÄ spÄlÄtÄjs paÅ”laik atrodas). TÄ kÄ mÄs pÄtÄm atkarÄ«bas, mÄs veiksim precÄ«zÄkas prognozes nekÄ tad, ja mÄs vienkÄrÅ”i skaitÄ«tu novÄrojumus neatkarÄ«gi.
NÄkotnes stÄvokļa prognozÄÅ”anu, pamatojoties uz datiem no pagÄtnes stÄvokļa, sauc par Markova modeli, un Å”Ädus piemÄrus (ar telpÄm) sauc par Markova Ä·ÄdÄm. TÄ kÄ modeļi atspoguļo izmaiÅu iespÄjamÄ«bu starp secÄ«giem stÄvokļiem, tie tiek vizuÄli parÄdÄ«ti kÄ FSM ar varbÅ«tÄ«bu ap katru pÄreju. IepriekÅ” mÄs izmantojÄm MFV, lai attÄlotu aÄ£enta uzvedÄ«bas stÄvokli, taÄu Å”is jÄdziens attiecas uz jebkuru stÄvokli neatkarÄ«gi no tÄ, vai tas ir saistÄ«ts ar aÄ£entu vai nÄ. Å ajÄ gadÄ«jumÄ stÄvokļi apzÄ«mÄ telpu, kuru aÄ£ents aizÅem:
Tas ir vienkÄrÅ”s veids, kÄ attÄlot relatÄ«vo stÄvokļa izmaiÅu iespÄjamÄ«bu, dodot AI zinÄmu iespÄju paredzÄt nÄkamo stÄvokli. Varat paredzÄt vairÄkus soļus uz priekÅ”u.
Ja spÄlÄtÄjs atrodas zaļajÄ zÄlÄ, pastÄv 50% iespÄja, ka viÅÅ” tur paliks nÄkamreiz, kad tiks novÄrots. Bet kÄda ir iespÄja, ka viÅÅ” joprojÄm bÅ«s tur pat pÄc tam? PastÄv ne tikai iespÄja, ka spÄlÄtÄjs palika zaļajÄ istabÄ pÄc diviem novÄrojumiem, bet arÄ« iespÄja, ka viÅÅ” aizgÄja un atgriezÄs. Å eit ir jaunÄ tabula, kurÄ Åemti vÄrÄ jaunie dati:
Tas parÄda, ka iespÄja redzÄt spÄlÄtÄju zaļajÄ istabÄ pÄc diviem novÄrojumiem bÅ«s vienÄda ar 51% - 21%, ka viÅÅ” bÅ«s no sarkanÄs istabas, 5% no tiem, ka spÄlÄtÄjs apmeklÄs zilo istabu starp viÅiem, un 25%, ka spÄlÄtÄjs neatstÄs zaļo istabu.
Tabula ir vienkÄrÅ”i vizuÄls rÄ«ks - procedÅ«rai ir nepiecieÅ”ams tikai reizinÄt varbÅ«tÄ«bas katrÄ solÄ«. Tas nozÄ«mÄ, ka varat ieskatÄ«ties tÄlÄ nÄkotnÄ ar vienu piebildi: mÄs pieÅemam, ka iespÄja iekļūt telpÄ ir pilnÄ«bÄ atkarÄ«ga no paÅ”reizÄjÄs telpas. To sauc par Markova Ä«paÅ”umu ā nÄkotnes stÄvoklis ir atkarÄ«gs tikai no tagadnes. Bet tas nav simtprocentÄ«gi precÄ«zs. SpÄlÄtÄji var mainÄ«t lÄmumus atkarÄ«bÄ no citiem faktoriem: veselÄ«bas lÄ«meÅa vai munÄ«cijas daudzuma. TÄ kÄ mÄs Ŕīs vÄrtÄ«bas nereÄ£istrÄjam, mÅ«su prognozes bÅ«s mazÄk precÄ«zas.
N-grami
KÄ ir ar kaujas spÄles piemÄru un spÄlÄtÄja kombinÄto gÄjienu prognozÄÅ”anu? Tas pats! TaÄu viena stÄvokļa vai notikuma vietÄ mÄs pÄrbaudÄ«sim visas secÄ«bas, kas veido kombinÄto triecienu.
Viens veids, kÄ to izdarÄ«t, ir saglabÄt katru ievadi (piemÄram, Kick, Punch vai Block) buferÄ« un ierakstÄ«t visu buferi kÄ notikumu. TÄtad spÄlÄtÄjs atkÄrtoti nospiež Kick, Kick, Punch, lai izmantotu SuperDeathFist uzbrukumu, AI sistÄma saglabÄ visus ievades datus buferÄ« un atceras pÄdÄjÄs trÄ«s, kas izmantotas katrÄ solÄ«.
(TreknrakstÄ norÄdÄ«tÄs lÄ«nijas ir tad, kad spÄlÄtÄjs uzsÄk SuperDeathFist uzbrukumu.)
AI redzÄs visas opcijas, kad spÄlÄtÄjs izvÄlÄsies Kick, kam sekos vÄl viens Kick, un pÄc tam ievÄros, ka nÄkamÄ ievade vienmÄr ir Punch. Tas ļaus aÄ£entam paredzÄt SuperDeathFist kombinÄto kustÄ«bu un, ja iespÄjams, to bloÄ·Ät.
Å Ä«s notikumu secÄ«bas sauc par N-gramiem, kur N ir saglabÄto elementu skaits. IepriekÅ”ÄjÄ piemÄrÄ tas bija 3 grami (trigrams), kas nozÄ«mÄ: pirmie divi ieraksti tiek izmantoti, lai paredzÄtu treÅ”o. AttiecÄ«gi 5 gramos pirmie Äetri ieraksti paredz piekto un tÄ tÄlÄk.
Dizaineram rÅ«pÄ«gi jÄizvÄlas N-gramu izmÄrs. MazÄkam N ir nepiecieÅ”ams mazÄk atmiÅas, taÄu tajÄ ir arÄ« mazÄk vÄstures. PiemÄram, 2 grami (bigrami) ierakstÄ«s Kick, Kick vai Kick, Punch, bet nevarÄs saglabÄt Kick, Kick, Punch, tÄpÄc AI nereaÄ£Äs uz SuperDeathFist kombinÄciju.
No otras puses, lielÄkam skaitam ir nepiecieÅ”ams vairÄk atmiÅas, un AI bÅ«s grÅ«tÄk apmÄcÄ«t, jo bÅ«s daudz vairÄk iespÄju. Ja jums bÅ«tu trÄ«s iespÄjamie Kick, Punch vai Block ievades veidi, un mÄs izmantotu 10 gramus, tas bÅ«tu aptuveni 60 tÅ«kstoÅ”i dažÄdu iespÄju.
Bigramu modelis ir vienkÄrÅ”a Markova Ä·Äde ā katrs pagÄtnes stÄvokļa/paÅ”reizÄjÄ stÄvokļa pÄris ir bigrams, un jÅ«s varat paredzÄt otro stÄvokli, pamatojoties uz pirmo. 3 gramus un lielÄkus N gramus var uzskatÄ«t arÄ« par Markova Ä·ÄdÄm, kur visi elementi (izÅemot pÄdÄjo N gramÄ) kopÄ veido pirmo stÄvokli, bet pÄdÄjais elements ā otro. CÄ«Åas spÄles piemÄrs parÄda iespÄju pÄriet no Kick and Kick stÄvokļa uz Kick and Punch stÄvokli. ApstrÄdÄjot vairÄkus ievades vÄstures ierakstus kÄ vienu vienÄ«bu, mÄs bÅ«tÄ«bÄ pÄrveidojam ievades secÄ«bu par daļu no visa stÄvokļa. Tas dod mums Markova Ä«paŔību, kas ļauj mums izmantot Markova Ä·Ädes, lai paredzÄtu nÄkamo ievadi un uzminÄtu, kÄda bÅ«s nÄkamÄ kombinÄcija.
SecinÄjums
MÄs runÄjÄm par izplatÄ«tÄkajiem instrumentiem un pieejÄm mÄkslÄ«gÄ intelekta attÄ«stÄ«bÄ. ApskatÄ«jÄm arÄ« situÄcijas, kurÄs tÄs jÄizmanto un kur tÄs ir Ä«paÅ”i noderÄ«gas.
Ar to vajadzÄtu pietikt, lai saprastu spÄles AI pamatus. Bet, protams, Ŕīs nav visas metodes. MazÄk populÄri, bet ne mazÄk efektÄ«vi ietver:
- optimizÄcijas algoritmi, tostarp kÄpÅ”ana kalnos, nolaiÅ”anÄs no slÄ«puma un Ä£enÄtiskie algoritmi
- pretrunÄ«gie meklÄÅ”anas/plÄnoÅ”anas algoritmi (minimax un alfa-beta atzaroÅ”ana)
- klasifikÄcijas metodes (perceptrons, neironu tÄ«kli un atbalsta vektora maŔīnas)
- sistÄmas aÄ£entu uztveres un atmiÅas apstrÄdei
- arhitektÅ«ras pieejas AI (hibrÄ«dsistÄmas, apakÅ”kopu arhitektÅ«ras un citi veidi, kÄ AI sistÄmas pÄrklÄt)
- animÄcijas rÄ«ki (plÄnoÅ”ana un kustÄ«bu koordinÄcija)
- veiktspÄjas faktori (detalizÄcijas lÄ«menis, jebkurÄ laikÄ un laika sadalÄ«juma algoritmi)
TieÅ”saistes resursi par Å”o tÄmu:
1. GameDev.net ir
2.
3.
4. MÄjaslapÄ var atrast arÄ« noderÄ«gus materiÄlus
5. Tomijs Tompsons, mÄkslÄ«gÄ intelekta pÄtnieks un spÄļu izstrÄdÄtÄjs, veido videoklipus vietnÄ YouTube
GrÄmatas par Å”o tÄmu:
1. Game AI Pro grÄmatu sÄrija ir Ä«su rakstu krÄjums, kurÄ ir paskaidrots, kÄ ieviest konkrÄtas funkcijas vai kÄ atrisinÄt konkrÄtas problÄmas.
2. AI Game Programming Wisdom sÄrija ir Game AI Pro sÄrijas priekÅ”tecis. TajÄ ir senÄkas metodes, taÄu gandrÄ«z visas ir aktuÄlas arÄ« mÅ«sdienÄs.
3.
Avots: www.habr.com