Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Ég rakst á áhugavert efni um gervigreind í leikjum. Með útskýringu á grundvallaratriðum um gervigreind með einföldum dæmum, og inni eru mörg gagnleg verkfæri og aðferðir fyrir þægilega þróun og hönnun þess. Hvernig, hvar og hvenær á að nota þau er líka til staðar.

Flest dæmin eru skrifuð í gervikóða, þannig að ekki er þörf á háþróaðri forritunarþekkingu. Undir skurðinum eru 35 blöð af texta með myndum og gifs, svo vertu tilbúinn.

UPD. Ég biðst afsökunar, en ég hef þegar gert mína eigin þýðingu á þessari grein á Habré PatientZero. Þú getur lesið útgáfu hans hér, en einhverra hluta vegna fór greinin framhjá mér (ég notaði leitina, en eitthvað fór úrskeiðis). Og þar sem ég er að skrifa á blogg sem er tileinkað þróun leikja ákvað ég að láta útgáfuna mína af þýðingunni eftir fyrir áskrifendur (sumir punktar eru öðruvísi sniðnir, sumum var vísvitandi sleppt að ráði þróunaraðilanna).

Hvað er gervigreind?

Game AI einbeitir sér að því hvaða aðgerðir hlutur ætti að framkvæma miðað við aðstæður þar sem hann er staðsettur. Þetta er almennt nefnt „greindur umboðsmaður“ stjórnun, þar sem umboðsmaður er leikmannspersóna, farartæki, vélmenni eða stundum eitthvað meira abstrakt: heill hópur aðila eða jafnvel siðmenning. Í hverju tilviki er það hlutur sem verður að sjá umhverfi sitt, taka ákvarðanir út frá því og starfa í samræmi við þær. Þetta er kallað Sense/Think/Act hringrás:

  • Skyn: Umboðsmaðurinn finnur eða fær upplýsingar um hluti í umhverfi sínu sem geta haft áhrif á hegðun hans (ógnir í nágrenninu, hlutir sem þarf að safna, áhugaverða staði til að skoða).
  • Hugsaðu: Umboðsmaðurinn ákveður hvernig hann bregst við (hugsar hvort það sé nógu öruggt að safna hlutum eða hvort hann eigi að berjast/fela sig fyrst).
  • Gera: umboðsmaðurinn framkvæmir aðgerðir til að framkvæma fyrri ákvörðun (byrjar að fara í átt að óvininum eða hlutnum).
  • ...nú hefur ástandið breyst vegna athafna persónanna, þannig að hringrásin endurtekur sig með nýjum gögnum.

AI hefur tilhneigingu til að einbeita sér að Sense hluta lykkjunnar. Til dæmis taka sjálfstýrðir bílar myndir af veginum, sameina þær við radar- og lidargögn og túlka þær. Þetta er venjulega gert með vélanámi, sem vinnur úr innkomnum gögnum og gefur þeim merkingu, dregur út merkingarupplýsingar eins og „það er annar bíll 20 metrum á undan þér. Þetta eru svokölluð flokkunarvandamál.

Leikir þurfa ekki flókið kerfi til að vinna út upplýsingar, þar sem flest gögnin eru þegar órjúfanlegur hluti þeirra. Það er engin þörf á að keyra myndgreiningarreiknirit til að ákvarða hvort það sé óvinur framundan – leikurinn veit nú þegar og færir upplýsingarnar beint inn í ákvarðanatökuferlið. Þess vegna er Sense hluti hringrásarinnar oft miklu einfaldari en Hugsa og bregðast við.

Takmarkanir leiks AI

AI hefur fjölda takmarkana sem þarf að fylgjast með:

  • Gervigreind þarf ekki að þjálfa fyrirfram, eins og það væri vélrænt reiknirit. Það þýðir ekkert að skrifa taugakerfi meðan á þróun stendur til að fylgjast með tugum þúsunda leikmanna og læra hvernig best er að spila á móti þeim. Hvers vegna? Vegna þess að leikurinn hefur ekki verið gefinn út og það eru engir leikmenn.
  • Leikurinn ætti að vera skemmtilegur og krefjandi, svo umboðsmenn ættu ekki að finna bestu nálgunina gegn fólki.
  • Umboðsmenn þurfa að líta raunsæir út svo að leikmönnum líði eins og þeir séu að spila á móti raunverulegu fólki. AlphaGo forritið fór fram úr mönnum, en skrefin sem voru valin voru mjög langt frá hefðbundnum skilningi á leiknum. Ef leikurinn líkir eftir mannlegum andstæðingi ætti þessi tilfinning ekki að vera til. Það þarf að breyta reikniritinu þannig að það taki trúverðugar ákvarðanir fremur en hugsjónir.
  • AI verður að virka í rauntíma. Þetta þýðir að reikniritið getur ekki einokað örgjörvanotkun í langan tíma til að taka ákvarðanir. Jafnvel 10 millisekúndur eru of langur tími, því flestir leikir þurfa aðeins 16 til 33 millisekúndur til að vinna alla vinnsluna og fara yfir í næsta grafíkramma.
  • Helst ætti að minnsta kosti hluti kerfisins að vera gagnadrifinn, svo að þeir sem ekki eru kóðaðir geti gert breytingar og aðlögun geti gerst hraðar.

Við skulum skoða gervigreindaraðferðir sem ná yfir allan Sense/Think/Act hringrásina.

Að taka grunnákvarðanir

Byrjum á einfaldasta leiknum - Pong. Markmið: hreyfðu spaðann þannig að boltinn hoppi af honum frekar en að fljúga framhjá honum. Þetta er eins og tennis, þar sem þú tapar ef þú slær ekki boltann. Hér hefur gervigreindin tiltölulega auðvelt verkefni - að ákveða í hvaða átt á að færa pallinn.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Skilyrt yfirlýsingar

Fyrir gervigreind í Pong er augljósasta lausnin að reyna alltaf að setja pallinn undir boltann.

Einfalt reiknirit fyrir þetta, skrifað í gervikóða:

hvern ramma/uppfærslu á meðan leikurinn er í gangi:
ef boltinn er vinstra megin við róðurinn:
færa spaðann til vinstri
annað ef boltinn er hægra megin við róðurinn:
færa spaðann til hægri

Ef pallurinn hreyfist á hraða boltans, þá er þetta tilvalið reiknirit fyrir gervigreind í Pong. Það er engin þörf á að flækja neitt ef það eru ekki svo mikil gögn og mögulegar aðgerðir fyrir umboðsmanninn.

Þessi nálgun er svo einföld að allt skynjun/hugsa/athafna hringrás er varla áberandi. En það er þarna:

  • Sense hlutinn er í tvennu ef staðhæfingar. Leikurinn veit hvar boltinn er og hvar pallurinn er, svo gervigreindin leitar til hans fyrir þessar upplýsingar.
  • Hugsa hluti er einnig innifalinn í tveimur ef yfirlýsingum. Þau fela í sér tvær lausnir sem í þessu tilfelli útiloka hvor aðra. Fyrir vikið er ein af þremur aðgerðum valin - færðu pallinn til vinstri, færðu hann til hægri eða gerðu ekkert ef hann er þegar rétt staðsettur.
  • Lagahlutinn er að finna í yfirlýsingunum Move Paddle Left og Move Paddle Right. Það fer eftir leikhönnuninni, þeir geta fært pallinn samstundis eða á ákveðnum hraða.

Slíkar aðferðir eru kallaðar viðbrögð - það er einfalt sett af reglum (í þessu tilfelli ef staðhæfingar í kóðanum) sem bregðast við núverandi ástandi heimsins og grípa til aðgerða.

Ákvörðunartré

Pong dæmið jafngildir í raun formlegu gervigreindarhugtaki sem kallast ákvörðunartré. Reikniritið fer í gegnum það til að ná „blaði“ - ákvörðun um til hvaða aðgerða á að grípa.

Gerum blokkarmynd af ákvörðunartrénu fyrir reiknirit vettvangsins okkar:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Hver hluti trésins er kallaður hnút - gervigreind notar graffræði til að lýsa slíkum mannvirkjum. Það eru tvær tegundir af hnútum:

  • Ákvörðunarhnútar: að velja á milli tveggja valkosta byggt á því að prófa einhver skilyrði, þar sem hver valkostur er sýndur sem sérstakur hnútur.
  • Lokahnútar: Aðgerðin sem á að framkvæma sem táknar endanlega ákvörðun.

Reikniritið byrjar frá fyrsta hnút („rót“ trésins). Það tekur annað hvort ákvörðun um hvaða barnhnút á að fara í, eða það framkvæmir aðgerðina sem er geymd í hnútnum og hættir.

Hver er ávinningurinn af því að láta ákvarðanatré vinna sama starf og ef staðhæfingarnar í fyrri hlutanum? Hér er almennt kerfi þar sem hver ákvörðun hefur aðeins eitt skilyrði og tvær mögulegar niðurstöður. Þetta gerir verktaki kleift að búa til gervigreind úr gögnum sem tákna ákvarðanir í tré án þess að þurfa að harðkóða það. Við skulum kynna það í formi töflu:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Á kóðahliðinni færðu kerfi til að lesa strengi. Búðu til hnút fyrir hvern þeirra, tengdu ákvörðunarrökfræði byggða á öðrum dálknum og undirhnúta byggða á þriðja og fjórða dálknum. Þú þarft samt að forrita skilyrðin og aðgerðir, en nú verður uppbygging leiksins flóknari. Hér bætir þú við viðbótarákvörðunum og aðgerðum og sérsníða síðan alla gervigreindina með því einfaldlega að breyta tréskilgreiningartextaskránni. Næst flytur þú skrána til leikjahönnuðarins, sem getur breytt hegðuninni án þess að setja leikinn aftur saman eða breyta kóðanum.

Ákvörðunartré eru mjög gagnleg þegar þau eru byggð sjálfkrafa úr stóru safni dæma (til dæmis með því að nota ID3 reiknirit). Þetta gerir þau að áhrifaríku og afkastamiklu tæki til að flokka aðstæður út frá gögnunum sem aflað er. Hins vegar förum við lengra en einfalt kerfi fyrir umboðsmenn til að velja aðgerðir.

Sviðsmyndir

Við greindum ákvörðunartréskerfi sem notaði fyrirfram búnar aðstæður og aðgerðir. Sá sem hannar gervigreind getur skipulagt tréð eins og hann vill, en hann þarf samt að treysta á kóðara sem forritaði þetta allt. Hvað ef við gætum gefið hönnuðinum verkfæri til að skapa sínar eigin aðstæður eða aðgerðir?

Til að forritarinn þurfi ekki að skrifa kóða fyrir skilyrðin Is Ball Left Of Paddle og Is Ball Right Of Paddle, getur hann búið til kerfi þar sem hönnuðurinn skrifar skilyrði til að athuga þessi gildi. Þá munu ákvörðunartrésgögnin líta svona út:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Þetta er í meginatriðum það sama og í fyrstu töflunni, en lausnirnar í sjálfum sér hafa sinn eigin kóða, svolítið eins og skilyrti hluti ef-yfirlýsingar. Á kóðahliðinni myndi þetta lesa í öðrum dálki fyrir ákvörðunarhnúta, en í stað þess að leita að ákveðnu skilyrði til að framkvæma (Er Ball Left Of Paddle), metur það skilyrtu tjáninguna og skilar satt eða ósatt í samræmi við það. Þetta er gert með Lua eða Angelscript forskriftarmálinu. Með því að nota þá getur verktaki tekið hluti í leik sínum (bolti og róðrarspaði) og búið til breytur sem verða tiltækar í handritinu (ball.position). Einnig er forskriftarmálið einfaldara en C++. Það krefst ekki fulls samantektarstigs, svo það er tilvalið til að stilla leikjafræði fljótt og gerir „ekki kóðara“ kleift að búa til nauðsynlegar aðgerðir sjálfir.

Í dæminu hér að ofan er forskriftarmálið aðeins notað til að meta skilyrtu tjáninguna, en það er líka hægt að nota það fyrir aðgerðir. Til dæmis gætu gögnin Move Paddle Right orðið að forskriftaryfirlýsingu (ball.position.x += 10). Þannig að aðgerðin er einnig skilgreind í handritinu, án þess að þurfa að forrita Move Paddle Right.

Þú getur gengið enn lengra og skrifað allt ákvörðunartréð á forskriftarmáli. Þetta verður kóða í formi harðkóðuðra skilyrtra yfirlýsinga, en þær verða staðsettar í utanaðkomandi skriftuskrám, það er hægt að breyta þeim án þess að setja allt forritið saman aftur. Þú getur oft breytt handritaskránni meðan á spilun stendur til að prófa mismunandi gervigreind viðbrögð fljótt.

Viðburðarviðbrögð

Dæmin hér að ofan eru fullkomin fyrir Pong. Þeir keyra stöðugt Sense/Think/Act hringrásina og starfa út frá nýjustu ástandi heimsins. En í flóknari leikjum þarftu að bregðast við einstökum atburðum og ekki meta allt í einu. Pong í þessu tilfelli er nú þegar slæmt dæmi. Við skulum velja annan.

Ímyndaðu þér skotleik þar sem óvinirnir eru hreyfingarlausir þar til þeir finna leikmanninn, eftir það bregðast þeir við eftir „sérhæfingu“ þeirra: einhver mun hlaupa til að „þrjóta“, einhver mun ráðast á fjarska. Þetta er samt grunnviðbragðskerfi - "ef leikmaður sést, gerðu eitthvað" - en það er rökrétt hægt að skipta því niður í atburð sem sést leikmaður og viðbrögð (velja svar og framkvæma það).

Þetta færir okkur aftur til Sense/Think/Act hringrásarinnar. Við getum kóðað Sense hluta sem mun athuga hvern ramma hvort gervigreind sér spilarann. Ef ekki gerist ekkert, en ef það sér, þá er Player Seen viðburðurinn búinn til. Kóðinn mun hafa sérstakan hluta sem segir "þegar Player Seen atburðurinn á sér stað, gerðu" hvar er svarið sem þú þarft til að taka á Think og Act hlutanum. Þannig muntu setja upp viðbrögð við Player Seen atburðinum: fyrir „þrjótandi“ persónuna - ChargeAndAttack, og fyrir leyniskyttuna - HideAndSnipe. Hægt er að búa til þessi tengsl í gagnaskránni til að hægt sé að breyta þeim hratt án þess að þurfa að setja saman aftur. Einnig er hægt að nota skriftarmál hér.

Að taka erfiðar ákvarðanir

Þó einföld viðbragðskerfi séu mjög öflug eru margar aðstæður þar sem þau duga ekki. Stundum þarf að taka mismunandi ákvarðanir út frá því sem umboðsmaðurinn er að gera núna, en það er erfitt að ímynda sér þetta sem skilyrði. Stundum eru of mörg skilyrði til að tákna þau á áhrifaríkan hátt í ákvörðunartré eða handriti. Stundum þarf að meta fyrirfram hvernig ástandið mun breytast áður en þú tekur ákvörðun um næsta skref. Það þarf flóknari aðferðir til að leysa þessi vandamál.

Endanlegt ástand vél

Endanlegt ástand vél eða FSM (endanlegt ástand vél) er leið til að segja að umboðsmaður okkar sé sem stendur í einu af nokkrum mögulegum ríkjum og að það geti skipt úr einu ástandi í annað. Það er ákveðinn fjöldi slíkra ríkja - þess vegna nafnið. Besta dæmið úr lífinu er umferðarljós. Það eru mismunandi röð ljósa á mismunandi stöðum, en meginreglan er sú sama - hvert ástand táknar eitthvað (stopp, ganga, osfrv.). Umferðarljós er aðeins í einu ástandi á hverjum tíma og færist úr einu í annað byggt á einföldum reglum.

Það er svipuð saga með NPC í leikjum. Við skulum til dæmis taka vörð með eftirfarandi ríkjum:

  • Vaktaeftirlit.
  • Árásir.
  • Á flótta.

Og þessi skilyrði til að breyta ástandi þess:

  • Ef vörðurinn sér óvininn ræðst hann.
  • Ef vörðurinn ræðst á en sér ekki lengur óvininn fer hann aftur til eftirlits.
  • Ef vörður ræðst á en er illa særður, þá hleypur hann í burtu.

Þú getur líka skrifað ef-yfirlýsingar með breytu um verndarástand og ýmsar athuganir: er óvinur í nágrenninu, hvert er heilsustig NPC o.s.frv. Bætum við nokkrum ríkjum í viðbót:

  • Athafnaleysi - á milli eftirlitsferða.
  • Leit - þegar sá óvinur er horfinn.
  • Að finna hjálp - þegar óvinur sést, en er of sterkur til að berjast einn.

Valið fyrir hvern þeirra er takmarkað - til dæmis mun vörðurinn ekki leita að földum óvini ef hann er heilsulítill.

Eftir allt saman, það er risastór listi yfir "ef" , Það " getur orðið of fyrirferðarmikill, svo við þurfum að formfesta aðferð sem gerir okkur kleift að hafa ríki og umskipti milli ríkja í huga. Til að gera þetta tökum við tillit til allra ríkjanna og undir hverju ríki skrifum við niður á lista allar umbreytingar til annarra ríkja ásamt þeim skilyrðum sem nauðsynleg eru fyrir þau.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Þetta er ástandsskiptatafla - alhliða leið til að tákna FSM. Teiknum skýringarmynd og fáum heildaryfirsýn yfir hvernig NPC hegðun breytist.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Skýringarmyndin endurspeglar kjarna ákvarðanatöku fyrir þennan umboðsmann miðað við núverandi aðstæður. Þar að auki sýnir hver ör umskipti á milli ríkja ef ástandið við hliðina er satt.

Hver uppfærsla við athugum núverandi stöðu umboðsmannsins, skoðum listann yfir umskipti, og ef skilyrði fyrir umskiptin eru uppfyllt, samþykkir það nýja ástandið. Til dæmis athugar hver rammi hvort 10 sekúndna tímamælirinn sé útrunninn og ef svo er fer vörðurinn úr aðgerðalausu ástandi yfir í eftirlit. Á sama hátt athugar árásarríkið heilsu umboðsmannsins - ef það er lágt fer það í flóttaríkið.

Þetta er að meðhöndla umskipti milli ríkja, en hvað með hegðun sem tengist ríkjunum sjálfum? Hvað varðar útfærslu á raunverulegri hegðun fyrir tiltekið ríki, þá eru venjulega tvær tegundir af „krók“ þar sem við úthlutum aðgerðum til FSM:

  • Aðgerðir sem við framkvæmum reglulega fyrir núverandi ástand.
  • Aðgerðirnar sem við grípum til þegar við förum úr einu ríki í annað.

Dæmi fyrir fyrstu gerð. Eftirlitsríkið mun færa umboðsmann eftir eftirlitsleiðinni fyrir hvern ramma. Árásarríkið mun reyna að hefja árás fyrir hvern ramma eða skipta yfir í ástand þar sem það er mögulegt.

Fyrir seinni tegundina skaltu íhuga umskiptin „ef óvinurinn er sýnilegur og óvinurinn er of sterkur, farðu þá í Finding Help ástandið. Umboðsmaðurinn verður að velja hvert á að leita til að leita aðstoðar og geyma þessar upplýsingar þannig að ríkið að finna hjálp viti hvert það á að fara. Þegar hjálp hefur fundist fer umboðsmaðurinn aftur í árásarríkið. Á þessum tímapunkti mun hann vilja segja bandamanninum frá hótuninni, þannig að NotifyFriendOfThreat aðgerðin gæti átt sér stað.

Enn og aftur getum við horft á þetta kerfi í gegnum linsu skynjun/hugsa/athafna hringrásarinnar. Skyn er fólgin í gögnunum sem umbreytingarrökfræðin notar. Hugsaðu - umskipti í boði í hverju ríki. Og lögin eru framkvæmd með aðgerðum sem gerðar eru reglulega innan ríkis eða við umskipti milli ríkja.

Stundum getur stöðugt verið kostnaðarsamt að skoða aðlögunarskilyrði. Til dæmis, ef hver umboðsmaður framkvæmir flókna útreikninga á hverjum ramma til að ákvarða hvort hann geti séð óvini og skilið hvort hann geti skipt úr eftirlits- yfir í árásarástand, mun þetta taka mikinn CPU-tíma.

Líta má á mikilvægar breytingar á ástandi heimsins sem atburði sem verða unnin um leið og þeir gerast. Í stað þess að FSM athugar breytingaskilyrðið „getur umboðsmaður minn séð spilarann?“ í hverjum ramma, er hægt að stilla sérstakt kerfi til að athuga sjaldnar (t.d. 5 sinnum á sekúndu). Og niðurstaðan er að gefa út Player Seen þegar ávísunin stenst.

Þetta er sent til FSM, sem ætti nú að fara í Player Seen viðburð móttekið ástand og svara í samræmi við það. Hegðunin sem leiðir af sér er sú sama nema nánast ómerkjanleg töf áður en svarað er. En árangur hefur batnað vegna þess að Sense hlutanum er skipt í sérstakan hluta forritsins.

Stigveldi endanlegt ástand vél

Hins vegar er ekki alltaf þægilegt að vinna með stórum FSM. Ef við viljum stækka árásarástandið til að aðskilja MeleeAttacking og RangedAttacking, verðum við að breyta umbreytingum frá öllum öðrum ríkjum sem leiða til árásarástandsins (núverandi og framtíðar).

Þú hefur sennilega tekið eftir því að í dæminu okkar eru margar tvíteknar umbreytingar. Flestar umskipti í lausagangi eru eins og umskipti í eftirlitsstöðu. Það væri gaman að endurtaka okkur ekki, sérstaklega ef við bætum við fleiri svipuðum ríkjum. Það er skynsamlegt að flokka Idling og Patrrolling undir almennu merkinu „ekki bardaga“, þar sem aðeins er eitt sameiginlegt sett af umskiptum yfir í bardagaríki. Ef við lítum á þetta merki sem ríki, þá verða Idling og Patrrolling að undirríki. Dæmi um að nota sérstaka umbreytingartöflu fyrir nýtt undirríki sem ekki er bardaga:

Helstu ríki:
Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Staða utan bardaga:
Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Og í skýringarmynd:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Þetta er sama kerfið, en með nýju ástandi án bardaga sem inniheldur Idling og Patrrolling. Með hvert ástand sem inniheldur FSM með undirástandi (og þessi undirríki, aftur á móti, innihalda sín eigin FSMs - og svo framvegis eins lengi og þú þarft), fáum við Hierarchical Finite State Machine eða HFSM (hierarchical finite state machine). Með því að flokka ríkið sem ekki er bardaga, skerum við út fullt af óþarfa umbreytingum. Við getum gert það sama fyrir öll ný ríki með sameiginlegar umbreytingar. Til dæmis, ef við stækkum árásarríkið í framtíðinni yfir í MeleeAttacking og MissileAttacking ríkin, þá verða þau undirríki sem skipta á milli sín á milli miðað við fjarlægð til óvinarins og framboð á skotfærum. Fyrir vikið er hægt að tákna flókna hegðun og undirhegðun með að minnsta kosti tvíteknum breytingum.

Atferlistré

Með HFSM verða til flóknar samsetningar hegðunar á einfaldan hátt. Hins vegar er smá vandi að ákvarðanataka í formi umbreytingarreglna sé nátengd núverandi ástandi. Og í mörgum leikjum er þetta einmitt það sem þarf. Og varkár notkun á stigveldi ríkisins getur dregið úr fjölda endurtekningar á umskiptum. En stundum þarftu reglur sem virka, sama í hvaða ríki þú ert, eða sem gilda í næstum hvaða ríki sem er. Til dæmis, ef heilsa umboðsmanns fer niður í 25%, muntu vilja að hann hlaupi burt, hvort sem hann var í bardaga, aðgerðalaus eða að tala - þú verður að bæta þessu ástandi við hvert ríki. Og ef hönnuður þinn vill síðar breyta lágu heilsuþröskuldinum úr 25% í 10%, þá verður þetta að gera aftur.

Helst krefst þessar aðstæður kerfis þar sem ákvarðanir um „í hvaða ríki á að vera“ eru utan ríkjanna sjálfra, til að gera breytingar aðeins á einum stað og ekki snerta umbreytingarskilyrðin. Atferlistré birtast hér.

Það eru nokkrar leiðir til að útfæra þær, en kjarninn er nokkurn veginn sá sami fyrir alla og er svipaður og ákvörðunartré: reikniritið byrjar á „rót“ hnút og tréð inniheldur hnúta sem tákna annað hvort ákvarðanir eða aðgerðir. Það eru þó nokkrir lykilmunir:

  • Hnútar skila nú einu af þremur gildum: Heppnuð (ef verkinu er lokið), Mistókst (ef ekki er hægt að ræsa það) eða í gangi (ef það er enn í gangi og engin endanleg niðurstaða liggur fyrir).
  • Það eru ekki fleiri ákvörðunarhnútar til að velja á milli tveggja valkosta. Þess í stað eru þetta skreytingarhnútar, sem hafa einn undirhnút. Ef þeir ná árangri, framkvæma þeir eina barn hnútinn sinn.
  • Hnútar sem framkvæma aðgerðir skila Running gildi til að tákna aðgerðirnar sem verið er að framkvæma.

Þetta litla sett af hnútum er hægt að sameina til að búa til fjölda flókinna hegðunar. Við skulum ímynda okkur HFSM vörðinn frá fyrra dæminu sem hegðunartré:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Með þessari uppbyggingu ætti ekki að vera augljós umskipti frá aðgerðalausum/eftirlitsríkjum yfir í árás eða önnur ríki. Ef óvinur er sýnilegur og heilsa persónunnar er léleg, mun aftaka stöðvast við flóttahnútinn, óháð því hvaða hnút hann var áður að framkvæma - eftirlit, aðgerðalaus, árás eða einhver annar.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Atferlistré eru flókin - það eru margar leiðir til að búa þau saman og það getur verið krefjandi að finna réttu samsetningu skreytinga og samsettra hnúta. Það eru líka spurningar um hversu oft á að athuga tréð - viljum við fara í gegnum alla hluta þess eða aðeins þegar eitt af skilyrðunum hefur breyst? Hvernig geymum við ástand sem tengist hnútum - hvernig vitum við hvenær við höfum verið í aðgerðalausu í 10 sekúndur, eða hvernig vitum við hvaða hnútar voru að keyra síðast svo við getum unnið úr röðinni rétt?

Þess vegna eru margar útfærslur. Til dæmis hafa sum kerfi skipt út skreytingahnútum fyrir innbyggða skreytingaraðila. Þeir endurmeta tréð þegar aðstæður skreytinga breytast, hjálpa til við að tengja hnúta og veita reglulegar uppfærslur.

Gagnakerfi

Sumir leikir hafa marga mismunandi vélfræði. Æskilegt er að þeir fái allan ávinninginn af einföldum og almennum umbreytingarreglum, en ekki endilega í formi fullkomins hegðunartrés. Í stað þess að hafa skýrt val eða tré mögulegra aðgerða er auðveldara að skoða allar aðgerðir og velja þá sem hentar best í augnablikinu.

Kerfið sem byggir á gagnsemi mun hjálpa til við þetta. Þetta er kerfi þar sem umboðsmaðurinn hefur margvíslegar aðgerðir og velur hverjar á að framkvæma út frá hlutfallslegu gagnsemi hvers og eins. Þar sem gagnsemi er handahófskenndur mælikvarði á hversu mikilvægt eða æskilegt það er fyrir umboðsmann að framkvæma þessa aðgerð.

Reiknað gagnsemi aðgerðar byggt á núverandi ástandi og umhverfi, umboðsmaður getur athugað og valið viðeigandi annað ástand hvenær sem er. Þetta er svipað og FSM, nema þar sem umskipti eru ákvörðuð af mati fyrir hvert hugsanlegt ástand, þar með talið núverandi ástand. Vinsamlegast athugaðu að við veljum gagnlegustu aðgerðina til að halda áfram (eða vera áfram ef við höfum þegar lokið henni). Fyrir meiri fjölbreytni gæti þetta verið yfirvegað en af ​​handahófi val úr litlum lista.

Kerfið úthlutar handahófskenndu svið nytjagilda - til dæmis frá 0 (algjörlega óæskilegt) til 100 (alveg æskilegt). Hver aðgerð hefur fjölda breytu sem hafa áhrif á útreikning á þessu gildi. Farið aftur að forráðamannadæminu okkar:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Umskipti milli aðgerða eru óljós - hvaða ríki sem er getur fylgt öðrum. Forgangsröð aðgerða er að finna í skiluðum nytjagildum. Ef óvinur er sýnilegur, og sá óvinur er sterkur, og heilsa persónunnar er lág, þá munu bæði Fleeing og FindingHelp skila háum gildum sem eru ekki núll. Í þessu tilviki mun FindingHelp alltaf vera hærra. Sömuleiðis skilar athöfnum utan bardaga aldrei meira en 50, þannig að þær verða alltaf lægri en bardagar. Þú þarft að taka tillit til þessa þegar þú býrð til aðgerðir og reiknar út notagildi þeirra.

Í dæminu okkar skila aðgerðirnar annað hvort föstu föstu gildi eða einu af tveimur föstum gildum. Raunhæfara kerfi myndi skila mati frá samfelldu gildissviði. Til dæmis, flóttaaðgerðin skilar hærri nytjagildum ef heilsa umboðsmannsins er lágt, og árásaraðgerðin skilar lægri nytjagildum ef óvinurinn er of sterkur. Vegna þessa hefur flóttaaðgerðin forgang fram yfir árás í öllum aðstæðum þar sem umboðsmaðurinn telur sig ekki hafa næga heilsu til að sigra óvininn. Þetta gerir aðgerðum kleift að forgangsraða út frá hvaða fjölda viðmiða sem er, sem gerir þessa nálgun sveigjanlegri og breytilegri en hegðunartré eða FSM.

Hver aðgerð hefur mörg skilyrði fyrir áætlunarútreikningi. Þeir geta verið skrifaðir á forskriftarmáli eða sem röð stærðfræðilegra formúla. The Sims, sem líkir eftir daglegri rútínu persóna, bætir við viðbótarlagi af útreikningum - umboðsmaðurinn fær röð "hvata" sem hafa áhrif á einkunnir notenda. Ef persóna er svöng verður hún enn hungraðri með tímanum og notagildi EatFood aðgerðarinnar eykst þar til persónan framkvæmir hana, minnkar hungurstigið og færir EatFood gildið aftur í núll.

Hugmyndin um að velja aðgerðir byggðar á einkunnakerfi er frekar einföld, þannig að hægt er að nota kerfi sem byggir á tólum sem hluta af AI ákvarðanatökuferlum, frekar en sem fullkominn staðgengill þeirra. Ákvörðunartréð getur beðið um gagnsemiseinkunn tveggja barnahnúta og valið þann hærri. Á sama hátt getur hegðunartré verið með samsettan hnút til að meta gagnsemi aðgerða til að ákveða hvaða barn á að framkvæma.

Hreyfing og siglingar

Í fyrri dæmunum vorum við með pall sem við færðum til vinstri eða hægri og vörð sem vaktaði eða réðst á. En hvernig nákvæmlega tökum við á umboðsmannaflutningum yfir ákveðið tímabil? Hvernig stillum við hraða, hvernig forðumst við hindranir og hvernig skipuleggjum við leið þegar erfiðara er að komast á áfangastað en bara að fara í beina línu? Við skulum skoða þetta.

Stjórnskipulag

Á upphafsstigi munum við gera ráð fyrir að hver umboðsmaður hafi hraðagildi, sem felur í sér hversu hratt hann hreyfist og í hvaða átt. Það er hægt að mæla það í metrum á sekúndu, kílómetrum á klukkustund, pixlum á sekúndu o.s.frv. Ef þú rifjar upp Sense/Think/Act lykkjuna getum við ímyndað okkur að Think hlutinn velji hraða og Act hlutinn noti þann hraða á umboðsmanninn. Venjulega eru leikir með eðlisfræðikerfi sem gerir þetta verkefni fyrir þig, lærir hraðagildi hvers hlutar og stillir það. Þess vegna geturðu skilið gervigreindina eftir með eitt verkefni - að ákveða hvaða hraða umboðsmaðurinn ætti að hafa. Ef þú veist hvar umboðsmaðurinn ætti að vera, þá þarftu að færa hann í rétta átt á ákveðnum hraða. Mjög léttvæg jafna:

óskað_ferð = áfangastaða_staða – umboðsmannsstaða

Ímyndaðu þér 2D heim. Umboðsmaðurinn er á punktinum (-2,-2), áfangastaðurinn er einhvers staðar í norðaustri við punktinn (30, 20) og nauðsynleg leið fyrir umboðsmanninn til að komast þangað er (32, 22). Segjum að þessar stöður séu mældar í metrum - ef við tökum að hraða miðilsins sé 5 metrar á sekúndu, þá munum við skala tilfærsluvigur okkar og fá hraða sem er um það bil (4.12, 2.83). Með þessum breytum myndi umboðsmaðurinn koma á áfangastað á næstum 8 sekúndum.

Þú getur endurreiknað gildin hvenær sem er. Ef miðillinn væri hálfa leið að markinu væri hreyfingin helmingi lengri en þar sem hámarkshraði miðilsins er 5 m/s (við ákváðum þetta hér að ofan) þá verður hraðinn sá sami. Þetta virkar líka til að færa mið, sem gerir umboðsmanni kleift að gera litlar breytingar þegar þeir hreyfa sig.

En við viljum meiri afbrigði - til dæmis auka hægt hraðann til að líkja eftir persónu sem færist úr standandi yfir í hlaupandi. Það sama er hægt að gera í lokin áður en hætt er. Þessir eiginleikar eru þekktir sem stýrihegðun, sem hver um sig hefur sérstök nöfn: Leita, flýja, koma o.s.frv. Hugmyndin er sú að hægt sé að beita hröðunarkrafti á hraða umboðsmannsins, byggt á því að bera saman stöðu og núverandi hraða umboðsmannsins við áfangastaðinn í til að nota mismunandi aðferðir til að komast að markmiðinu.

Hver hegðun hefur aðeins annan tilgang. Leit og komu eru leiðir til að flytja umboðsmann á áfangastað. Hindrunar forðast og aðskilnaður stilla hreyfingu umboðsmannsins til að forðast hindranir á leiðinni að markmiðinu. Jöfnun og samheldni halda umboðsmönnum á hreyfingu. Hægt er að leggja saman hvaða fjölda mismunandi stýrihegðun sem er til að framleiða einn brautarvigur að teknu tilliti til allra þátta. Umboðsmaður sem notar hegðun komu, aðskilnaðar og hindrunar til að forðast veggi og aðra aðila. Þessi nálgun virkar vel á opnum stöðum án óþarfa smáatriði.

Við erfiðari aðstæður virkar það að bæta við mismunandi hegðun verr - til dæmis getur umboðsmaður festst í vegg vegna árekstra milli komu og hindrunar. Þess vegna þarftu að íhuga valkosti sem eru flóknari en einfaldlega að bæta við öllum gildunum. Leiðin er þessi: í stað þess að leggja saman niðurstöður hverrar hegðunar geturðu íhugað hreyfingu í mismunandi áttir og valið besta kostinn.

Hins vegar, í flóknu umhverfi með blindgötum og valmöguleikum um hvaða leið við eigum að fara, þurfum við eitthvað enn háþróaðra.

Að finna leið

Stýrishegðun er frábær fyrir einfaldar hreyfingar á opnu svæði (fótboltavelli eða leikvangi) þar sem að komast frá A til B er bein leið með aðeins minniháttar krókaleiðir í kringum hindranir. Fyrir flóknar leiðir þurfum við slóðagreiningu, sem er leið til að kanna heiminn og ákveða leið í gegnum hann.

Einfaldast er að setja rist á hvern ferning við hlið umboðsmannsins og meta hver þeirra er látinn hreyfa sig. Ef einn þeirra er áfangastaður, fylgdu þá leiðinni frá hverju torgi að því fyrra þar til þú nærð byrjuninni. Þetta er leiðin. Annars skaltu endurtaka ferlið með öðrum reitum í nágrenninu þar til þú finnur áfangastað eða þú verður uppiskroppa með reitum (sem þýðir að það er engin möguleg leið). Þetta er það sem er formlega þekkt sem Breadth-First Search eða BFS (breadth-first search algorithm). Í hverju skrefi horfir hann í allar áttir (þar af leiðandi breidd, "breidd"). Leitarrýmið er eins og bylgjufront sem hreyfist þangað til hún nær tilætluðum stað - leitarrýmið stækkar við hvert skref þar til endapunkturinn er tekinn með, en eftir það má rekja það aftur til upphafsins.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Fyrir vikið færðu lista yfir ferninga þar sem æskileg leið er tekin saman. Þetta er slóðin (þar af leiðandi leiðaleit) - listi yfir staði sem umboðsmaðurinn mun heimsækja á meðan hann fylgir áfangastaðnum.

Í ljósi þess að við þekkjum staðsetningu hvers fernings í heiminum, getum við notað stýrihegðun til að fara eftir brautinni - frá hnút 1 til hnút 2, síðan frá hnút 2 til hnút 3, og svo framvegis. Einfaldasti kosturinn er að stefna í átt að miðju næsta reits, en enn betri kosturinn er að stoppa í miðri brúninni á milli núverandi reits og þess næsta. Vegna þessa mun umboðsmaðurinn geta skorið horn í kröppum beygjum.

BFS reikniritið hefur líka ókosti - það kannar jafn marga ferninga í „ranga“ átt og í „rétta“ átt. Þetta er þar sem flóknara reiknirit sem kallast A* (A star) kemur við sögu. Það virkar á sama hátt, en í stað þess að skoða nágrannareitina í blindni (svo nágranna nágranna, svo nágranna nágranna, og svo framvegis) safnar það hnútunum í lista og flokkar þá þannig að næsti hnútur sem skoðaður er er alltaf einn sem liggur á stystu leiðinni. Hnútar eru flokkaðir á grundvelli heuristic sem tekur mið af tvennu – „kostnaði“ við ímyndaða leið að viðkomandi torginu (þar á meðal hvers kyns ferðakostnaði) og mati á því hversu langt það ferningur er frá áfangastað (þar sem leitin er hlutdræg í rétta átt).

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Þetta dæmi sýnir að umboðsmaðurinn skoðar einn ferning í einu og velur í hvert sinn þann aðliggjandi sem er vænlegastur. Leiðin sem myndast er sú sama og BFS, en færri reitir voru skoðaðir í ferlinu - sem hefur mikil áhrif á frammistöðu leiksins.

Hreyfing án rists

En flestir leikir eru ekki settir á rist og það er oft ómögulegt að gera það án þess að fórna raunsæi. Það þarf málamiðlanir. Hvaða stærð eiga ferningarnir að vera? Of stórir og þeir munu ekki geta táknað litla ganga eða beygjur rétt, of litlar og það verða of margir reiti til að leita að, sem mun á endanum taka mikinn tíma.

Það fyrsta sem þarf að skilja er að möskva gefur okkur línurit af tengdum hnútum. A* og BFS reikniritin virka í raun á línuritum og er alveg sama um möskva okkar. Við gætum sett hnúta hvar sem er í leikjaheiminum: svo lengi sem það er tenging á milli tveggja tengdra hnúta, sem og milli upphafs- og endapunkta og að minnsta kosti eins hnútanna, mun reikniritið virka alveg eins vel og áður. Þetta er oft kallað leiðarpunktakerfi, þar sem hver hnút táknar mikilvæga stöðu í heiminum sem getur verið hluti af hvaða fjölda ímyndaðra leiða sem er.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur
Dæmi 1: hnútur í hverjum ferningi. Leitin byrjar frá hnútnum þar sem umboðsmaðurinn er staðsettur og endar á hnútnum á viðkomandi ferningi.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur
Dæmi 2: Minni mengi hnúta (vegpunktar). Leitin hefst á torginu hjá umboðsmanni, fer í gegnum nauðsynlegan fjölda hnúta og heldur síðan áfram á áfangastað.

Þetta er algjörlega sveigjanlegt og öflugt kerfi. En nokkurrar aðgát er þörf við að ákveða hvar og hvernig á að setja leiðarpunkt, annars gætu umboðsmenn einfaldlega ekki séð næsta punkt og geta ekki byrjað leiðina. Það væri auðveldara ef við gætum sjálfkrafa sett leiðarpunkta út frá rúmfræði heimsins.

Þetta er þar sem leiðsagnarnetið eða navmesh (leiðsögunetið) birtist. Þetta er venjulega 2D möskva þríhyrninga sem er lagt á rúmfræði heimsins - hvar sem umboðsmaðurinn fær að ganga. Hver þríhyrningur í möskva verður að hnút á línuritinu og hefur allt að þrjá aðliggjandi þríhyrninga sem verða að aðliggjandi hnútum á línuritinu.

Þessi mynd er dæmi úr Unity vélinni - hún greindi rúmfræði heimsins og bjó til navmesh (á skjámyndinni í ljósbláu). Hver marghyrningur í navmesh er svæði þar sem umboðsmaður getur staðið eða færst frá einum marghyrningi í annan marghyrning. Í þessu dæmi eru marghyrningarnir minni en gólfin sem þeir eru staðsettir á - þetta er gert til að taka tillit til stærðar umboðsmannsins, sem mun ná út fyrir nafnstöðu hans.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Við getum leitað að leið í gegnum þetta möskva, aftur með því að nota A* reikniritið. Þetta mun gefa okkur næstum fullkomna leið í heiminum, sem tekur mið af allri rúmfræðinni og krefst ekki óþarfa hnúta og gerð leiðarpunkta.

Leiðarleit er of víðtækt efni sem einn hluti greinar er ekki nóg fyrir. Ef þú vilt læra það nánar, þá mun þetta hjálpa Vefsíða Amit Patel.

Skipulags

Við höfum lært með slóðagreiningu að stundum er ekki nóg að velja bara stefnu og færa okkur - við verðum að velja leið og gera nokkrar beygjur til að komast á þann áfangastað sem við viljum. Við getum alhæft þessa hugmynd: að ná markmiði er ekki bara næsta skref, heldur heil röð þar sem stundum þarf að horfa fram á við nokkur skref til að komast að því hvert það fyrsta ætti að vera. Þetta er kallað áætlanagerð. Líta má á leiðaleit sem eina af nokkrum viðbótum við skipulagningu. Hvað varðar Sense/Think/Act hringrás okkar, þá er þetta þar sem Hugsa hluti skipuleggur marga lagahluta til framtíðar.

Skoðum dæmið um borðspilið Magic: The Gathering. Við förum fyrst með eftirfarandi sett af spilum í höndunum:

  • Mýri - Gefur 1 svart mana (landspil).
  • Skógur - gefur 1 grænt mana (landkort).
  • Fugitive Wizard - Krefst 1 blátt mana til að kalla fram.
  • Elvish Mystic - Þarf 1 grænt mana til að kalla fram.

Við hunsum þrjú spil sem eftir eru til að gera það auðveldara. Samkvæmt reglunum er leikmanni heimilt að spila 1 landspili í hverri umferð, hann getur „pikkað“ á þetta spil til að draga mana úr því og síðan galdra (þar á meðal kalla á veru) í samræmi við magn mana. Í þessum aðstæðum veit manneskjan að spila Forest, smella á 1 grænt mana og kalla síðan Elvish Mystic. En hvernig getur gervigreind leiksins fundið út þetta?

Auðvelt skipulag

Hin léttvæga nálgun er að prófa hverja aðgerð fyrir sig þar til engar hentugar eru eftir. Með því að skoða spilin sér gervigreindin hvað Swamp getur spilað. Og hann spilar það. Eru einhverjar aðrar aðgerðir eftir í þessari beygju? Það getur hvorki kallað Elvish Mystic né Fugitive Wizard, þar sem þeir þurfa grænt og blátt mana til að kalla þá fram, á meðan Swamp veitir aðeins svart mana. Og hann mun ekki lengur geta spilað Forest, því hann hefur þegar spilað Swamp. Þannig fylgdi AI leikurinn reglunum en gerði það illa. Má bæta.

Skipulagning getur fundið lista yfir aðgerðir sem koma leiknum í það ástand sem óskað er eftir. Rétt eins og sérhver ferningur á stíg átti sér nágranna (í slóðaleit), sérhver aðgerð í áætlun hefur einnig nágranna eða arftaka. Við getum leitað að þessum aðgerðum og síðari aðgerðum þar til við náum því ástandi sem óskað er eftir.

Í dæminu okkar er æskileg niðurstaða „kallaðu á veru ef mögulegt er“. Í upphafi beygju sjáum við aðeins tvær mögulegar aðgerðir sem reglur leiksins leyfa:

1. Spilaðu Mýri (niðurstaða: Mýri í leiknum)
2. Spilaðu skógur (niðurstaða: skógur í leiknum)

Hver aðgerð sem gerð er getur leitt til frekari aðgerða og lokað öðrum, aftur eftir leikreglum. Ímyndaðu þér að við spiluðum Swamp - þetta mun fjarlægja Swamp sem næsta skref (við spiluðum það nú þegar), og þetta mun líka fjarlægja Forest (vegna þess að samkvæmt reglum er hægt að spila eitt landspil í hverri umferð). Eftir þetta bætir gervigreind við að fá 1 svart mana sem næsta skref vegna þess að það eru engir aðrir valkostir. Ef hann fer á undan og velur Tap the Swamp, mun hann fá 1 einingu af svörtu mana og mun ekki geta gert neitt við það.

1. Spilaðu Mýri (niðurstaða: Mýri í leiknum)
1.1 „Tapp“-mýri (niðurstaða: Mýri „tappað“, +1 eining af svörtu mana)
Engar aðgerðir í boði - END
2. Spilaðu skógur (niðurstaða: skógur í leiknum)

Listinn yfir aðgerðir var stuttur, við komumst á blindgötu. Við endurtökum ferlið fyrir næsta skref. Við spilum Forest, opnum aðgerðina „fáðu 1 grænt mana“, sem aftur mun opna þriðju aðgerðina - kalla Elvish Mystic.

1. Spilaðu Mýri (niðurstaða: Mýri í leiknum)
1.1 „Tapp“-mýri (niðurstaða: Mýri „tappað“, +1 eining af svörtu mana)
Engar aðgerðir í boði - END
2. Spilaðu skógur (niðurstaða: skógur í leiknum)
2.1 „Tapp“-skógur (niðurstaða: Skógurinn er „tappaður“, +1 eining af grænu mana)
2.1.1 Summon Elvish Mystic (niðurstaða: Elvish Mystic í leik, -1 grænt mana)
Engar aðgerðir í boði - END

Að lokum könnuðum við allar mögulegar aðgerðir og fundum áætlun sem kallar á veru.

Þetta er mjög einfaldað dæmi. Það er ráðlegt að velja bestu mögulegu áætlunina, frekar en bara hvaða áætlun sem uppfyllir sum skilyrði. Almennt er hægt að meta hugsanlegar áætlanir út frá niðurstöðu eða heildarávinningi af framkvæmd þeirra. Þú getur skorað sjálfur 1 stig fyrir að spila landspili og 3 stig fyrir að kalla fram veru. Að spila Swamp væri 1 stigs plan. Og að spila Forest → Bankaðu á Forest → summon Elvish Mystic gefur strax 4 stig.

Svona virkar skipulagning í Magic: The Gathering, en sama rökfræði á við í öðrum aðstæðum. Til dæmis að færa peð til að gera pláss fyrir biskupinn til að hreyfa sig í skák. Eða farðu í skjól á bak við vegg til að skjóta örugglega í XCOM svona. Almennt séð færðu hugmyndina.

Bætt skipulag

Stundum eru of margar hugsanlegar aðgerðir til að íhuga alla mögulega valkosti. Snúum aftur að dæminu með Magic: The Gathering: segjum að í leiknum og í hendinni séu nokkur land- og skepnaspil - fjöldi mögulegra samsetninga hreyfinga getur verið í tugum. Það eru nokkrar lausnir á vandanum.

Fyrsta aðferðin er keðja afturábak. Í stað þess að prófa allar samsetningarnar er betra að byrja á lokaniðurstöðunni og reyna að finna beina leið. Í stað þess að fara frá rót trésins að tilteknu blaða, förum við í gagnstæða átt - frá blaðinu til rótarinnar. Þessi aðferð er auðveldari og hraðari.

Ef óvinurinn hefur 1 heilsu geturðu fundið "deal 1 or more damage" áætlunina. Til að ná þessu þarf að uppfylla nokkur skilyrði:

1. Skemmdir geta stafað af álögum - það verður að vera í hendi.
2. Til að galdra þarftu mana.
3. Til að fá mana þarftu að spila landspili.
4. Til að spila landspili þarftu að hafa það á hendi.

Önnur leið er best-fyrsta leit. Í stað þess að reyna allar leiðir veljum við þann sem hentar best. Oftast gefur þessi aðferð bestu áætlunina án óþarfa leitarkostnaðar. A* er tegund af bestu fyrstu leit - með því að skoða vænlegustu leiðirnar frá upphafi getur það þegar fundið bestu leiðina án þess að þurfa að athuga aðra valkosti.

Áhugaverður og sífellt vinsælli besti fyrsti leitarmöguleikinn er Monte Carlo Tree Search. Í stað þess að giska á hvaða áætlanir eru betri en aðrar þegar hverja síðari aðgerð er valin, velur reikniritið tilviljanakennda arftaka í hverju skrefi þar til það nær enda (þegar áætlunin leiddi til sigurs eða ósigurs). Lokaniðurstaðan er síðan notuð til að auka eða minnka vægi fyrri valkosta. Með því að endurtaka þetta ferli nokkrum sinnum í röð gefur reikniritið gott mat á því hver besta næsta skrefið er, jafnvel þótt ástandið breytist (ef óvinurinn grípur til aðgerða til að trufla leikmanninn).

Engin saga um skipulagningu í leikjum væri fullkomin án markmiðaðrar aðgerðaáætlunar eða GOAP (markmiðaðrar aðgerðaáætlunar). Þetta er mikið notuð og rædd aðferð, en fyrir utan nokkur aðgreiningaratriði er það í rauninni afturábak keðjuaðferðin sem við ræddum um áðan. Ef markmiðið var að „eyðileggja leikmanninn“ og leikmaðurinn er í skjóli gæti áætlunin verið: eyðileggja með handsprengju → ná í hana → henda henni.

Það eru yfirleitt nokkur markmið, hvert með sína forgang. Ef ekki er hægt að klára markmiðið með hæsta forgang (engin samsetning aðgerða skapar „dreptu leikmanninn“ áætlun vegna þess að leikmaðurinn er ekki sýnilegur), mun gervigreindin falla aftur í markmið með lægri forgang.

Þjálfun og aðlögun

Við höfum þegar sagt að gervigreind í leikjum notar venjulega ekki vélanám vegna þess að það hentar ekki til að stjórna umboðsmönnum í rauntíma. En þetta þýðir ekki að þú getir ekki fengið eitthvað lánað frá þessu svæði. Við viljum fá andstæðing í skyttu sem við getum lært eitthvað af. Til dæmis, finndu út um bestu staðsetninguna á kortinu. Eða andstæðingur í bardagaleik sem myndi hindra oft notaðar samsetningarhreyfingar leikmannsins og hvetja hann til að nota aðra. Svo vélanám getur verið mjög gagnlegt við slíkar aðstæður.

Tölfræði og líkindi

Áður en við förum inn í flókin dæmi skulum við sjá hversu langt við getum gengið með því að taka nokkrar einfaldar mælingar og nota þær til að taka ákvarðanir. Til dæmis, rauntíma stefna - hvernig ákveðum við hvort leikmaður geti gert sókn á fyrstu mínútum leiksins og hvaða vörn á að undirbúa sig gegn þessu? Við getum rannsakað fyrri reynslu leikmanns til að skilja hver framtíðarviðbrögð gætu verið. Til að byrja með höfum við ekki slík hrá gögn, en við getum safnað þeim - í hvert skipti sem gervigreindin spilar gegn manneskju getur það skráð tíma fyrstu árásarinnar. Eftir nokkrar lotur fáum við meðaltal af þeim tíma sem það tekur leikmanninn að sækja í framtíðinni.

Það er líka vandamál með meðalgildi: ef leikmaður flýtti sér 20 sinnum og spilaði hægt 20 sinnum, þá verða nauðsynleg gildi einhvers staðar í miðjunni og þetta mun ekki gefa okkur neitt gagnlegt. Ein lausn er að takmarka inntaksgögnin - hægt er að taka með í reikninginn síðustu 20 stykkin.

Svipuð nálgun er notuð þegar líkurnar á ákveðnum aðgerðum eru metnar með því að gera ráð fyrir að fyrri óskir leikmannsins verði þær sömu í framtíðinni. Ef leikmaður ræðst fimm sinnum á okkur með eldbolta, tvisvar með eldingum og einu sinni með melee, er augljóst að hann vill frekar eldbolta. Við skulum framreikna og sjá líkurnar á því að nota mismunandi vopn: eldbolta=62,5%, eldingar=25% og melee=12,5%. Gervigreind leiksins okkar þarf að undirbúa sig til að verja sig gegn eldi.

Önnur áhugaverð aðferð er að nota Naive Bayes Classifier til að rannsaka mikið magn af inntaksgögnum og flokka aðstæður þannig að gervigreindin bregðist við á þann hátt sem óskað er eftir. Bayesískir flokkarar eru þekktastir fyrir notkun þeirra í ruslpóstsíum í tölvupósti. Þar skoða þeir orðin, bera þau saman við þar sem þau orð hafa birst áður (í ruslpósti eða ekki) og draga ályktanir um móttekinn tölvupóst. Við getum gert það sama jafnvel með færri inntak. Byggt á öllum gagnlegum upplýsingum sem gervigreindin sér (eins og hvaða óvinaeiningar eru búnar til, eða hvaða galdra þeir nota, eða hvaða tækni þeir rannsökuðu), og lokaniðurstöðuna (stríð eða friður, þjóta eða verja osfrv.) - við munum velja æskilega gervigreindarhegðun.

Allar þessar þjálfunaraðferðir duga, en ráðlegt er að nota þær út frá prófunargögnum. Gervigreindin mun læra að laga sig að mismunandi aðferðum sem leikprófarnir þínir hafa notað. Gervigreind sem aðlagast spilaranum eftir útgáfu getur orðið of fyrirsjáanleg eða of erfitt að sigra.

Gildismiðuð aðlögun

Miðað við innihald leikheimsins okkar og reglurnar getum við breytt gildismatinu sem hefur áhrif á ákvarðanatöku, frekar en að nota einfaldlega inntaksgögnin. Við gerum þetta:

  • Leyfðu gervigreindinni að safna gögnum um ástand heimsins og helstu atburði meðan á leiknum stendur (eins og að ofan).
  • Við skulum breyta nokkrum mikilvægum gildum út frá þessum gögnum.
  • Við innleiðum ákvarðanir okkar sem byggja á vinnslu eða mati á þessum gildum.

Til dæmis hefur umboðsmaður nokkur herbergi til að velja úr á fyrstu persónu skotkorti. Hvert herbergi hefur sitt gildi sem ræður því hversu eftirsóknarvert er að heimsækja það. Gervigreindin velur af handahófi hvaða herbergi á að fara í byggt á gildinu. Umboðsmaðurinn man þá í hvaða herbergi hann var drepinn og dregur úr gildi þess (líkur á að hann snúi aftur þangað). Á sama hátt fyrir hið gagnstæða ástand - ef umboðsmaðurinn eyðileggur marga andstæðinga, þá eykst verðmæti herbergisins.

Markov fyrirmynd

Hvað ef við notuðum söfnuð gögn til að spá? Ef við munum eftir hverju herbergi sem við sjáum leikmann í í ákveðinn tíma, munum við spá fyrir um í hvaða herbergi leikmaðurinn gæti farið. Með því að fylgjast með og skrá hreyfingar leikmannsins yfir herbergi (gildi) getum við spáð fyrir um þær.

Tökum þrjú herbergi: rautt, grænt og blátt. Og einnig athuganirnar sem við tókum upp á meðan við horfðum á leiklotuna:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Fjöldi athugana í hverju herbergi er næstum jafn - við vitum enn ekki hvar við eigum að búa til góðan stað fyrir launsátur. Tölfræðisöfnun er einnig flókin vegna endurreisnar leikmanna, sem birtast jafnt um allt kortið. En gögnin um næsta herbergi sem þeir fara inn í eftir að hafa birst á kortinu eru nú þegar gagnleg.

Það má sjá að græna herbergið hentar leikmönnum - flestir flytja úr rauða herberginu yfir í það, 50% þeirra eru áfram þar. Bláa herbergið er þvert á móti ekki vinsælt; næstum enginn fer í það og ef þeir gera það dvelja þeir ekki lengi.

En gögnin segja okkur eitthvað mikilvægara - þegar leikmaður er í bláu herbergi verður næsta herbergi sem við sjáum hann í rautt, ekki grænt. Jafnvel þó að græna herbergið sé vinsælli en rauða herbergið breytist staðan ef spilarinn er í bláa herberginu. Næsta ástand (þ.e. herbergið sem leikmaðurinn fer í) fer eftir fyrra ástandi (þ.e. herbergið sem leikmaðurinn er í). Vegna þess að við könnum ósjálfstæði, munum við gera nákvæmari spár en ef við einfaldlega teldum athuganir sjálfstætt.

Að spá fyrir um framtíðarástand byggt á gögnum frá fortíðarríki er kallað Markov líkan og slík dæmi (með herbergjum) eru kölluð Markov keðjur. Þar sem mynstrin tákna líkur á breytingum á milli ríkja í röð, eru þau sýnd sem FSMs með líkum í kringum hverja umskipti. Áður notuðum við FSM til að tákna hegðunarástandið sem umboðsmaður var í, en þetta hugtak nær til hvaða ástands sem er, hvort sem það tengist umboðsmanni eða ekki. Í þessu tilviki tákna ríkin herbergið sem umboðsmaðurinn hefur:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Þetta er einföld leið til að tákna hlutfallslegar líkur á breytingum á ástandi, sem gefur gervigreindinni nokkra getu til að spá fyrir um næsta ástand. Þú getur gert ráð fyrir nokkrum skrefum framundan.

Ef leikmaður er í græna herberginu eru 50% líkur á að hann verði þar næst þegar fylgst er með honum. En hverjar eru líkurnar á því að hann verði þar enn eftir? Ekki aðeins er möguleiki á að leikmaðurinn hafi verið áfram í græna herberginu eftir tvær athuganir, heldur eru líka líkur á að hann hafi farið og snúið aftur. Hér er nýja taflan með hliðsjón af nýju gögnunum:

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur

Það sýnir að líkurnar á að sjá leikmanninn í græna herberginu eftir tvær athuganir eru jafnar 51% - 21% á að hann sé úr rauða herberginu, 5% af þeim að leikmaðurinn heimsæki bláa herbergið á milli þeirra og 25% sem leikmaðurinn mun ekki yfirgefa græna herbergið.

Taflan er einfaldlega sjónrænt tæki - aðferðin krefst þess að margfalda líkurnar í hverju skrefi. Þetta þýðir að þú getur horft langt inn í framtíðina með einum fyrirvara: við gerum ráð fyrir að líkurnar á að komast inn í herbergi fari algjörlega eftir núverandi herbergi. Þetta er kallað Markov Property - framtíðarástandið veltur aðeins á nútíðinni. En þetta er ekki hundrað prósent rétt. Spilarar geta breytt ákvörðunum eftir öðrum þáttum: heilsustigi eða magn skotfæra. Vegna þess að við skráum ekki þessi gildi verða spár okkar minna nákvæmar.

N-grömm

Hvað með dæmið um bardagaleik og að spá fyrir um combo hreyfingar leikmannsins? Það sama! En í stað eins ástands eða atburðar, munum við skoða allar raðirnar sem mynda combo verkfall.

Ein leið til að gera þetta er að geyma hvert inntak (eins og Kick, Punch eða Block) í biðminni og skrifa allan biðminni sem atburð. Þannig að spilarinn ýtir ítrekað á Kick, Kick, Punch til að nota SuperDeathFist árásina, gervigreindarkerfið geymir öll inntak í biðminni og man eftir síðustu þremur sem notuð voru í hverju skrefi.

Hvernig á að búa til leikjagervigreind: leiðarvísir fyrir byrjendur
(Línurnar með feitletrun eru þegar leikmaðurinn gerir SuperDeathFist árásina.)

Gervigreindin mun sjá alla valkostina þegar leikmaðurinn velur Kick, fylgt eftir með öðru Kick, og tekur svo eftir því að næsta inntak er alltaf Punch. Þetta gerir umboðsmanni kleift að spá fyrir um samsetta hreyfingu SuperDeathFist og loka á hana ef mögulegt er.

Þessar atburðaraðir eru kallaðar N-grömm, þar sem N er fjöldi frumefna sem geymdir eru. Í fyrra dæminu var það 3-grömm (þrígram), sem þýðir: fyrstu tvær færslurnar eru notaðar til að spá fyrir um þá þriðju. Samkvæmt því, í 5-grömmum, spá fyrstu fjórar færslurnar fyrir um þá fimmtu og svo framvegis.

Hönnuður þarf að velja stærð N-grömm vandlega. Minni N þarf minna minni en geymir líka minni sögu. Til dæmis mun 2-grömm (tvígrömm) taka upp Kick, Kick eða Kick, Punch, en mun ekki geta geymt Kick, Kick, Punch, þannig að gervigreindin mun ekki bregðast við SuperDeathFist comboinu.

Á hinn bóginn þurfa stærri tölur meira minni og AI verður erfiðara að þjálfa þar sem það verða miklu fleiri möguleikar. Ef þú hefðir þrjú möguleg inntak af Kick, Punch eða Block, og við notuðum 10 grömm, þá væru það um 60 þúsund mismunandi valkostir.

Bigram líkanið er einföld Markov keðja - hvert fyrri ástand/núverandi ástand par er tvígram og þú getur spáð fyrir um annað ástand út frá því fyrsta. Einnig má líta á 3-grömm og stærri N-grömm sem Markov-keðjur, þar sem öll frumefni (nema það síðasta í N-gramminu) mynda saman fyrsta ástandið og síðasta frumefnið annað. Bardagaleiksdæmið sýnir möguleikann á að skipta úr Kick and Kick ástandinu í Kick and Punch ástandið. Með því að meðhöndla margar inntakssögufærslur sem eina einingu erum við í raun að umbreyta inntaksröðinni í hluta af öllu ástandinu. Þetta gefur okkur Markov eignina, sem gerir okkur kleift að nota Markov keðjur til að spá fyrir um næsta inntak og giska á hvaða combo hreyfing verður næst.

Ályktun

Við ræddum um algengustu tækin og aðferðirnar við þróun gervigreindar. Við skoðuðum líka við hvaða aðstæður þarf að nota þau og hvar þau eru sérstaklega gagnleg.

Þetta ætti að vera nóg til að skilja grunnatriði gervigreindar leikja. En þetta eru auðvitað ekki allar aðferðir. Minna vinsæll, en ekki síður árangursríkur eru:

  • hagræðingaralgrím, þar á meðal brekkuklifur, halla og erfðafræðileg reiknirit
  • andstæðar leitar-/áætlunarreiknirit (minimax og alfa-beta pruning)
  • flokkunaraðferðir (skynjara, tauganet og stuðnings vektorvélar)
  • kerfi fyrir skynjun og minni vinnsluaðila
  • byggingarfræðilegar nálganir á gervigreind (blendingskerfi, undirmengi byggingarlistar og aðrar leiðir til að leggja yfir gervigreind kerfi)
  • hreyfiverkfæri (skipulag og hreyfisamhæfing)
  • frammistöðuþættir (smáatriði, hvenær sem er og reiknirit fyrir tímaskiptingu)

Úrræði á netinu um efnið:

1. GameDev.net hefur kafla með greinum og námskeiðum um gervigreindOg форум.
2. AiGameDev.com inniheldur margar kynningar og greinar um fjölbreytt efni sem tengjast gervigreind leikjaþróunar.
3. GDC hvelfinguna inniheldur efni frá GDC AI leiðtogafundinum, sem mörg hver eru fáanleg ókeypis.
4. Einnig er að finna gagnleg efni á heimasíðunni AI Game Forritara Guild.
5. Tommy Thompson, gervigreindarfræðingur og leikjaframleiðandi, gerir myndbönd á YouTube gervigreind og leikir með útskýringu og rannsókn á gervigreind í auglýsingaleikjum.

Bækur um efnið:

1. Game AI Pro bókaflokkurinn er safn stuttra greina sem útskýra hvernig á að útfæra sérstaka eiginleika eða hvernig á að leysa ákveðin vandamál.

Leikur AI Pro: Collected Wisdom of Game AI Professionals
Leikur AI Pro 2: Collected Wisdom of Game AI Professionals
Leikur AI Pro 3: Collected Wisdom of Game AI Professionals

2. AI Game Programming Wisdom serían er forveri Game AI Pro seríunnar. Það inniheldur eldri aðferðir, en næstum allar eiga við enn í dag.

AI leikjaforritunarspeki 1
AI leikjaforritunarspeki 2
AI leikjaforritunarspeki 3
AI leikjaforritunarspeki 4

3. Gervigreind: nútíma nálgun er einn af grunntextunum fyrir alla sem vilja skilja almennt svið gervigreindar. Þetta er ekki bók um leikjaþróun - hún kennir grunnatriði gervigreindar.

Heimild: www.habr.com

Bæta við athugasemd