Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Leidsin huvitava materjali tehisintellekti kohta mĂ€ngudes. Selgitustega pĂ”hiasjadest tehisintellekti kohta lihtsate nĂ€idetega, samuti palju kasulikke tööriistu ja meetodeid selle mugavaks arendamiseks ja projekteerimiseks. Kuidas, kus ja millal neid kasutada – ka see on olemas.

Enamik nĂ€iteid on kirjutatud pseudokoodis, seega ei ole sĂŒgavad programmeerimise teadmised vajalikud. Postituse all 35 lehekĂŒlge teksti koos piltide ja GIFidega, seega valmistuge.

UPD. Vabandan, kuid olen juba teinud enda tĂ”lke sellest artiklist Habras. PatientZero. Tema versiooni saab lugeda siit, kuid mingil pĂ”hjusel jĂ€i artikkel minust mööda (kasutasin otsingut, aga midagi lĂ€ks valesti). Ja kuna kirjutan mĂ€nguarendusele pĂŒhendatud blogisse, otsustasin jĂ€tta oma tĂ”lke variandi tellijatele (mĂ”ned punktid on mul teistmoodi vormistatud, mĂ”ned – teadlaste soovitusel jĂ€etud vĂ€lja).

Mis on tehisintellekt?

MĂ€ngu tehisintellekt keskendub sellele, milliseid tegevusi objekt peab olukordade pĂ”hjal tegema, milles ta asub. Seda nimetatakse tavaliselt „intelligentsete agentide” juhtimiseks, kus agent on mĂ€ngu tegelane, sĂ”iduk, robot vĂ”i mĂ”ni muu abstraktsem asi: terviklik olek vĂ”i isegi tsivilisatsioon. Igal juhul peab see subjekt nĂ€gema oma keskkonda, tegema selle pĂ”hjal otsuseid ja tegutsema vastavalt. Seda nimetatakse Sense/Think/Act (Tunne/MĂ”tle/Toimi) tsĂŒkliks:

  • Tunne: agent leiab vĂ”i saab teavet oma keskkonnas asjade kohta, mis vĂ”ivad mĂ”jutada tema kĂ€itumist (lĂ€heduses olevaid ohte, kogutavaid esemeid, huvitavaid kohti uurimiseks).
  • MĂ”tle: agent otsustab, kuidas reageerida (hindab, kas on piisavalt ohutu esemeid koguda vĂ”i peaks ta esmalt vĂ”itlema/peitma).
  • Toimi: agent teostab tegevusi eelmise otsuse elluviimiseks (alustab liikumist vaenlase vĂ”i eseme suunas).
  • 
nĂŒĂŒd on olukord muutunud tegelaste tegevuste tĂ”ttu, seega kordub tsĂŒkkel uute andmetega.

Tehisintellekt keskendub tavaliselt Sense-osale tsĂŒklis. NĂ€iteks autonoomsed autod teevad teest pilte, ĂŒhendavad need radarist ja lidarst saadud andmetega ning tĂ”lgendavad neid. Selle tavaliselt teeb masinĂ”pe, mis töötleb sissetulevaid andmeid ja annab neile tĂ€henduse, tuues vĂ€lja semantilist teavet nagu "seal on veel ĂŒks auto 20 jala kaugusel teie ees". Need on nn klassifitseerimisprobleemid.

MĂ€ngud ei vaja keerukat sĂŒsteemi teabe vĂ€ljatĂ”mbamiseks, kuna suur osa andmeid on juba nende lahutamatu osa. Pole vaja kasutada pildituvastusalgoritme, et mÀÀrata, kas ees on vaenlane — mĂ€ng teab seda juba ja edastab teavet otsuste tegemise protsessi kĂ€igus. SeetĂ”ttu on Sense-o osa tsĂŒklist sageli palju lihtsam kui Think ja Act.

MĂ€ngude tehisintellekti piirangud

Tehisintellektil on mitmeid piiranguid, mida tuleb jÀrgida:

  • Tehisintellekti ei ole vaja eelnevalt treenida, nagu see oleks masinĂ”ppe algoritm. TĂŒhja mĂ”tted kirjutada nĂ€rvivĂ”rgustiku arendamise ajal, et jĂ€lgida kĂŒmneid tuhandeid mĂ€ngijaid ja Ă”ppida nende vastu parimat mĂ€ngimise viisi, on mĂ”ttetu. Miks? Sest mĂ€ng ei ole veel vĂ€lja antud ja mĂ€ngijaid ei ole.
  • MĂ€ng peab olema lĂ”bus ja vĂ€ljakutsuv, seega ei tohi agentidel olla paremat lĂ€henemist inimeste vastu.
  • Agendid peavad vĂ€lja nĂ€gema realistlikud, et mĂ€ngijad tunneksid, et nad mĂ€ngivad pĂ€ris inimeste vastu. AlphaGo programm suudab inimesest ĂŒle, kuid valitud kĂ€igud olid vĂ€ga kaugel traditsioonilisest mĂ€ngu mĂ”istmisest. Kui mĂ€ng jĂ€ljendab inimvastast vastast, ei tohi seda tunnet olla. Algoritmi tuleb muuta, et see teeks usutavaid otsuseid, mitte ideaalseid.
  • Tehisintellekt peab töötama reaalajas. See tĂ€hendab, et algoritm ei tohi monopoliseerida protsessori kasutamist pikka aega otsuste tegemiseks. Isegi 10 millisekundi kasutamine on liiga kaua, sest enamikule mĂ€ngudele piisab kogu töötlemise ja jĂ€rgmise graafikakaadri vahetamise jaoks 16 kuni 33 millisekundist.
  • Ideaalis peaks vĂ€hemalt osa sĂŒsteemist olema andmete kaudu juhitud, et 'mitte-koodijad' saaksid muudatusi teha ja et kohandamised toimuksid kiiremini.

Vaatame tehisintellekti lĂ€henemisviise, mis katab kogu Sense/Think/Act tsĂŒkli.

PÔhikohtade vastuvÔtmine

Alustame kĂ”ige lihtsamast mĂ€ngust — Pong. EesmĂ€rk: liigutada platvormi (paddle) nii, et pall pĂ”rkaks sellest tagasi, mitte ei lendaks mööda. See on nagu tennis, kus kaotate, kui ei löö palli tagasi. Siin on AI-l suhteliselt lihtne ĂŒlesanne — otsustada, millises suunas platvormi liikuda.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Tingimuslikud operaatorid

Pongis on AI jaoks kĂ”ige ilmsem lahendus — proovida alati hoida platvorm palliga all.

Lihtne algoritm selle jaoks, kirjutatud pseudokoodis:

iga kaader/uuendus, kui mÀng on kÀimas:
kui pall on platvormi vasakul:
liiguta platforma vasakule
kui pall on platvormi paremal:
liiguta platforma paremale

Kui platvorm liigub sama kiiresti kui pall, siis on see ideaalne algoritm AI jaoks Pongis. Pole vaja midagi keeruliseks muuta, kui andmeid ja vÔimalikke tegevusi agendile pole eriti palju.

See lĂ€henemine on nii lihtne, et kogu Sense/Think/Act tsĂŒkkel on vaevu tajutav. Kuid see on olemas:

  • Sense'i osa on kahes if operaatoris. MĂ€ng teab, kus pall on ja kus platvorm asub, seega pöördub AI nende andmete saamiseks mĂ€ngu poole.
  • Osa Think sisaldab ka kahte if-operatsioonisĂŒsteemi. Need moodustavad kaks lahendust, mis on antud juhul vĂ€listavad. Tulemusena valitakse ĂŒks kolmest tegevusest — liigutada platvorm vasakule, liigutada paremale vĂ”i mitte midagi teha, kui see on juba Ă”igesti paigutatud.
  • Osa Act asub Move Paddle Left ja Move Paddle Right operatsioonides. Olenevalt mĂ€ngu kujundusest vĂ”ivad need platvormi liigutada koheselt vĂ”i teatud kiirusel.

Selliseid lĂ€henemisi nimetatakse reageerivateks — on olemas lihtne reeglite kogu (antud juhul koodis olevad if-operatsioonid), mis reageerivad maailma praegusele olekule ja tegutsevad.

Otsustuspuu

NĂ€ide mĂ€ngust Pong on tegelikult vĂ”rdne formaalse tehisintellekti kontseptsiooniga, mida nimetatakse otsustuspuuks. Algoritm liigub selle kaudu, et jĂ”uda 'leheni' — otsusele, millist tegevust vĂ”tta.

Vaatame otsustuspuu plokkskeemi meie platvormi algoritmile:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Iga osa puust on nimetatud node'iks (sĂ”lm) — tehisintellekt kasutab analoogiat graafiteooriaga, et kirjeldada sarnaseid struktuure. On kaks tĂŒĂŒpi sĂ”lmi:

  • Otsustuspunktid: valik kahe alternatiivi vahel, mis pĂ”hineb mĂ”nedel tingimustel, kus iga alternatiiv esindatakse kui eraldi sĂ”lm.
  • LĂ”ppsĂ”lmed: teostamine, mis esindab lĂ”plikku otsust.

Algoritt algab esimesest sĂ”lmest ("puu juurest"). See kas otsustab, millisele tĂŒtre sĂ”lmele liikuda, vĂ”i tĂ€idab sĂ”lmes sĂ€ilitatud toimingu ja lĂ”petatakse.

Kuidas on siis kasu, kui otsuste puu teeb sama tööd, mis if-operaatorid eelnevas osas? Siin on ĂŒhine sĂŒsteem, kus igal otsusel on ainult ĂŒks tingimus ja kaks vĂ”imalikku tulemust. See vĂ”imaldab arendajal luua tehisintellekti andmete pĂ”hjal, mis esindab otsuseid puus, vĂ€ltides selle kĂ”vasti kodeerimist. Kujutame seda tabelina:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Koodi poolel saate rea lugemise sĂŒsteemi. Looge igaĂŒhe jaoks sĂ”lm, ĂŒhendage otsuste langetamise loogika teise veeru pĂ”hjal ja alamsĂ”lmed kolmanda ja neljanda veeru pĂ”hjal. Teil on endiselt vaja programmeerida tingimused ja toimingud, kuid nĂŒĂŒd on mĂ€ngustruktuur keerukam. Lisate tĂ€iendavaid otsuseid ja toiminguid ning seadistate kogu tehisintellekti, redigeerides lihtsalt tekstifaili puu mÀÀratlemiseks. SeejĂ€rel edastate faili mĂ€ngudisainerile, kes saab kĂ€itumist muuta ilma mĂ€ngu uuesti kompileerimata vĂ”i koodi muutmata.

Otsustuspuud on ĂŒsna kasulikud, kui neid ehitatakse automaatselt suure nĂ€idiste kogumi pĂ”hjal (nĂ€iteks ID3 algoritmi kasutades). See muudab need tĂ”husaks ja suure jĂ”udlusega tööriistaks olukordade klassifitseerimiseks saadud andmete pĂ”hjal. Siiski ĂŒletame lihtsa sĂŒsteemi, mis valib tegevusi agentide jaoks.

Stsenaariumid

Oleme vĂ€lja töötanud otsuste puusĂŒsteemi, mis kasutas eelnevalt loodud tingimusi ja tegevusi. Kunstliku intelligentsuse projekteerija saab korraldada puu nii, nagu ta soovib, kuid ta peab ikkagi tuginema programmeerijale, kes kogu selle loonud on. Mis siis, kui me saaksime anda disainerile tööriistad oma tingimuste vĂ”i tegevuste loomiseks?

Kuna programmeerija ei pea pingutama koodi kirjutamisega tingimuste Is Ball Left Of Paddle ja Is Ball Right Of Paddle jaoks, vĂ”ib ta luua sĂŒsteemi, kus disainer salvestab tingimused nende vÀÀrtuste kontrollimiseks. Siis nĂ€eks otsuste puu andmed vĂ€lja jĂ€rgmiselt:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Sisuliselt on see sama, mis esimeses tabelis, kuid lahendused omavad omavahelist koodi, mis on veidi sarnane if-lausete tingimuslikule osale. Koodi poole pealt loetaks see otsustuspindade teises veerus, kuid eristava tingimuse otsimise asemel (Kas pall on raceri vasakul kĂŒljel?) hinnatakse tingimuslauset ja tagastatakse vastavalt true vĂ”i false. Selleks kasutatakse skriptikeelt Lua vĂ”i Angelscript. Nende abil saab arendaja oma mĂ€ngus objekte (pall ja ratas) töödelda ning luua muutujaid, mis on skriptis kergesti kĂ€tte saadavad (ball.position). Lisaks on skriptikeel lihtsam kui C++. See ei nĂ”ua tĂ€iskompileerimise etappi, mistĂ”ttu sobib see ideaalselt mĂ€ngulogika kiireks kohandamiseks ja vĂ”imaldab „koodita“ inimestel ise vajalikke funktsioone luua.

Antud nÀites kasutatakse skriptikeelt ainult tingimuslause hindamiseks, kuid seda saab kasutada ka tegevuste jaoks. NÀiteks vÔivad andmed Move Paddle Right muutuda skriptioperatsiooniks (ball.position.x += 10). Nii vÔib tegevuse mÀÀratlemine toimuda skriptis ilma vajaduseta programmeerida Move Paddle Right.

VÔite minna veelgi kaugemale ja kirjutada otsuste puu tÀielikult skriptikeeles. See on kood, mis koosneb rangelt programmeeritud tingimuslausete pÔhjal, kuid need on vÀliste skriptifailide sees, mis tÀhendab, et neid saab muuta ilma kogu programmi uuesti kompileerimata. Tihti saab skriptifaili muuta otse mÀngu ajal, et kiiresti testida erinevaid teid AI reageerimist.

Olenemised sĂŒndmustele

Ülaltoodud nĂ€ited sobivad ideaalselt Pongile. Need kĂ€ivitavad pidevalt Sense/Think/Act tsĂŒkli ja tegutsevad viimase maailma seisundi pĂ”hjal. Kuid keerukamates mĂ€ngudes tuleb reageerida ĂŒksikutele sĂŒndmustele, mitte hinnata kĂ”ike korraga. Pong ei ole sellisel juhul enam hea nĂ€ide. Vaatame midagi muud.

Kujutage ette tulistamismĂ€ngu, kus vaenlased on liikumatud seni, kuni nad avastavad mĂ€ngija, pĂ€rast mida nad tegutsevad vastavalt oma 'spetsialiseerumisele': keegi jookseb 'rushing' peale, keegi rĂŒndab kaugelt. See on endiselt pĂ”hine reageerimise sĂŒsteem — 'kui mĂ€ngija on nĂ€htud, siis tee midagi', — kuid seda saab loogiliselt jagada sĂŒndmuseks MĂ€ngija NĂ€hud (Player Seen) ja reaktsiooniks (valige vastus ja teostage see).

See tagasi meid Sense/Think/Act tsĂŒklisse. Me saame kirjutada Sense-osa, mis iga kaadri jaoks kontrollib — kas AI nĂ€eb mĂ€ngijat. Kui ei, siis ei juhtu midagi, aga kui nĂ€eb, siis luuakse sĂŒndmus Player Seen. Koodil on eraldi jaotis, kus on kirjas: „kui toimub sĂŒndmus Player Seen, tee”, kus — vastus, mida vajate Tellimise ja Tegevuse osadele viitamiseks. Nii seadistate reaktsioonid sĂŒndmusele Player Seen: „rĂŒndava” karakteri puhul — ChargeAndAttack, ja sniperi puhul — HideAndSnipe. Need seosed saab luua andmefailis kiireks redigeerimiseks ilma vajaduseta uuesti kompileerida. Ja siin saab kasutada ka skriptikeelt.

Kohakohaste otsuste vastuvÔtmine

Kuigi lihtsad reaktsioonisĂŒsteemid on vĂ€ga tĂ”husad, on palju olukordi, kus need ei piisa. MĂ”nikord on vaja teha erinevaid otsuseid, mis pĂ”hinevad sellel, mida agent praegu teeb, kuid nende esitamine tingimustena on keeruline. MĂ”nikord on liiga palju tingimusi, et neid tĂ”husalt otsustepuudel vĂ”i skriptides esitada. MĂ”nikord on oluline eelnevalt hinnata, kuidas olukord muutub, enne jĂ€rgmise sammu jaoks otsuse tegemist. Nende probleemide lahendamiseks on vajalikud keerukamad lĂ€henemisviisid.

LÔplik olekumasin

LĂ”plik olekumasin ehk FSM (lĂ”plik automaat) on viis öelda, et meie agent on praegu ĂŒhes mitmest vĂ”imalikust olekust ning et ta vĂ”ib liikuda ĂŒhest olekust teise. Sellega on mÀÀratud kindel hulk olekuid — seetĂ”ttu ka nimi. Parim nĂ€ide igapĂ€evaelust on liiklusfoor. Erinevates kohtades on erinevad tulede jĂ€rjestused, kuid pĂ”himĂ”te on sama — iga olek esindab midagi (seisa, mine jne). Liiklusfoor on igal ajal ainult ĂŒhes olekus ja liigub ĂŒhelt teisele lihtsate reeglite alusel.

NPC-de mÀngudes on sarnane lugu. VÔtame nÀiteks patrulli, millel on jÀrgmised seisundid:

  • Patrullimine (Patrolling).
  • RĂŒndamine (Attacking).
  • PĂ”genemine (Fleeing).

Ja selliste tingimustega, et muuta tema seisundit:

  • Kui patrull nĂ€eb vaenlast, rĂŒndab ta.
  • Kui patrull rĂŒndab, kuid enam ei nĂ€e vaenlast, naaseb ta patrullimise juurde.
  • Kui patrull rĂŒndab, aga on tĂ”siselt haavatud, pĂ”geneb ta.

Samuti saab kirjutada if-kÀsklusi, kasutades patrulli seisundi muutujat ja erinevaid kontrolle: kas vaenlane on lÀheduses, mis on NPC tervise tase jne. Lisa veel mÔned seisundid:

  • Mugavolek (Idling) — patrullide vahel.
  • Otsing (Searching) — kui nĂ€htud vaenlane on kadunud.
  • Abi palumine (Finding Help) — kui vaenlane on nĂ€htud, aga liiga tugev, et ĂŒksi temaga vĂ”idelda.

IgaĂŒhe valik on piiratud — nĂ€iteks ei lĂ€he patrull otsima varjunud vaenlast, kui tal on madal tervis.

Lõppkokkuvõttes võib tohutu "kui... siis" nimekiri muutuda liiga mahukaks, seetõttu tuleks formaliseerida meetod, mis aitab meil meeles pidada olekuid ja üleminekuid nende vahel. Selleks võtame arvesse kõik olekud ja iga oleku puhul kirjutame üles kõik üleminekud teistesse olekutesse koos nende jaoks vajalike tingimustega. <x Đž y, ĐœĐŸ ĐœĐ” z>, siis <p>», võib muutuda liiga keeruliseks, seega tuleks välja töötada meetod, mis aitab meil meeles pidada olekuid ja üleminekuid nende vahel. Selleks arvestame kõiki olekuid ja iga oleku alla koostame nimekirja kõikidest üleminekutest teistesse olekutesse koos nende jaoks vajalikud tingimustega.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

See on seisundite ĂŒleminekute tabel — kompleksne viis FSM-i esitlemiseks. Joonistame diagrammi ja saame tĂ€ieliku ĂŒlevaate sellest, kuidas NPC kĂ€itumine muutub.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Diagramm illustreerib otsuste langetamise olemust selle agendi jaoks, tuginedes praegusele olukorrale. Iga nool nĂ€itab ĂŒleminekuid olekute vahel, kui kĂ”rval olev tingimus on tĂ”ene.

Iga uuendusega kontrollime agendi praegust olekut, vaatame ĂŒleminekute nimekirja ja kui ĂŒlemineku tingimused on tĂ€idetud, vĂ”tab ta uue oleku. NĂ€iteks kontrollitakse igal kaadril, kas 10-sekundiline timer on aegunud, ja kui jah, siis liigub strahh olekust Idling olekusse Patrolling. Samamoodi kontrollib olek Attacking agendi tervist — kui see on madal, siis liigub ta olekusse Fleeing.

See on ĂŒleminekute töötlemine olekute vahel, aga kuidas on lood kĂ€itumisega, mis on seotud nende endi olekute talitustega? Mis puudutab konkreetse oleku tegelikku kĂ€itumise rakendamist, siis tavaliselt on olemas kaks tĂŒĂŒpi 'konksu', kus me seome tegevused FSM-iga:

  • Tegevused, mida me praeguses olekus perioodiliselt teeme.
  • Tegevused, mida me teeme, kui liigume ĂŒhest olekust teise.

Esimene tĂŒĂŒp. Patrolling olek liigub iga raami jooksul agendi patrullmarsruuti. Attacking olek pĂŒĂŒab iga raami jooksul alustada rĂŒnnakut vĂ”i minna olekusse, kui see on vĂ”imalik.

Teise tĂŒĂŒbi puhul vaatame ĂŒleminekute avaldust: „kui vaenlane on nĂ€htav ja vaenlane on liiga tugev, siis mine olekusse Finding Help.” Agent peab valima, kuhu abi minna ning salvestama selle teabe, et olek Finding Help teaks, kuhu pöörduda. Kui abi on leitud, naaseb agent tagasi olekusse Attacking. Sellel hetkel soovib ta teavitada liitlast ohust, seega vĂ”ib tekkida tegevus NotifyFriendOfThreat.

JĂ€llegi saame seda sĂŒsteemi vaadata Sense/Think/Act tsĂŒkli kaudu. Sense vĂ€ljendub andmetes, mida kasutatakse ĂŒleminekuloogikas. Think — ĂŒleminekutes, mis on saadaval igas olekus. Ja Act toimub tegevustega, mis aset leiavad regulaarselt oleku piires vĂ”i olekute vahel ĂŒleminekute ajal.

MĂ”nikord vĂ”ib pidev ĂŒlemineku tingimuste kĂŒsitlemine olla kulukas. NĂ€iteks, kui iga agent teostab keerulisi arvutusi igas kaadris, et mÀÀrata, kas ta nĂ€eb vaenlasi ja aru saada, kas liikuda Patrolling olekust Attacking olekusse — vĂ”tab see palju protsessoriaega.

Olulisi muutusi maailma seisundis vĂ”ib kĂ€sitleda sĂŒndmustena, mida töödeldakse nende ilmumise ajal. Selle asemel, et FSM igas kaadris kontrolliks ĂŒlemineku tingimust 'kas mu agent nĂ€eb mĂ€ngijat?', saab seadistada eraldi sĂŒsteemi, et teostada kontrolle harvemini (nĂ€iteks 5 korda sekundis). Tulemuseks on Player Seen, kui kontroll lĂ€bib.

See edastatakse FSM-ile, mis peab nĂŒĂŒd ĂŒlemineku tingimuseks Player Seen sĂŒndmuse saamise ja vastavalt reageerima. LĂ”ppkĂ€itumine on sama, vĂ€lja arvatud peaaegu mĂ€rkamatu viivitus enne vastust. Kuid nĂŒĂŒd on jĂ”udlus parem, kuna osa Sense'ist on eraldatud eraldi programmiosaks.

Hierarchical finite state machine

Kuid töötamine suurte FSM-idega ei ole alati mugav. Kui soovime rĂŒnnakuseisundit laiendada, asendades selle eraldi MeleeAttacking (lĂ€hedane rĂŒnnak) ja RangedAttacking (kaug rĂŒnnak), peame muutma ĂŒleminekud kĂ”igist teistest seisunditest, mis viivad rĂŒnnakuseisundisse (nii praegused kui tulevased).

Olete kindlasti mĂ€rganud, et meie nĂ€ITES on palju dubleeritud ĂŒleminekuid. Enamiku ĂŒleminekud seisu Idling on identsed ĂŒleminekud seisu Patrolling. Hea oleks mitte korduda, eriti kui lisame rohkem sarnaseid seisundeid. On mĂ”istlik rĂŒhmitada Idling ja Patrolling ĂŒhise sildi „mitte-kerged” alla, kus on vaid ĂŒks ĂŒhine ĂŒleminekute kogum lahingu seisunditesse. Kui me kujutame seda sildi kui staatust, siis Idling ja Patrolling saavad alam-seisunditeks. NĂ€ide eraldi ĂŒleminekute tabeli kasutamisest uue mitte-kerge alam-seisundi jaoks:

PÔhiseisundid:
Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

VĂ€ljas olek:
Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Ja diagrammi kujul:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

See on sama sĂŒsteem, kuid uue mittevĂ”itlusliku olekuga, mis sisaldab Idling ja Patrolling. Iga olekuga on seotud FSM (lĂ”ppmĂ”ju automaat), millel on alamolekud (ja need alamolekud sisaldavad omakorda oma FSM-e — niikaua kui teil on vaja), saame Hierarchical Finite State Machine ehk HFSM (hierarhiline lĂ”ppautomaat). Ühtlustades mittevĂ”itluslikku olekut, oleme pidevalt vĂ€hendanud ĂŒleliigseid ĂŒleminekuid. Sama saame teha kĂ”igi uute olekute puhul, millel on ĂŒhised ĂŒleminekud. NĂ€iteks kui tulevikus laiendame olekut Attacking olekute MeleeAttacking ja MissileAttacking juurde, siis need on alamolekud, mis ĂŒksteise vahel liiguvad sĂ”ltuvalt vahemaa suurusest vaenlase ja ammunition'i olemasolu jĂ€rgi. LĂ”ppkokkuvĂ”ttes saab keerulisi kĂ€itumismudeleid ja alamkĂ€itumismudeleid esitada minimaalsete dubleeritud ĂŒleminekute arvuga.

KĂ€itumiste puu

HFSM-i abil saate keerulisi kĂ€itumise kombinatsioone luua lihtsal viisil. Kuid on ĂŒks vĂ€ike raskus, et otsuste tegemine ĂŒlemineku reeglite kaudu on tihedalt seotud praeguse olekuga. Ja paljudes mĂ€ngudes on see tĂ€pselt see, mida vaja. Hoolikas seisundihierarhia kasutamine vĂ”ib vĂ€hendada ĂŒleminekute korduste arvu. Kuid mĂ”nikord on vajalikud reeglid, mis toimivad sĂ”ltumatult sellest, millisest seisundist oletate vĂ”i mis kehtivad peaaegu igas seisundis. NĂ€iteks kui agendi tervis langeb 25%-ni, soovite, et ta jookseks minema, olenemata sellest, kas ta on lahingus, jalutab vĂ”i vestleb — peate selle tingimuse igasse olekusse lisama. Ja kui teie disainer soovib hiljem madala tervise piiri muuta 25%-lt 10%-le, peab sellega uuesti tegelema.

Ideaaljuhul vajab see olukord sĂŒsteemi, kus otsus „millises olekus olla” jÀÀb seisundite endi piiridest vĂ€lja, et muudatusi saaks teha ainult ĂŒhes kohas ning ei peaks puutuma ĂŒlemineku tingimustesse. Siin tulevad mĂ€ngu kĂ€itumispuud.

On mitu viisi nende rakendamiseks, kuid sisu on kĂ”igi puhul enam-vĂ€hem sama ja sarnaneb otsusepuule: algoritm algab „juure“ sĂ”lmest, puus on sĂ”lmed, mis esindavad kas otsuseid vĂ”i tegevusi. TĂ”si, mĂ”ned olulised erinevused on siiski olemas:

  • NĂŒĂŒd tagastavad sĂ”lmed ĂŒhe kolmest vÀÀrtusest: Succeeded (kui töö on tehtud), Failed (kui ei saa kĂ€ivitada) vĂ”i Running (kui see on endiselt kĂ€imas ja pole lĂ”plikku tulemust).
  • Otsustuskohti, kus valida kahe alternatiivi vahel, enam pole. Selle asemel on olemas Decorator sĂ”lmed, millel on ĂŒks alam-sĂ”lm. Kui nad Successful, siis tĂ€idavad nad oma ainukese alam-sĂ”lme.
  • Tegevusi teostavad sĂ”lmed tagastavad vÀÀrtuse Running, et esindada teostatavaid tegevusi.

Seda vĂ€ikest sĂ”lmede kogumit saab ĂŒhendada, et luua suur hulk keerukaid kĂ€itumismudeleid. Kujutlegem nĂ€iteks eelneva mustri HFSM valveallikat kĂ€itumispuuna:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Selle struktuuriga ei tohiks olla selget ĂŒleminekut olekute Idling/Patrolling ja oleku Attacking vĂ”i mĂ”nede teiste vahel. Kui vaenlane on nĂ€htav ja tegelase elu on madal, siis peatub tĂ€itmine sĂ”lmes Fleeing, sĂ”ltumata sellest, millist sĂ”lme ta varem tĂ€itis — Patrolling, Idling, Attacking vĂ”i mĂ”ni muu.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

KĂ€itumispuud on keerulised — neid on palju erinevaid koostamise viise, kuid Ă”ige dekoratorite ja komposiit-sĂ”lmede kombinatsiooni leidmine vĂ”ib olla probleem. On ka kĂŒsimusi selle kohta, kui sageli puu kontrollida — kas me soovime seda lĂ€bida iga osa vĂ”i ainult siis, kui ĂŒks tingimus muutub? Kuidas hoida sĂ”lmedega seotud olekut — kuidas teada, kui oleme olnud olekus Idling 10 sekundi jooksul vĂ”i kuidas teada, millised sĂ”lmed viimasel korral tĂ€ideti, et Ă”igesti jĂ€rjestust töödelda?

Just sellepĂ€rast on olemas mitmeid teostusi. NĂ€iteks mĂ”nedes sĂŒsteemides on dekoratorisĂ”lmed asendatud sisseehitatud dekoratoritega. Need uuesti hindavad puu tingimuste muutumisel, aitavad sĂ”lmedega liituda ja tagavad perioodilised uuendused.

Utility-pĂ”hine sĂŒsteem

MĂ”nel mĂ€ngul on mitmeid erinevaid mehhanisme. Soovitav on, et nad saaksid kĂ”ik eelised lihtsatest ja ĂŒhestest reeglitevahenditest, kuid see ei pea olema tĂ€ieliku kĂ€itumise puu kujul. Selle asemel, et omada selget valikute komplekti vĂ”i vĂ”imalike tegevuste puu, on lihtsam uurida kĂ”iki tegevusi ja valida hetke kĂ”ige sobivam.

Kasulikkusele pĂ”hinev sĂŒsteem aitab selles osas. See on sĂŒsteem, kus agendil on palju tegevusi ja ta valib ise, millist teostada, pĂ”hinedes iga tegevuse suhteliselt kasulikusele. Siinjuures tĂ€hendab kasulikkus meelevaldset mÔÔtu, kuivĂ”rd oluline vĂ”i soovitav on selle tegevuse teostamine agendi jaoks.

Arvestatud tegevuse kasulikkust praeguse oleku ja keskkonna pĂ”hjal saab agent igal ajal kontrollida ja valida sobivama teise oleku. See sarnaneb FSM-iga, vĂ€lja arvatud see, et ĂŒleminekud mÀÀratakse iga potentsiaalse oleku, sealhulgas praeguse, hindamise jĂ€rgi. Pöörake tĂ€helepanu sellele, et valime ĂŒleminekuks kĂ”ige kasulikuma tegevuse (vĂ”i jÀÀme paigale, kui oleme juba selle teinud). Suurema mitmekesisuse jaoks vĂ”ib see olla kaalutud, kuid juhuslik valik vĂ€iksemast nimekirjast.

SĂŒsteem mÀÀrab suvalise kasulikkuse vÀÀrtuste vahemiku — nĂ€iteks vahemikus 0 (tĂ€iesti ebasoovitav) kuni 100 (tĂ€iesti soovitav). Igal tegevusel on mitmed parameetrid, mis mĂ”jutavad selle vÀÀrtuse arvutamist. Tagasi meie nĂ€ite juurde valvuri kohta:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Tegevuste vahelised ĂŒleminekud on mitmeti mĂ”istetavad — ĂŒkski olek ei saa jĂ€rgneda ainult teisele. Tegevuste prioriteedid tulenevad tagastatavast kasulikkusest. Kui vaenlane on nĂ€htav, tugev ja tegelase elu on madal, siis nii pĂ”genemine kui ka abi leidmine annavad kĂ”rgeid mitte-null vÀÀrtusi. Samas on abi leidmine alati kĂ”rgem. Samuti ei anna mitte-eri tegevused kunagi rohkem kui 50, seega jÀÀvad need alati madalamale kui lahingu tegevused. Seda tuleb arvestada tegevuste loomisel ja nende kasulikkuse arvutamisel.

Meie nĂ€ites tagastavad toimingud kas fikseeritud vÀÀrtuse vĂ”i ĂŒhe kahest fikseeritud vÀÀrtusest. Realistlikum sĂŒsteem eeldab, et hindamine toimub pidevas vÀÀrtuste vahemikus. NĂ€iteks, kui agent on madala elujĂ”u tasemega, tagastab toiming „PĂ”genemine” kĂ”rgema kasulikkuse vÀÀrtuse, samas kui toiming „RĂŒndamine” tagastab madalama, kui vaenlane on liiga tugev. SeetĂ”ttu on toimingul „PĂ”genemine” prioriteet toimingu „RĂŒndamine” ĂŒle igas olukorras, kus agent tunneb, et tal ei ole piisavalt elujĂ”udu vastase vĂ”itmiseks. See vĂ”imaldab muuta toimingute prioriteete, tuginedes mistahes kriteeriumitele, muutes lĂ€henemise paindlikumaks ja varieeruvamaks kui kĂ€itumise puu vĂ”i FSM.

Iga tegevus sisaldab paljusid tingimusi programmi arvutamiseks. Neid saab kirjutada skriptikeeles vĂ”i matemaatiliste valemite seeriana. The Sims, mis modelleerib tegelase pĂ€evakava, lisab tĂ€iendava arvutustaseme — agent saab rea "motivatsioone", mis mĂ”jutavad kasulikkuse hinnanguid. Kui tegelane on nĂ€ljane, siis aja jooksul muutub ta nĂ€ljasemaks, ja EatFood tegevuse kasulikkuse tulemus tĂ”useb, kuni tegelane teeb selle, vĂ€hendades nĂ€lga ja naastes EatFood vÀÀrtusega null.

Tegevuste valimise idee pĂ”hineb hinna sĂŒsteemil, seega saab Utility-based sĂŒsteemi kasutada AI otsustusprotsessides osana, mitte nende tĂ€ieliku asendusena. Otsustuspuu vĂ”ib kĂŒsida kahe alamĂ”le otsuse kasulikkuse hindamist ja valida kĂ”rgema. Samamoodi vĂ”ib kĂ€itumispuu sisaldada komposiitnode Utility, et hinnata tegevuste kasulikkust, et otsustada, millist alamelementi tĂ€ita.

Liikumine ja navigeerimine

Eelmistes nĂ€idetes oli meil platvorm, mida me liigutame vasakule vĂ”i paremale, ja valvuri, kes patrullib vĂ”i rĂŒndab. Kuid kuidas me tĂ€pselt kĂ€sitleme agendi liikumist teatava aja jooksul? Kuidas me mÀÀrame kiirus, kuidas me takistusi vĂ€ltime ja kuidas me marsruuti planeerime, kui sihtkohta jĂ”udmine on keerulisem kui lihtsalt sirgjooneliselt liikuda? Vaatame sellele lĂ€hemalt.

Halduse

Alguses eeldame, et igal agendil on kiirus, mis hĂ”lmab, kui kiiresti ta liigub ja mis suunas. Seda saab mÔÔta meetrites sekundis, kilomeetrites tunnis, pikseldes sekundis jne. Meeles pidades tunnustamine / MĂ”tle / Toimi tsĂŒklit, vĂ”ime ette kujutada, et osa mĂ”tlemisest valib kiirus ja osa tegevusest rakendab seda kiirusest agenti. MĂ€ngudes on tavaliselt fĂŒĂŒsikasĂŒsteem, mis teeb selle ĂŒlesande teie eest, uurides iga objekti kiirusvÀÀrtust ja reguleerides seda. SeetĂ”ttu vĂ”ib jĂ€tta AI-le ĂŒhe ĂŒlesande — otsustada, kui kiiresti agent peab olema. Kui on teada, kus agent peab olema, tuleb see liikuda Ă”iges suunas mÀÀratud kiirusel. VĂ€ga triviaalne vĂ”rrand:

desired_travel = destination_position – agent_position

Kujutage ette 2D maailma. Agend asub punktis (-2,-2), sihtkoht asub kuskil kirdes punktis (30, 20), ning vajalik tee agendi jĂ”udmiseks sinna on (32, 22). Eeldame, et need positsioonid on mÔÔdetud meetrites — kui vĂ”tta agendi kiirus 5 meetrit sekundis, siis me skaleerime meie liikumisvektori ja saame kiirusena umbes (4.12, 2.83). Nende parameetritega jĂ”uaks agent sihtkohta peaaegu 8 sekundi pĂ€rast.

VÀÀrtusi saab igal ajal uuesti arvutada. Kui agent oleks sihtpunkti poole poolel teel, oleks liikumine poole pikem, kuid kuna agendi maksimaalne kiirus on 5 m/s (nagu me eespool otsustasime), jÀÀb kiirus samaks. See kehtib ka liikuvate sihtide puhul, vÔimaldades agendil teha vÀikeseid kohandusi nende liikumise ajal.

Kuid me soovime rohkem variatiivsust — nĂ€iteks, et kiirus kasvaks aeglaselt, simuleerides tegelast, kes liigub seismise seisundist jooksmisele. Sama saab teha ka enne peatumist. Need omadused on tuntud kui steering behaviours, millest igaĂŒhel on spetsiifilised nimed: Seek (otsimine), Flee (pĂ”genemine), Arrival (saabumine) jne. Idee on selles, et kiirusjĂ”ud vĂ”ivad olla rakendatud agendi kiirusest, vĂ”ttes aluseks agendi asendi ja praeguse kiiruse vĂ”rdlemise sihtpunktiga, et kasutada erinevaid viise eesmĂ€rgini jĂ”udmiseks.

Iga kĂ€itumine omab veidi erinevat eesmĂ€rki. Seek ja Arrival on viisid, kuidas agent liigub sihtkohta. Obstacle Avoidance (takistuste vĂ€ltimine) ja Separation (eraldamine) kohandavad agendi liikumist, et vĂ€ltida teel olevaid takistusi. Alignment (sĂŒnkroniseerimine) ja Cohesion (sidusus) hoiavad agente koos liikumise ajal. Erinevaid steering behaviours (suunamisviise) saab kokku liita, et luua ĂŒks marsruut, arvestades kĂ”iki tegureid. Agent, kes kasutab Arrival, Separation ja Obstacle Avoidance kĂ€itumisi, et hoida eemale seintest ja teistest agentidest. See lĂ€henemine töötab hĂ€sti avatud paikades, kus ei ole liigseid detaile.

Raskemates tingimustes erinevate kĂ€itumiste liitmine töötab halvemini — nĂ€iteks vĂ”ib agent lĂ”ksu jÀÀda seina, kuna Arrival ja Obstacle Avoidance konfliktimeetodid. SeetĂ”ttu tuleks arvesse vĂ”tta keerulisemaid variante kui lihtsalt kĂ”igi vÀÀrtuste liitmine. Üks vĂ”imalus on see, et tulemuste liitmise asemel saab kaaluda liikumist erinevates suundades ja valida parim variant.

Kuid keerulises keskkonnas, kus on ummikud ja on valik, millises suunas minna, vajame midagi veelgi arenenumat.

Teekonna leidmine

Juhitavad kÀitumised sobivad suurepÀraselt lihtsaks liikumiseks avatud maastikul (jalgpallivÀljak vÔi areen), kus A-st B-sse jÔudmine on sirge tee vÀikeste kÔrvalekaldumistega takistustest mööda. Kompleksemate marsruutide jaoks on meil vaja teepunktide leidmist, mis on viis maailma uurimiseks ja marsruudi valimiseks selle kaudu.

KĂ”ige lihtsam viis on kanda ruudustik iga ruudu kohal, kus agent asub, ja hinnata, millised neist on liikumise jaoks lubatud. Kui mĂ”ni neist on sihtkoht, siis liikuge sellest mööda teed igast ruudust tagasi eelmise suunas, kuni jĂ”uate algusesse. See on marsruut. Kui ei, korrake protsessi lĂ€himates muudes ruutudes, kuni leiate sihtkoha vĂ”i kui ruudud on otsa saanud (mis tĂ€hendab, et ei ole vĂ”imalikku marsruuti). Seda tuntakse ametlikult kui laiaulatuslikku otsingut vĂ”i BFS (Breadth-First Search). Iga sammu korral vaatab see igas suunas (seega on see 'laius'). Otsinguruum sarnaneb lainete frontiga, mis liigub, kuni saavutab soovitud koha — otsinguala laieneb iga sammu kaupa, kuni see saavutab lĂ”pp-punkti, pĂ€rast mida saab trajektoori algusesse jĂ€lgida.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Tulemusena saate loendi ruutudest, mille kaudu koostatakse vajalik marsruut. See on teekond (seetĂ”ttu 'pathfinding') — loetelu kohtadest, mida agent kĂŒlastab, liikudes sihtkohta.

Arvestades, et me teame iga ruudu asukohta maailmas, on vĂ”imalik kasutada steering behaviours'i, et liikuda mööda teed — alates sĂ”lmest 1 sĂ”lmeni 2, seejĂ€rel 2 sĂ”lmest 3 ja nii edasi. Lihtsaim variant on liikuda jĂ€rgmise ruudu keskpunkti suunas, kuid veel parem oleks peatuda praeguse ruudu ja jĂ€rgmise vaheline ÀÀr keskel. Sel viisil suudab agent teravaid nurki jĂ€rsudel pöördel kĂ€rpida.

BFS-algoritmil on ka miinuseid — see uurib sama palju ruute 'vale' suunas kui 'Ă”ige'. Siit tuleb keerulisem algoritm, mida nimetatakse A* (A star). See töötab samuti, kuid selle asemel, et irratiivselt uurida naaberruute (seejĂ€rel naabrid naabritele jne), kogub see sĂ”lmed listi ja sorteerib need nii, et jĂ€rgmiseks uurimiseks on alati sĂ”lm, mis viib lĂŒhimale marsruudile. SĂ”lmi sorteeritakse heuristika alusel, mis arvestab kahte asja — 'kulude' hĂŒpoteetilist marsruuti soovitud ruuduni (sealhulgas kĂ”ik liikumiskulud) ja hindamist, kui kaugel see ruut sihtkohast on (suunates otsingut Ă”igesse suunda).

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Selles nĂ€ites uurib agent ruute ĂŒkshaaval, valides iga kord naaberi, mis nĂ€ib kĂ”ige lootustandvam. Saadud tee on sama nagu BFS-i puhul, kuid protsessi kĂ€igus on kaalutud vĂ€hem ruute — see on mĂ€ngu jĂ”udluse jaoks vĂ€ga oluline.

Liikumine ilma ruudustikuta

Kuid enamik mÀnge ei pÔhine ruudustikul, ja tihti ei saa seda realistlikkuse nimel Àra teha. Vajalikud on kompromissid. Millised peaksid olema ruutude mÔÔtmed? Kui need on liiga suured, ei suuda nad korralikult nÀidata vÀikeseid koridore vÔi pöördeid, ja kui nad on liiga vÀiksed, on otsimiseks liiga palju ruute, mis lÔpuks aega raiskab.

Esimene asi, mida mĂ”ista, on see, et vĂ”rk annab meile seotud sĂ”lmede graafi. A* ja BFS algoritmid töötavad tegelikult graafidel ega hooli meie vĂ”rgust ĂŒldse. Me vĂ”ime paigutada sĂ”lmed mĂ€ngumaailma mistahes kohtadesse: kui kahe seotud sĂ”lme vahel on ĂŒhendus ning algus- ja lĂ”pp-punkti vahel vĂ€hemalt ĂŒks sĂ”lm, töötab algoritm endiselt sama hĂ€sti kui varem. Seda nimetatakse sageli teepunktide sĂŒsteemiks, kuna iga sĂ”lm esindab olulist positsiooni maailmas, mis vĂ”ib olla osa igasugustest hĂŒpoteetilistest teedest.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend
NÀide 1: sÔlm igas ruudus. Otsing algab sÔlmest, kus agent asub, ja lÔpeb soovitud ruudu sÔlmes.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend
NÀide 2: vÀiksem sÔlmede kogum (teepunktid). Otsing algab ruudust, kus agent on, lÀbib vajaliku arvu sÔlmi ja jÀtkub seejÀrel sihtpunkti.

See on ĂŒsna paindlik ja vĂ”imas sĂŒsteem. Kuid vajatakse teatud ettevaatust otsuste tegemisel, kus ja kuidas waypoint paigutada, vastasel juhul vĂ”ivad agentid lihtsalt lĂ€himat punkti mitte mĂ€rgata ja oma teed alustada. Oluliselt lihtsam oleks, kui saaksime automaatselt teepunktid paigutada maailma geomeetria pĂ”hjal.

Siia tuleb navigeerimisvĂ”rk ehk navmesh. See on tavaliselt 2D kolmnurkade vĂ”rk, mis kantakse maailma geomeetriale — igal pool, kus agent on lubatud liikuda. Iga kolmnurk vĂ”rgus muutub graafis sĂ”lmpunktiks ja sellel on kuni kolm kĂŒlgnevat kolmnurka, mis muutuvad graafis naabersĂ”lmedeks.

See pilt on nĂ€ide Unity mootorist — see analĂŒĂŒsis maailma geomeetriat ja lĂ”i navmeshi (halli sinise vĂ€rviga ekraanipildil). Iga polĂŒgoon navmeshis on piirkond, kus agent saab seista vĂ”i liikuda ĂŒhest polĂŒgoonist teise. Antud nĂ€ites on polĂŒgoonid vĂ€iksemad kui korrused, millel nad asuvad — see on tehtud, et arvestada agendi suurusi, mis vĂ”ivad ĂŒletada tema nimelisest asukohast vĂ€ljapoole.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Saame otsida marsruuti selle vĂ”rgu kaudu, kasutades jĂ€lle A* algoritmi. See annab meile peaaegu ideaalse marsruudi maailmas, mis arvestab kogu geomeetriaga ja samal ajal ei vaja ĂŒlearuseid sĂ”lmi ega teepunkte.

Marsruudi leidmine on liiga ulatuslik teema, mille kohta ei piisa ĂŒhest artikli jaost. Kui soovite seda pĂ”hjalikumalt uurida, siis aitab teid Amit Patel'i veebisait.

Planeerimine

Oleme leidnud, et marsruudi leidmine ei tĂ€henda lihtsalt suuna valimist ja liikumist — peame valima marsruudi ja tegema mitu pöörde, et jĂ”uda soovitud sihtkohta. Saame selle idee kokku vĂ”tta: eesmĂ€rgi saavutamine ei ole lihtsalt jĂ€rgmine samm, vaid terviklik jada, kus mĂ”nikord on vajalik ette nĂ€ha mitu sammu, et teada, milline peaks olema esimene. Seda nimetatakse planeerimiseks. Marsruudi leidmist vĂ”ib pidada ĂŒheks planeerimise lisandiks. Meie Sense/Think/Act tsĂŒkli perspektiivist on see see, kus Think plaanib mitmeid tulevasi Act komponente.

KÀsitleme nÀidet lauamÀngust Magic: The Gathering. Meie kÀik alustab selliste kaartidega kÀes:

  • Swamp — annab 1 musta mannat (maa kaart).
  • Mets — annab 1 rohelise mana (maa kaart).
  • PĂ”genenud nĂ”id — nĂ”uab 1 sinist mana kutsumiseks.
  • Elfide mĂŒstik — nĂ”uab 1 rohelist mana kutsumiseks.

JĂ€tame viimased kolm kaarti tĂ€helepanuta, et asjad lihtsamaks teha. Reeglite jĂ€rgi on mĂ€ngijal lubatud mĂ€ngida 1 maa kaarti ĂŒhel kĂ€igul, ta vĂ”ib selle kaardi 'tapida', et saada mana, ja siis kasutada loitse (sealhulgas olendi kutsumist) nii palju kui tuleb mana. Selles olukorras teab inimesest mĂ€ngija, et peab mĂ€ngima Mets, 'tapima' 1 rohelise mana ja siis kutsuma Elfide mĂŒstiku. Kuid kuidas sellest mĂ€ngu AI-le teada anda?

Lihtne planeerimine

Triviaalne lĂ€henemine — proovida iga tegevust jĂ€rjestikku, kuni sobivaid enam ei jÀÀ. Kaartidele vaadates nĂ€eb AI, et saab mĂ€ngida Soost. Ja mĂ€ngib selle. Kas sellel kĂ€igul on veel muid tegevusi? Ta ei saa kutsuda ei Elfide mĂŒstikut ega pĂ”genenud nĂ”ida, kuna nende kutsumiseks on vastavalt vajalikud roheline ja sinine mana, aga Soost annab ainult musta mana. Ja ta ei saa enam mĂ€ngida Mets, kuna on juba mĂ€nginud Soost. Seega mĂ€ngis mĂ€ngu AI reeglite jĂ€rgi, kuid tegi seda halvasti. Seda saab parandada.

Planeerimine vÔib leida loetelu tegevustest, mis viivad mÀngu soovitud olekusse. Nii nagu iga ruut teel omas naabreid (teede leidmine), on igal tegevusel plaanis samuti naabrid vÔi jÀrgijad. Me saame neid tegevusi ja jÀrgmisi samme otsida, kuni saavutame soovitud oleku.

Meie nĂ€ites on soovitud tulemus „kutsuda olend, kui see on vĂ”imalik“. KĂ€igu alguses nĂ€eme vaid kahte vĂ”imalikku tegevust, mille mĂ€ngureeglid lubavad:

1. MÀngida Swamp (tulemus: Swamp mÀngus)
2. MÀngida Forest (tulemus: Forest mÀngus)

Iga tehtud tegevus vĂ”ib viia edasiste tegevusteni ja sulgeda teisi, uuesti mĂ€ngureeglite kohaselt. Kujutage ette, et mĂ€ngisime Swamp — see eemaldab Swamp jĂ€rgmise sammuna (me oleme selle juba mĂ€nginud), samuti eemaldab see Forest (sest reeglite jĂ€rgi saab ĂŒhe mĂ€ngimise kĂ€igus mĂ€ngida vaid ĂŒhe maakaardi). PĂ€rast seda lisab AI jĂ€rgmise sammu — 1 musta mana saamine, kuna teisi vĂ”imalusi pole. Kui ta jĂ€tkab ja valib Tap the Swamp, siis saab ta 1 musta mana ja ei saa sellega midagi teha.

1. MÀngida Swamp (tulemus: Swamp mÀngus)
1.1 «Tap» Soost (tulemus: Soost «tapped», +1 musta maagi ĂŒhik)
Ei ole saadaval tegevusi – LÕPP
2. MÀngida Forest (tulemus: Forest mÀngus)

Tegevuste nimekiri on lĂŒhike, oleme ummikusse jĂ”udnud. Korrake protsessi jĂ€rgmise tegevuse jaoks. Me mĂ€ngime Mets, avame tegevuse „saada 1 roheline maagi“, mis omakorda avab kolmanda tegevuse — Elvish Mystic'i kutse.

1. MÀngida Swamp (tulemus: Swamp mÀngus)
1.1 «Tap» Soost (tulemus: Soost «tapped», +1 musta maagi ĂŒhik)
Ei ole saadaval tegevusi – LÕPP
2. MÀngida Forest (tulemus: Forest mÀngus)
2.1 «Tap» Mets (tulemus: Mets «tapped», +1 roheline maagi ĂŒhik)
2.1.1 Kutse Elvish Mystic (tulemus: Elvish Mystic mĂ€ngus, -1 roheline maagi ĂŒhik)
Ei ole saadaval tegevusi – LÕPP

LÔpuks oleme uurinud kÔiki vÔimalikke tegevusi ja leidnud plaani, mis kutsub olendi.

See on vĂ€ga lihtsustatud nĂ€ide. Soovitav on valida parim vĂ”imalik plaan, mitte lihtsalt miski, mis vastab mĂ”ningatele kriteeriumidele. Üldiselt saab potentsiaalseid plaane hinnata lĂ”pptulemuse vĂ”i nende tĂ€itmisest saadava koguhinna pĂ”hjal. VĂ”ite endale teenida 1 punkti maakaartide mĂ€ngimise eest ja 3 punkti olendi vĂ€ljakutsumise eest. Soost mĂ€ngimine oleks plaan, mis annab 1 punkti. Kuid Mets → Tap the Mets → Elvish Mystic'i vĂ€ljakutsumine toob kohe 4 punkti.

Nii toimib Magic: The Gathering'i planeerimine, kuid sama loogika kehtib ka teistes olukordades. NĂ€iteks nihutada odavat, et vabastada ruumi elevandi kĂ€iguks malet. VĂ”i peituda seina taha, et XCOMis ohutult tulistada. Üldiselt saite aru.

Parandatud planeerimine

MĂ”nikord on liiga palju vĂ”imalikke tegevusi, et kaaluda iga vĂ”imalikku varianti. Tagasi tulles Magic: The Gathering'i nĂ€itena: oletame, et mĂ€ngus ja teil on kĂ€es mitu maakaarti ja olendit — vĂ”imalike kombinatsioonide arv vĂ”ib olla kĂŒmnete kaupa. Probleemi lahendamiseks on mitu vĂ”imalust.

Esimene meetod on backwards chaining (tagurpidi ahelate loomine). Selle asemel, et kĂ”iki kombinatsioone lĂ€bi töötada, on parem alustada lĂ”pptulemusest ja proovida leida otsene marsruut. Selle asemel, et liikuda puu juurest konkreetse leheni, liigume vastupidises suunas — lehelt juure poole. See meetod on lihtsam ja kiirem.

Kui vastasel on 1 elupunkt, saab leida plaani, et "tekitada 1 vÔi rohkem kahju". Selle saavutamiseks tuleb tÀita mitu tingimust:

1. Kahju vĂ”ib tekitada loits — see peab olema kĂ€es.
2. Loitsimise jaoks on vajalik mana.
3. Mana saamiseks tuleb mÀngida maakaart.
4. Maakaardi mÀngimiseks tuleb see olla kÀes.

Teine vĂ”imalus on best-first search (parim esimene otsing). Selle asemel, et uurida kĂ”iki teid, valime kĂ”ige sobivama. Enamasti annab see meetod optimaalse plaani ilma liigsete otsingukuludeta. A* on parima esimese otsingu vorm — uurides kĂ”ige lootustandvamaid marsruute algusest peale, vĂ”ib see leida parima tee ilma vajaduseta kontrollida ĂŒlejÀÀnud variante.

Üha populaarsem alternatiiv parim-eesotsas otsingule on Monte Carlo puuotsing. Selle asemel, et arvata, millised plaanid on parimad iga jĂ€rgmise tegevuse valimisel, valib algoritm igal sammul juhuslikke jĂ€reltulijaid, kuni jĂ”uab lĂ”puni (kui plaan viib vĂ”iduni vĂ”i kaotusele). SeejĂ€rel kasutatakse lĂ”pptulemust eelnevate valikute „kaalu“ tĂ”stmiseks vĂ”i langetamiseks. Korrates seda protsessi mitu korda jĂ€rjest, annab algoritm hea hinnangu, milline jĂ€rgmine samm on parem, isegi kui olukord muutub (kui vastane astub samme, et mĂ€ngijat takistada).

MĂ€ngude planeerimise narratiivis ei saa mööda Goal-Oriented Action Planning'ust ehk GOAP'ist (sihtsuunatud tegevuste planeerimine). See on laialdaselt kasutatav ja arutatav meetod, kuid lisaks mĂ”nele eristavale detailile on see pĂ”himĂ”tteliselt tagasikett, millest me varem rÀÀkisime. Kui ĂŒlesanne on „hĂ€vitada mĂ€ngija“ ja mĂ€ngija on varjatud, vĂ”ib plaan olla jĂ€rgnev: hĂ€vita granadiga → saa see kĂ€tte → viska.

Tavaliselt on mitmeid eesmĂ€rke, millest igaĂŒhel on oma prioriteet. Kui kĂ”rgeima prioriteediga eesmĂ€rk ei ole tĂ€idetav (kuna mĂ€ngija ei ole nĂ€htav, ei suuda ĂŒkski tegevuste kombinatsioon luua plaani "hĂ€vitada mĂ€ngijat"), pöördub tehisintellekt madalama prioriteediga eesmĂ€rkide juurde.

Koolitus ja kohandamine

Oleme juba maininud, et mÀngu tehisintellekt ei kasuta tavaliselt masinÔpet, kuna see ei sobi reaalajas agentide juhtimiseks. Kuid see ei tÀhenda, et sellest valdkonnast midagi laenata ei saa. Me tahame, et laskmismÀngus oleks vastane, kellelt saab Ôppida. NÀiteks teada parimad positsioonid kaardil. VÔi maadlusmÀngus, kus vastane blokeeriks tihti kasutatavaid mÀngijate kombotehnikaid, motiveerides kasutama teisi. Seega vÔib masinÔpe sellistes olukordades olla vÀga kasulik.

Statistika ja tÔenÀosused

Enne kui liigume keerukate nĂ€idete juurde, arutame, kui kaugele me saame minna, tehes mĂ”ned lihtsad mÔÔtmised ja kasutades neid otsuste tegemiseks. NĂ€iteks reaalajas strateegia — kuidas saame mÀÀrata, kas mĂ€ngija suudab mĂ€ngu esimestel minutitel rĂŒnnaku alustada ja millise kaitse selle vastu valmistada? Saame uurida mĂ€ngija varasemaid kogemusi, et mĂ”ista, milline vĂ”ib olla tema tulevane reaktsioon. Alguses ei ole meil selliseid algandmeid, kuid me saame neid koguda — iga kord, kui IA mĂ€ngib inimese vastu, saab ta registreerida esimese rĂŒnnaku aja. PĂ€rast mitmeid seansse saame keskmise aja, mille jooksul mĂ€ngija tulevikus rĂŒndab.

Keskmiste vÀÀrtustega on aga probleem: kui mĂ€ngija 20 korda „kiirusest” mĂ€ngib ja 20 korda aeglaselt, siis vajalikud vÀÀrtused asuvad kuskil keskel, mis ei paku meile midagi kasulikku. Üks lahendus on sisendandmete piiramine - saame arvesse vĂ”tta viimased 20 juhtumit.

Sarnast lĂ€henemist kasutatakse teatud tegevuste tĂ”enĂ€osuse hindamisel, eeldades, et mĂ€ngija varasemad eelistused jÀÀvad tulevikus samaks. Kui mĂ€ngija rĂŒndab meid viis korda tulepalliga, kaks korda vĂ€lguga ja ĂŒks kord lĂ€hivĂ”itlusena, on ilmselge, et ta eelistab tulepalli. Ekstrapoleerime ja nĂ€eme erineva relvastuse kasutamise tĂ”enĂ€osust: tulepall=62,5%, vĂ€lk=25% ja lĂ€hivĂ”itlus=12,5%. Meie mĂ€ngu AI peab valmistuma tule eest kaitsmiseks.

Teine huvitav meetod on kasutada Naive Bayes Classifier (naivne Bayesi klassifikaator) suurte andmemahtude uurimiseks ja olukorra klassifitseerimiseks, et tehisintellekt saaks Ă”igesti reageerida. Bayesi klassifikaatoreid tuntakse enim e-kirjade rĂ€mpsposti filtrite kasutamise tĂ”ttu. Need uurivad sĂ”nu, vĂ”rreldes neid varasemate esinemistega (kas rĂ€mpspostis vĂ”i mitte) ja teevad jĂ€reldusi saabuvate kirjade kohta. Saame sama teha, isegi vĂ€iksema sisendi hulgaga. KĂ”ikide kasulike andmete pĂ”hjal, mida tehisintellekt nĂ€eb (nĂ€iteks milliseid vaenulikke ĂŒksusi on loodud, milliseid loitse kasutatakse vĂ”i milliseid tehnoloogiaid uuritakse) ja lĂ”pptulemus (sĂ”da vĂ”i rahu, „rĂŒndamine” vĂ”i kaitsmine jne) — valime tehisintellekti jaoks sobiva kĂ€itumise.

KÔik need Ôppeviisid on piisavad, kuid soovitatav on kasutada neid testimise kÀigus kogutud andmete pÔhjal. Tehisintellekt Ôpib kohanduma erinevate strateegiatega, mida on kasutanud teie mÀngijate testijad. Tehisintellekt, mis kohandub mÀngijaga pÀrast vÀljaandmist, vÔib muutuda liiga ettearvatavaks vÔi vastupidi, liiga raskeks vÔita.

Kohandamine vÀÀrtuste pÔhjal

Arvestades meie mÀngumaailma ja reeglite tÀitmist, saame muuta vÀÀrtuste kogumit, mis mÔjutab otsuste tegemist, mitte lihtsalt kasutada sisendandmeid. Teeme nii:

  • Lubame tehisintellektil koguda andmeid maailma seisundist ja olulistest sĂŒndmustest mĂ€ngu ajal (nagu ĂŒlalpool kirjeldatud).
  • Muudame mĂ”ningaid olulisi vÀÀrtusi (value) nende andmete pĂ”hjal.
  • Rakendame oma otsuseid, mis pĂ”hinevad nende vÀÀrtuste töötlemisel vĂ”i hindamisel.

NĂ€iteks agent saab valida mitme toa vahel esmaklassilise tulistamismĂ€ngu kaardil. Igal toal on oma value, mis mÀÀrab, kui soovitav see kĂŒlastamiseks on. Tehisintellekt valib juhuslikult, millisesse tuppa minna, lĂ€htudes value'ist. SeejĂ€rel mĂ€letab agent, millises toas ta tapeti, ja vĂ€hendab selle value't (tĂ”enĂ€osust, et ta sinna tagasi pöördub). Sama kehtib vastupidise olukorra puhul — kui agent hĂ€vitab palju vastaseid, siis toa value suureneb.

Markovi mudel

Kuidas oleks, kui kasutaksime kogutud andmeid prognoosimiseks? Kui mÀrkida iga toa, kus nÀeme mÀngijat teatud aja jooksul, siis oskame prognoosida, millisesse tuppa mÀngija vÔib minna. JÀlgides ja salvestades mÀngija liikumisi tubades (values), saame neid ennustada.

VÔtame kolm tuba: punane, roheline ja sinine. Samuti vaatame tÀhelepanekuid, mida oleme kogunud mÀngu sessiooni jÀlgimise kÀigus:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Iga toa jĂ€lgimise arv on peaaegu ĂŒhesugune - kus luua hea peidupaik, me ikka veel ei tea. Statistika kogumist raskendab ka mĂ€ngijate respawn, kes ilmuvad kaardil ĂŒhtlaselt. Kuid andmed jĂ€rgmise toa kohta, kuhu nad pĂ€rast kaardile ilmumist sisenevad, on juba kasulikud.

On nÀha, et roheline tuba meeldib mÀngijatele - enamus punase toa inimesi liigub sinna, kellest 50% jÀÀb sinna edasi. Sinine tuba on vastupidiselt ebaÔnnestunud, sinna peaaegu ei minda, aga kui minnakse, siis ei peeta seal kaua aega.

Kuid andmed rÀÀgivad meile midagi veel olulisemat — kui mĂ€ngija viibib sinises toas, on jĂ€rgmine tuba, kus me teda tĂ”enĂ€oliselt nĂ€eme, punane, mitte roheline. Kuigi roheline tuba on populaarsem kui punane, muutub olukord sinises toas viibides. JĂ€rgmine seisund (st tuba, kuhu mĂ€ngija liigub) sĂ”ltub eelnevast seisundist (st toast, kus mĂ€ngija hetkel viibib). Seoste uuringu tĂ”ttu saame teha tĂ€psemaid prognoose, kui kui arvutaksime vaatlusandmeid iseseisvalt.

Mine minevikus toimunud andmete pĂ”hjal tuleviku seisundi ennustamist nimetatakse Markovi mudeliks (Markov model), ning selliseid nĂ€iteid (tubadega) nimetatakse Markovi ahelateks. Kuna mudelid esindavad tĂ”enĂ€osust muutuste vahel jĂ€rjestikustes seisundites, kuvatakse need visuaalselt FSM-ina, kus iga ĂŒleminekuga kaasneb tĂ”enĂ€osus. Varem oleme kasutanud FSM-i agendi kĂ€itumisseisundi esitlemiseks, kuid see kontseptsioon laieneb kĂ”ikidele seisunditele, olenemata sellest, kas need on seotud agendiga vĂ”i mitte. Sellisel juhul esindavad seisundid tuba, kus agent viibib:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

See on lihtne variant suhtepÀrase tÔenÀosuse muutuste esitlemiseks, andes AI-le vÔimaluse ennustada jÀrgmist seisundit. Saame ennustada mitmeid samme ette.

Kui mÀngija on rohelises toas, on 50% tÔenÀosus, et ta jÀÀb sinna ka jÀrgmisel vaatlusel. Aga kui suur on tÔenÀosus, et ta on seal isegi pÀrast seda? On olemas mitte ainult tÔenÀosus, et mÀngija jÀi rohelisse tuppa pÀrast kahte vaatlust, vaid ka vÔimalus, et ta lahkus ja tuli tagasi. Siin on uus tabel, mis arvestab uusi andmeid:

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend

Sellest nĂ€htub, et tĂ”enĂ€osus nĂ€ha mĂ€ngijat rohelises toas pĂ€rast kahte vaatlust on 51% — 21%, et ta tuli punasest toast, 5% sellest, et mĂ€ngija kĂŒlastab sinist tuba nende vahel, ja 25%, et mĂ€ngija ei lahku ĂŒldse rohelisest toast.

Tabel on lihtsalt visuaalne tööriist - protseduur nĂ”uab vaid tĂ”enĂ€osuste korrutamist igas etapis. See tĂ€hendab, et saate vaadata kaugele tulevikku, ĂŒhe reservatsiooniga: me eeldame, et sisenemise vĂ”imalus ruumi sĂ”ltub tĂ€ielikult praegusest ruumist. Seda nimetatakse Markovi omaduseks (Markov Property) - tulevane seisund sĂ”ltub ainult olevikust. Kuid see ei ole 100% tĂ€pne. MĂ€ngijad vĂ”ivad teha otsuseid sĂ”ltuvalt muudest teguritest: tervise tasemest vĂ”i muude laskemoona kogusest. Kuna me neid vÀÀrtusi ei fikseeri, on meie prognoosid vĂ€hem tĂ€psed.

N-Gramid

Aga mis saab nĂ€iteks nĂ€itest vĂ”itlusmĂ€ngust ja mĂ€ngija kombo-move ennustamisest? Sama asi! Kuid ĂŒhe seisundi vĂ”i sĂŒndmuse asemel uurime terveid jĂ€rjestusi, millest kombo-löök koosneb.

Üks viis seda teha on salvestada iga sisend (nt Kick, Punch vĂ”i Block) vahemuisti ja salvestada kogu vahemĂ€lu ĂŒhe sĂŒndmusena. Nii et mĂ€ngija vajutab korduvalt Kick, Kick, Punch, et kasutada rĂŒnnakut SuperDeathFist, AI sĂŒsteem salvestab kĂ”ik sisendid vahemuisti ja mĂ€letab viimaseid kolme, mida kasutatakse igas etapis.

Kuidas luua mÀngu tehisintellekti: algajatele mÔeldud juhend
(Rasvīti rādījumi tiek parādīti, kad spēlētājs uzsāk SuperDeathFist uzbrukumu.)

MākslÄ«gais intelekts redzēs visas iespējas, kad spēlētājs izvēlas Kick, pēc tam vēl vienu Kick, un beigās pamanÄ«s, ka nākamais ievads vienmēr ir Punch. Tas ÄŒaus aÄŁentam prognozēt SuperDeathFist kombinācijas un bloķēt to, ja tas ir iespējams.

Ć Ä«s notikumu secÄ«bas sauc par N-gramām, kur N ir saglabāto elementu skaits. Iepriekơējā piemērā tas bija 3-grama (trigramma), kas nozÄ«mē: pirmās divas ieraksti tiek izmantoti, lai prognozētu treĆĄo. Tādējādi 5-gramā pirmie četri ieraksti paredz piekto un tā tālāk.

Izstrādātājam rĆ«pÄ«gi jāizvēlas N-gramu izmērs. Mazāks N skaits prasa mazāk atmiƆas, bet arÄ« glabā mazāku vēsturi. Piemēram, 2-grama (bigramma) pierakstÄ«s Kick, Kick vai Kick, Punch, bet nespēs uzglabāt Kick, Kick, Punch, tādēČ mākslÄ«gais intelekts nereaģēs uz SuperDeathFist kombināciju.

Teiselt poolt nÔuavad suured numbrid rohkem mÀlu ning AI-l on keerulisem Ôppida, kuna vÔimalike variantide arv suureneb oluliselt. Kui teil oli kolm vÔimalikku sisendit: Kick, Punch vÔi Block, ja me kasutasime 10-grammi, siis saame umbes 60 tuhat erinevat varianti.

Bigrammimudel on lihtne Markovi ahel — iga paar "eelmine seisund/praegune seisund" on bigramm, ning saate ennustada teist seisundit esimese pĂ”hjal. 3-grammid ja suuremad N-grammid vĂ”ib samuti kĂ€sitleda kui Markovi ahelaid, kus kĂ”ik elemendid (vĂ€lja arvatud viimane N-grammis) koos moodustavad esimese seisundi, ja viimane element — teise. NĂ€ide vĂ”itlusmĂ€ngust nĂ€itab ĂŒlemineku vĂ”imalust olukorrast Kick ja Kick olukorda Kick ja Punch. Vaadates mitmeid sisendi ajalugu kirjeid kui ĂŒhtset ĂŒksust, muudame sisendisegu pĂ”himĂ”tteliselt osaks terviklikust seisundist. See annab meile Markovi omaduse, mis vĂ”imaldab kasutada Markovi ahelaid jĂ€rgmise sisendi ennustamiseks ja arvata, milline kombo kĂ€ik jĂ€rgmiseks tuleb.

KokkuvÔte

RÀÀkisime kĂ”ige levinumatest tööriistadest ja lĂ€henemistest tehisintellekti arendamisel. Samuti vaatasime ĂŒle olukorrad, kus neid tuleks rakendada ja kus need eriti kasulikud on.

Seda peaks olema piisavalt, et mÔista pÔhiteemasid mÀngu tehisintellektis. Kuid see ei ole muidugi kaugeltki kÔik meetodid. VÀhem tuntud, kuid mitte vÀhem efektiivsed on:

  • optimeerimisalgoritmid, sealhulgas mĂ€est ĂŒles ronimine, gradientne allakĂ€ik ja geneetilised algoritmid
  • konkurentsi otsingu/planeerimise algoritmid (minimax ja alfa-beeta kĂ€rpimine)
  • klassifitseerimismeetodid (perceptroonid, nĂ€rvivĂ”rgud ja tugivektorite masinad)
  • agentide tajumise ja mĂ€lu töötlemise sĂŒsteemid
  • tehisintellekti arhitektuuri lĂ€henemised (hĂŒbriidsĂŒsteemid, arhitektuuride alamhulged ja muud tehisintellekti sĂŒsteemide ĂŒlevĂ”tmise viisid)
  • animatsioonitööriistad (liikumise planeerimine ja sĂŒnkroniseerimine)
  • toimefaktorid (detailide tase, anytime algoritmid ja timeslicing)

Teemaga seotud Interneti-ressursid:

1. GameDev.net-l on osi artiklite ja Ôpetustega tehisintellekti kohta, samuti projekti foorum,.
2. AiGameDev.com pakub palju esitlusi ja artikleid laia valiku mÀngu tehisintellekti arendamisega seotud teemadel.
3. GDC Vault sisaldab GDC AI tippseminari teemasid, millest paljusid on tasuta saadaval.
4. Kasulikke materjale leiate ka veebisaidilt AI MĂ€ngu Arendajate Gild.
5. Tommy Thompson, tehisintellekti teadlane ja mÀnguarendaja, teeb YouTube'i kanalis videoid AI ja MÀngud selgitustega ja tehisintellekti uurimisega kommerts mÀngudes.

Teemaga seotud raamatud:

1. Game AI Pro raamatute seeria koosneb lĂŒhikesi artikleid sisaldavatest kogumikest, mis selgitavad, kuidas rakendada konkreetseid funktsioone vĂ”i kuidas lahendada konkreetseid probleeme.

Game AI Pro: Kogutud Tarkus MĂ€ngu AI Professionaalidelt
Game AI Pro 2: Kogutud Tarkus MĂ€ngu AI Professionaalidelt
Game AI Pro 3: Kogutud Tarkus MĂ€ngu AI Professionaalidelt

2. AI MĂ€ngu Programmeerimise Tarkuse seeria — eelkĂ€ija Game AI Pro seeriale. Seal on vanemaid meetodeid, kuid peaaegu kĂ”ik on tĂ€napĂ€evani aktuaalsed.

AI MĂ€ngu Programmeerimise Tarkus 1
AI MĂ€ngu Programmeerimise Tarkus 2
AI MĂ€ngu Programmeerimise Tarkus 3
AI MĂ€ngu Programmeerimise Tarkus 4

3. Tehisintellekt: Kaasaegne LĂ€henemine — on ĂŒks pĂ”hiteoseid kĂ”ikidele, kes soovivad mĂ”ista tehisintellekti laiemat valdkonda. See raamat ei kĂ€sitle mĂ€ngu arendamist — see Ă”petab tehisintellekti pĂ”hialuseid.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster