Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ez di lîstikan de li ser îstîxbarata sûnî rastî hin materyalên balkêş hatim. Bi ravekirina tiştên bingehîn ên di derbarê AI-ê de bi karanîna mînakên hêsan, û di hundurê de ji bo pêşkeftin û sêwirana wê ya hêsan gelek amûr û rêbazên kêrhatî hene. Çawa, li ku û kengê karanîna wan jî heye.

Piraniya mînakan bi pseudokodê ​​têne nivîsandin, ji ber vê yekê zanîna bernamesaziya pêşkeftî ne hewce ye. Di bin jêkirinê de 35 pelên nivîsê bi wêne û gif hene, ji ber vê yekê xwe amade bikin.

UPD. Ez lêborînê dixwazim, lê min berê wergera xwe ya vê gotarê li ser Habré kiriye PatientZero. Hûn dikarin guhertoya wî bixwînin vir, lê ji ber hin sedeman gotara min derbas kir (min lêgerîn bikar anî, lê tiştek xelet bû). Û ji ber ku ez li ser blogek ku ji bo pêşkeftina lîstikê veqetandî dinivîsim, min biryar da ku guhertoya xwe ya werger ji bo aboneyan bihêlim (hin xal bi rengek cûda têne celeb kirin, hin jî bi zanetî li ser şîreta pêşdebiran hatine derxistin).

AI çi ye?

Lîstika AI li ser bingeha şert û mercên ku tê de ye balê dikişîne ser çi kirinên ku divê tiştek bike. Ev bi gelemperî wekî rêveberiya "ajanê aqilmend" tê binav kirin, ku ajan karekterek lîstikvanek, wesayitek, botek, an carinan tiştek jêhatîtir e: komek tevahî saziyan an tewra şaristaniyek e. Di her rewşê de ew tişt e ku divê hawirdora xwe bibîne, li gorî wê biryarê bide û li gorî wan tevbigere. Ji vê re çerxa hîs/fikir/Act tê gotin:

  • Hestî: Ajan derbarê tiştên li hawîrdora xwe de ku dibe ku bandorê li ser tevgera wî bike (tehdîdên nêzîk, tiştên berhevkirinê, cihên balkêş ên keşfê) peyda dike an distîne.
  • Bifikirin: Ajan biryar dide ka meriv çawa bertek nîşan dide (dihesibîne gelo berhevkirina tiştan têra xwe ewle ye an divê ew pêşî şer bike/veşêre).
  • Çalakî: ajan çalakiyan pêk tîne da ku biryara berê bicîh bîne (dest bi tevgerê ber bi dijmin an tiştê ve dike).
  • ...niha rewş ji ber kiryarên karakteran guheriye, ji ber vê yekê çerx bi daneyên nû dubare dibe.

AI meyla dike ku balê bikişîne ser beşa Sense ya lûkê. Mînakî, otomobîlên xweser wêneyên rê dikişînin, wan bi daneyên radar û lîdar re berhev dikin û wan şîrove dikin. Ev bi gelemperî ji hêla fêrbûna makîneyê ve tête kirin, ku daneyên gihîştî pêvajoyê dike û wate dide wê, agahdariya semantîkî ya mîna "20 metre li pêşiya we otomobîlek din heye." Pirsgirêkên bi navê tesnîfkirinê ev in.

Lîstok ji bo derxistina agahiyê ne hewceyî pergalek tevlihev e ji ber ku piraniya daneyan jixwe beşek jêveger e. Ne hewce ye ku algorîtmayên naskirina wêneyê bimeşînin da ku diyar bikin ka dijminek li pêş heye an na - lîstik jixwe dizane û agahdariya rasterast di pêvajoya biryargirtinê de vedigire. Ji ber vê yekê, beşa Hestî ya çerxê bi gelemperî ji beşa Bifikirin û Çalakiyê pir hêsan e.

Sînorên Game AI

AI hejmarek sînor hene ku divê bêne dîtin:

  • AI ne hewce ye ku pêşî were perwerde kirin, wekî ku ew algorîtmayek fêrbûna makîneyê be. Wateya nivîsandina tora neuralî di dema pêşkeftinê de tune ku bi deh hezaran lîstikvanan bişopîne û awayê çêtirîn lîstina li dijî wan fêr bibe. Çima? Ji ber ku lîstik nehatiye berdan û lîstikvan tune.
  • Pêdivî ye ku lîstik kêf û dijwar be, ji ber vê yekê divê ajan nêzîkatiya çêtirîn li hember mirovan nebînin.
  • Pêdivî ye ku ajan realîst xuya bikin da ku lîstikvan hîs bikin ku ew li dijî mirovên rast dilîzin. Bernameya AlphaGo ji mirovan re derbas bû, lê gavên bijartî ji têgihîştina kevneşopî ya lîstikê pir dûr bûn. Ger lîstik dijberek mirovî simule bike, divê ev hest nemîne. Pêdivî ye ku algorîtm were guheztin da ku ew ji bilî yên îdeal biryarên maqûl bide.
  • AI divê di wextê rast de bixebite. Ev tê vê wateyê ku algorîtma nikare karanîna CPU-yê ji bo demên dirêj monopolîze bike da ku biryaran bide. Tewra 10 milî çirkeyan jî pir dirêj e, ji ber ku piraniya lîstikan tenê ji 16 heta 33 milîsaniyeyan hewce ne ku hemî pêvajoyê bikin û derbasî çarçoveya grafîkê ya din bibin.
  • Bi îdeal, bi kêmanî beşek pergalê divê bi daneyê ve were rêve kirin, da ku ne-kodker dikarin guhertinan bikin û verastkirin zûtir çêbibin.

Ka em li nêzîkatiyên AI-ê yên ku tevahiya çerxa Hestî / Bifikirin / Kiryar vedigirin binêrin.

Çêkirina biryarên bingehîn

Ka em bi lîstika herî hêsan - Pong dest pê bikin. Armanc: Pelikê bihejînin da ku top ji wê derê bizivire. Ew mîna tenîsê ye, ku hûn li gogê nexin hûn winda dikin. Li vir AI-ê xwedan karekî nisbeten hêsan e - biryar dide ku li kîjan alî platformê bimeşîne.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Daxuyaniyên bi şert

Ji bo AI-ê li Pong, çareseriya herî eşkere ev e ku hûn her gav hewl bidin ku platformê di binê topê de bi cîh bikin.

Ji bo vê yekê algorîtmayek hêsan, ku di pseudocode de hatî nivîsandin:

dema ku lîstik dimeşe her çarçove / nûvekirin:
ger top li milê çepê yê pêlê be:
pêlê çepê bigerin
Wekî din, ger top li rastê pelikê be:
paddle rast tevbigerin

Ger platform bi leza topê dimeşe, wê hingê ev algorîtmaya îdeal a ji bo AI ​​ê li Pong e. Ger ew qas dane û kiryarên mumkin ên ji bo ajanê ne hewce ye ku tiştek tevlihev bikin.

Ev nêzîkatî ew qas hêsan e ku tevahiya çerxa Hîs/Fikir/Act bi zorê nayê dîtin. Lê ew li wir e:

  • Beşa hest di du if de ye. Lîstik dizane ku top li ku ye û platform li ku ye, ji ber vê yekê AI ji bo wê agahiyê lê dinihêre.
  • Beşa Bifikirin jî di nav her du daxuyaniyan de ye. Ew du çareseriyan vedihewînin, ku di vê rewşê de ji hev cuda ne. Wekî encamek, yek ji sê çalakiyan tê hilbijartin - platformê ber bi çepê ve bikişîne, wê ber bi rastê ve bikişîne, an heke ew jixwe rast hatî cîh kirin tiştek nekin.
  • Beşa Qanûnê di daxuyaniyên Move Paddle Left û Move Paddle Right de tê dîtin. Bi sêwirana lîstikê ve girêdayî, ew dikarin platformê tavilê an bi lezek taybetî tevbigerin.

Nêzîkatiyên weha reaktîf têne gotin - komek rêzikên hêsan hene (di vê rewşê de heke daxuyaniyên di kodê de be) ku li ser rewşa heyî ya cîhanê reaksiyon dikin û tevdigerin.

Dara biryarê

Mînaka Pong bi rastî bi têgehek AI-ya fermî ya ku jê re dara biryarê tê gotin wekhev e. Algorîtma di nav wê de derbas dibe ku bigihîje "pelek" - biryarek li ser çi çalakiyê.

Ka em ji bo algorîtmaya platforma xwe bloka dara biryarê çêbikin:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ji her perçeyek darê re girêkek tê gotin - AI teoriya grafîkê bikar tîne da ku strukturên weha diyar bike. Du celeb nod hene:

  • Girêdanên biryarê: Hilbijartina di navbera du alternatîfan de li ser bingeha ceribandina hin mercan, ku her alternatîf wekî girêkek cûda tê destnîşan kirin.
  • Girêdanên dawî: Çalakiya ku tê kirin ku biryara dawîn temsîl dike.

Algorîtma ji girêka yekem ("koka" darê) dest pê dike. Ew an biryarê dide ku dê biçe kîjan girêka zarokê, an jî çalakiya ku di girêkê de hatî hilanîn pêk tîne û derdikeve.

Çi feyda wê heye ku dara biryarê heman karî bike wekî daxuyaniyên if di beşa berê de? Li vir pergalek gelemperî heye ku her biryarek tenê şertek û du encamên gengaz hene. Ev rê dide pêşdebiran ku AI-ê ji daneyên ku biryarên li darekê temsîl dike bêyî ku koda wê hişk bike biafirîne. Ka em wê di forma tabloyê de pêşkêş bikin:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Li aliyê kodê hûn ê pergalek ji bo xwendina rêzan bistînin. Ji bo her yek ji wan girêkek biafirînin, mentiqê biryarê li ser bingeha stûna duyemîn, û girêkên zarokan li ser stûnên sêyemîn û çaremîn girêdin. Hûn hîn jî hewce ne ku şert û çalakiyan bername bikin, lê naha struktura lîstikê dê tevlihevtir be. Li vir hûn biryar û tevgerên din lê zêde dikin, û dûv re bi guheztina pelê nivîsê ya pênasekirina darê, tevahiya AI-ê xweş bikin. Dûv re, hûn pelê vediguhezînin sêwiranerê lîstikê, yê ku dikare tevgerê bêyî berhevkirina lîstikê an guheztina kodê biguhezîne.

Darên biryarê pir bikêr in dema ku ew bixweber ji komek mezin a mînakan têne çêkirin (mînak, bi karanîna algorîtmaya ID3). Ev wan dike amûrek bi bandor û performansa bilind ji bo dabeşkirina rewşan li ser bingeha daneyên ku hatine bidestxistin. Lêbelê, em ji pergalek hêsan derbas dibin da ku ajanên çalakiyan hilbijêrin.

Senaryoyên

Me pergalek dara biryarê ku şert û çalakiyên pêş-afirandî bikar tîne analîz kir. Kesê ku AI-ê sêwiran dike dikare darê çawa ku bixwaze organîze bike, lê dîsa jî pêdivî ye ku ew xwe bispêre kodkerê ku ew hemî bername kiriye. Ger em karibin amûran bidin sêwiraner da ku şert û mercên xwe an kiryarên xwe biafirîne?

Ji bo ku bernamenûs neçar nebe kodê ji bo şertên Is Ball Left Of Paddle û Is Ball Right Of Paddle binivîsîne, ew dikare pergalek biafirîne ku tê de sêwiraner dê şert û mercan binivîse ku van nirxan kontrol bike. Dûv re daneyên dara biryarê dê wiha xuya bike:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ev di bingeh de heman wekî di tabloya yekem de ye, lê çareseriyên di hundurê xwe de koda xwe hene, hinekî mîna beşa şertî ya daxuyaniyek if. Li aliyê kodê, ev ê di stûna duyemîn de ji bo girêkên biryarê bixwîne, lê li şûna ku li şertek taybetî ya ku were bicîh kirin (Is Ball Left Of Paddle) bigere, ew îfadeya şertî dinirxîne û li gorî rast an xelet vedigere. Ev bi karanîna zimanê nivîsandinê yê Lua an Angelscript pêk tê. Bi karanîna wan, pêşdebirek dikare tiştên di lîstika xwe de bigire (top û paddle) û guhêrbarên ku dê di skrîptê de peyda bibin (ball.position) biafirîne. Di heman demê de, zimanê nivîsandinê ji C ++ hêsantir e. Ew qonaxek berhevokê ya bêkêmasî hewce nake, ji ber vê yekê ew îdeal e ji bo zû rastkirina mantiqa lîstikê û dihêle "ne-koder" bixwe fonksiyonên pêwîst biafirînin.

Di mînaka li jor de, zimanê nivîsandinê tenê ji bo nirxandina îfadeya şertî tê bikar anîn, lê ew dikare ji bo çalakiyan jî were bikar anîn. Mînakî, daneya Move Paddle Right dikare bibe daxuyaniyek nivîsê (ball.position.x += 10). Ji ber vê yekê ku çalakî jî di skrîptê de tête diyar kirin, bêyî ku pêdivî bi bernamekirina Move Paddle Right.

Hûn dikarin hê bêtir biçin û tevahiya dara biryarê bi zimanek nivîsandinê binivîsin. Dê ev kod di forma daxuyaniyên şertî yên hişkkirî de be, lê ew ê di pelên skrîptê yên derveyî de cih bigirin, ango, ew dikarin bêyî berhevkirina tevahiya bernameyê werin guhertin. Hûn dikarin pir caran di dema lîstikê de pelê skrîptê biguherînin da ku zû reaksiyonên AI-ê yên cihêreng ceribandin.

Bersiva bûyerê

Mînakên li jor ji bo Pong bêkêmasî ne. Ew bi domdarî çerxa Hest/Fikir/Act dimeşînin û li gorî rewşa herî dawî ya cîhanê tevdigerin. Lê di lîstikên tevlihevtir de hûn hewce ne ku li hember bûyerên kesane bertek nîşan bidin, û her tiştî bi yekcarî nenirxînin. Pong di vê rewşê de jixwe mînakek xirab e. Ka em yekî din hilbijêrin.

Teqezek bifikire ku dijmin bêtevger in heya ku lîstikvan nas bikin, pişt re ew li gorî "pisporiya" xwe tevdigerin: kes dê biçe "lez" bike, kesek dê ji dûr ve êrîş bike. Ew hîn jî pergalek reaktîf a bingehîn e - "heke lîstikvanek were dîtin, tiştek bike" - lê ew dikare bi mentiqî di bûyerek Player Seen û Reaksiyonê de were dabeş kirin (bersivek hilbijêrin û wê bicîh bikin).

Ev me vedigerîne çerxa Hîs/Fikir/Act. Em dikarin beşek Sense kod bikin ku dê her çarçove kontrol bike ka gelo AI lîstikvan dibîne. Heke ne, tiştek nabe, lê heke ew dibîne, wê hingê bûyera Player Seen tê afirandin. Kodê dê beşek veqetandî hebe ku dibêje "gava ku bûyera Player Seen çêbibe, bike" li ku derê bersiva ku hûn hewce ne ku hûn beşên Bifikirin û Bicih bikin heye. Bi vî rengî, hûn ê bertekên li ser bûyera Player Seen saz bikin: ji bo karakterê "lez" - ChargeAndAttack, û ji bo sniper - HideAndSnipe. Van têkiliyan dikarin di pelê daneyê de ji bo sererastkirina bilez bêyî ku ji nû ve berhev bikin werin afirandin. Li vir jî zimanê nivîsandinê dikare were bikar anîn.

Biryarên dijwar girtin

Her çend pergalên reaksiyonê yên hêsan pir bi hêz in, gelek rewş hene ku ew têrê nakin. Carinan hûn hewce ne ku li ser bingeha tiştê ku ajan niha dike biryarên cûda bidin, lê dijwar e ku meriv vê yekê wekî şertek xeyal bike. Carinan pir şert hene ku meriv wan bi bandor di dara biryar an nivîsarekê de temsîl bike. Carinan hûn hewce ne ku pêşwext binirxînin ka rewş dê çawa biguhezîne berî ku hûn li ser gavê din biryar bidin. Ji bo çareserkirina van pirsgirêkan nêzîkatiyên sofîstîketir hewce ne.

Makîneya dewleta dawî

Makîneya rewşa dawî an jî FSM (makîna dewleta dawî) rêyek e ku meriv bêje ku nûnerê me niha di yek ji çend dewletên gengaz de ye, û ew dikare ji rewşek derbasî rewşek din bibe. Hejmarek dewletên weha hene - ji ber vê yekê navê wê heye. Mînaka herî baş a jiyanê ronahiya trafîkê ye. Li cihên cûda rêzikên cûda yên ronahiyê hene, lê prensîb yek e - her dewlet tiştek temsîl dike (raweste, rêve, hwd.). Ronahîyek trafîkê di her demek diyarkirî de tenê di rewşek de ye, û li ser bingeha rêgezên hêsan ji yek ji ya din digere.

Ew di lîstikan de bi NPC-an re çîrokek wekhev e. Mînakî, em cerdevanek bi van dewletên jêrîn bigirin:

  • Patrolling.
  • Êrîş dikin.
  • Direvin.

Û ev şertên ji bo guhertina dewleta wê:

  • Ger cerdevan dijmin bibîne êrîş dike.
  • Ger cerdevan êrîş bike lê êdî dijmin nebîne, vedigere dewriyeyê.
  • Ger cerdevanek êrîş bike lê bi giranî birîndar bibe, direve.

Di heman demê de hûn dikarin bi guhêrbarek dewleta parêzger û kontrolên cûrbecûr jî heke-daxuyanan binivîsin: gelo dijminek li nêz heye, asta tenduristiya NPC-ê çi ye, hwd. Werin em çend dewletên din lê zêde bikin:

  • Bêkarî - di navbera dewriyeyan de.
  • Lêgerîn - gava ku dijminê dîtbar winda bû.
  • Dîtina Alîkariyê - gava ku dijminek tê dîtin, lê pir bi hêz e ku bi tenê şer bike.

Hilbijartina her yek ji wan tixûbdar e - mînakî, cerdevan ger tenduristiya wî kêm be dê neçe li dijminê veşartî bigere.

Beriya her tiştî, navnîşek mezin a "heke" heye , Ew "Dibe ku pir giran bibe, ji ber vê yekê em hewce ne ku rêbazek fermî bikin ku rê dide me ku em dewlet û veguherînên di navbera dewletan de li ber çavan bigirin. Ji bo vê yekê, em hemî dewletan li ber çavan digirin, û di bin her dewletekê de em hemî veguheztina dewletên din, digel şert û mercên ku ji wan re hewce ne, di navnîşek de dinivîsin.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ev tabloyek veguheztina dewletê ye - rêyek berfireh a nûnertiya FSM. Ka em diagramek xêz bikin û li ser ka çawa behreya NPC diguhezîne serpêhatiyek bêkêmasî bistînin.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Diagram cewhera biryara ji bo vê ajansê li ser bingeha rewşa heyî nîşan dide. Wekî din, ger şerta li kêleka wê rast be, her tîrek veguheztinek di navbera dewletan de nîşan dide.

Her nûvekirinek em rewşa heyî ya ajanê kontrol dikin, li navnîşa veguheztinê dinêrin, û ger şert û mercên veguheztinê pêk werin, ew dewleta nû qebûl dike. Mînakî, her çarçoveyek kontrol dike ka demjimêra 10-saniye qediyaye yan na, û heke wusa be, wê hingê cerdevan ji dewleta Idling diçe Patrolê. Bi heman awayî, dewleta êrîşkar tenduristiya ajanê kontrol dike - heke kêm be, wê hingê ew diçe dewleta Revê.

Ev di navbera dewletan de veguheztinan dike, lê li ser tevgera ku bi dewletan bi xwe ve girêdayî ye çi ye? Di warê bicihanîna behreya rastîn de ji bo dewletek taybetî, bi gelemperî du celeb "hook" hene ku em çalakiyan ji FSM re destnîşan dikin:

  • Çalakiyên ku em bi awayekî periyodîk ji bo rewşa heyî pêk tînin.
  • Çalakiyên ku em di dema derbasbûna ji dewletek bo dewletek din de dikin.

Nimûneyên ji bo celebê yekem. Dewleta Patrolê dê ajanê li ser rêça patrolê her çarçove biguheze. Dewleta êrîşkar dê hewl bide ku êrîşek li her çarçoveyek an veguheztina rewşek ku ev yek pêkan be dest pê bike.

Ji bo celebê duyemîn, veguherîna "heke dijmin xuya ye û dijmin pir bi hêz e, wê hingê biçin dewleta Dîtina Alîkariyê. Divê ajan hilbijêre ku ji bo alîkariyê biçe ku derê û van agahiyan hilîne da ku dewleta Dîtina Alîkariyê zanibe ku biçe ku derê. Dema ku alîkarî tê dîtin, ajan vedigere dewleta Êrîşker. Di vê nuqteyê de, ew ê bixwaze ji hevalbendê tehdîdê re bibêje, ji ber vê yekê dibe ku çalakiya NotifyFriendOfThreat çêbibe.

Careke din, em dikarin bi çavê çerxa Hestî / Bifikirin / Kiryar li vê pergalê binêrin. Aqil di daneyên ku ji hêla mantiqa veguheztinê ve têne bikar anîn de tête cih. Bifikirin - veguhertinên ku di her dewletê de hene. Û Qanûn bi çalakiyên ku bi awayekî periyodîk di nav dewletekê de an di veguheztinên di navbera dewletan de têne kirin.

Carinan şertên veguheztina dengdanê ya domdar dibe ku biha be. Mînakî, heke her ajanek di her çarçovê de hesabên tevlihev pêk bîne da ku diyar bike ka ew dikare dijminan bibîne û fam bike gelo ew dikare ji rewşa Patrolê derbasî Dewleta Êrîş bibe, ev ê gelek wextê CPU bigire.

Guhertinên girîng ên di rewşa cîhanê de mirov dikare wekî bûyerên ku dê biqewimin bêne hesibandin. Li şûna ku FSM rewşa veguheztinê kontrol bike "dikare nûnerê min lîstikvan bibîne?" her çarçove, pergalek veqetandî dikare were mîheng kirin ku kêm caran kontrol bike (mînak 5 car di çirkeyê de). Û encam ev e ku gava ku kontrol derbas dibe, Player Seen derdikeve.

Ev ji FSM-ê re derbas dibe, ku naha divê biçe ser rewşa wergirtî ya Player Seen û li gorî wê bersivê bide. Tevgera encam yek e ji bilî derengiyek hema hema nehesib berî bersivdanê. Lê performans ji ber veqetandina beşa Sense di beşek veqetandî ya bernameyê de çêtir bûye.

Makîneya dewleta dawî ya hiyerarşîk

Lêbelê, xebata bi FSM-yên mezin re her gav ne rehet e. Ger em bixwazin dewleta êrîşê berfireh bikin da ku MeleeAttacking û RangedAttacking ji hev veqetînin, em ê neçar bin ku veguheztinên ji hemî dewletên din ên ku dibin dewleta Êrîş (niha û pêşerojê) biguhezînin.

We belkî dît ku di mînaka me de gelek veguheztinên dubare hene. Piraniya veguheztinên di dewleta Idling de bi veguherînên di dewleta Patrolê de yek in. Dê xweş be ku em xwe dubare nekin, nemaze heke em dewletên mîna hev zêde bikin. Wateya wê yekê ye ku meriv Idling û Patrolling di bin etîketa giştî ya "ne-şerker" de were kom kirin, ku li wir tenê yek komek hevpar a veguherîna dewletên şerker heye. Heger em vê etîketê wekî dewletekê bihesibînin, wê demê bêkarî û patrol dibin binedewlet. Mînakek karanîna tabloyek veguheztinê ya veqetandî ji bo jêrzemîna nû ya ne-şerker:

Dewletên sereke:
Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Rewşa derveyî şer:
Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Û di forma diagramê de:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ew heman pergal e, lê bi dewletek nû ya ne-şerker ku bêkar û patrolê tê de ye. Digel her dewletek ku FSMek bi binerdeyên xwe ve dihewîne (û ev binedewlet, di serî de, FSM-yên xwe dihewînin - û bi vî rengî heya ku hûn hewce bikin), em Makîneyek Dewleta Dawî ya Hiyerarşîk an jî HFSM (makîneya dewleta dawî ya hiyerarşîk) digirin. Bi komkirina dewleta ne-şerker, me komek veguhertinên zêde qut kirin. Em dikarin heman tiştî ji bo her dewletên nû yên bi veguhertinên hevpar re bikin. Mînakî, heke di pêşerojê de em dewleta Êrîşker berbi dewletên MeleeAttacking û MissileAttacking ve berfireh bikin, ew ê bibin binedewletên ku li ser bingeha dûrbûna dijmin û hebûna cebilxaneyê di navbera hev de veguherînin. Wekî encamek, tevgerên tevlihev û tevgerên jêrîn dikarin bi kêmtirîn veguheztinên dubare werin temsîl kirin.

Dara tevgerê

Bi HFSM re, tevliheviyên tevlihev ên tevgerê bi rengek hêsan têne afirandin. Lêbelê, dijwariyek piçûk heye ku biryargirtin di forma qaîdeyên veguheztinê de ji nêz ve bi rewşa heyî ve girêdayî ye. Û di gelek lîstikan de ev tam hewce ye. Û bi baldarî karanîna hiyerarşiya dewletê dikare jimara dubareyên derbasbûnê kêm bike. Lê carinan hûn hewce ne ku qaîdeyên ku dixebitin bêyî ku hûn li kîjan eyaletê ne, an ku hema hema li her eyaletekê bicîh dibin. Mînakî, heke tenduristiya ajanek dakeve% 25, ​​hûn ê bixwazin ku ew bireve bêyî ku ew di şer de be, bêkar bû, an diaxive - hûn ê neçar bin ku vê rewşê li her dewletê zêde bikin. Û heke sêwiranerê we paşê bixwaze ku sînorê tenduristiyê yê nizm ji% 25 biguhezîne% 10, wê hingê pêdivî ye ku ev dîsa were kirin.

Di îdeal de, ev rewş pêdivî bi pergalek heye ku tê de biryarên "di kîjan dewletî de be" li derveyî dewletan bi xwe bin, da ku tenê li cîhek guhertinan çêbike û şert û mercên derbasbûnê dest nede. Darên behrê li vir xuya dikin.

Gelek awayên bicihanîna wan hene, lê esas ji bo hemîyan hema hema yek e û dişibihe dara biryarê: algorîtma bi girêkek "root" dest pê dike, û dar dihewîne girêkên ku biryar an çalakiyan temsîl dikin. Lêbelê çend cûdahiyên sereke hene:

  • Naha girêkan yek ji sê nirxan vedigerînin: Serketî (heke kar qediya), Biserneket (heke ew nekare dest pê bike), an jî dimeşîne (heke ew hîn jî dimeşe û encamek dawî tune).
  • Zêde girêkên biryarê tune ku di navbera du alternatîfan de hilbijêrin. Di şûna wê de, ew girêkên Decorator in, ku yek girêk zarokê wan hene. Ger ew Serkeftin, ew girêka zaroka xwe ya yekane darve dikin.
  • Nodên ku çalakiyan dikin nirxek Rêvebir vedigerînin da ku kiryarên ku têne kirin temsîl bikin.

Ev komek piçûk a girêkan dikare were berhev kirin da ku hejmareke mezin tevgerên tevlihev biafirîne. Ka em parêzgerê HFSM ji mînaka berê wekî dara tevgerê bifikirin:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Bi vê avahiyê re divê ji dewletên Bêkar/Patrol ber bi Êrîşker an dewletên din ve derbasbûnek eşkere nebe. Ger dijminek xuya bibe û tenduristiya karakter kêm be, darvekirin dê li ser girêka Fleing raweste, bêyî ku ew berê kîjan girêk pêk aniye - Patrolkirin, Bêkarkirin, Êrişkirin, an ya din.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Darên behrê tevlihev in - gelek awayên berhevkirina wan hene, û dîtina berhevoka rast a xemilandin û girêkên hevedudanî dikare dijwar be. Di heman demê de pirs jî hene ku meriv çend caran darê kontrol dike - em dixwazin her perçeyek wê derbas bikin an tenê gava ku yek ji şertan guherî? Em çawa dewleta girêdayî girêkan hilînin - em çawa dizanin ku em 10 çirkeyan bêkar man, an jî em çawa zanibin ka kîjan girêk cara paşîn hatine darve kirin da ku em karibin rêzê rast bişopînin?

Ji ber vê yekê gelek pêkanîn hene. Mînakî, hin pergalan girêkên decorator bi decoratorên hundurîn veguhezandine. Dema ku şert û mercên decorator diguherin, ew darê ji nû ve dinirxînin, alîkariya tevlêbûna girêkan dikin, û nûvekirinên demkî peyda dikin.

Pergala-based Utility

Hin lîstik gelek mekanîka cûda hene. Tê xwestin ku ew hemî feydeyên qaîdeyên veguheztinê yên hêsan û gelemperî bistînin, lê ne hewce ne ku di forma dara tevahî ya tevgerê de bin. Li şûna ku hûn bijartinek zelal an darek kiryarên mimkun hebin, hêsantir e ku meriv hemî kiryaran lêkolîn bike û di vê gavê de ya herî guncan hilbijêrin.

Pergala-based Utility dê tenê bi vê yekê re bibe alîkar. Ev pergalek e ku ajan xwedan cûrbecûr çalakiyan e û li ser bingeha karanîna têkildar a her yekê kîjan pêk tîne hildibijêre. Li ku derê bikêrhatî pîvanek kêfî ye ku çiqas girîng an xwestek e ku ajan vê çalakiyê pêk bîne.

Karbidestiya hesabkirî ya çalakiyek li ser bingeha rewş û hawîrdora heyî, ajan dikare di her kêliyê de dewleta din a herî maqûl kontrol bike û hilbijêre. Ev dişibihe FSM-ê, ji bilî ku veguheztin ji hêla texmînek ji bo her dewleta potansiyel, tevî ya heyî, têne destnîşankirin. Ji kerema xwe bala xwe bidin ku em çalakiya herî bikêr hildibijêrin ku em pê ve biçin (an jî bimînin heke me ew jixwe qedandiye). Ji bo cûrbecûr bêtir, ev dikare ji navnîşek piçûk vebijarkek hevseng lê rasthatî be.

Pergal rêzek keyfî ji nirxên kargêriyê destnîşan dike - mînakî, ji 0 (bi tevahî nexwazî ​​​​) heya 100 (bi tevahî xwestî). Her çalakiyek hejmarek parametre hene ku li ser hesabê vê nirxê bandor dike. Vegere ser mînaka parêzgerê me:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Veguheztinên di navbera çalakiyan de nezelal in - her dewletek dikare li dû ya din biçe. Pêşniyarên çalakiyê di nirxên kargêriya vegerî de têne dîtin. Ger dijminek xuya bibe, û ew dijmin bi hêz be, û tenduristiya karakter kêm be, wê hingê hem Fleeing û hem jî FindingHelp dê nirxên bilind ên ne-sifir vegerînin. Di vê rewşê de, FindingHelp dê her gav bilindtir be. Di heman demê de, çalakiyên ne-şerker qet ji 50-an zêdetir venagerin, ji ber vê yekê ew ê her dem ji yên şer kêmtir bin. Pêdivî ye ku hûn vê yekê gava ku çalakiyan çêbikin û karanîna wan hesab bikin hesab bikin.

Di mînaka me de, kiryar an nirxek domdar a sabît an yek ji du nirxên sabît vedigerînin. Pergalek rastîntir dê texmînek ji rêzek domdar a nirxan vegerîne. Mînakî, çalakiya Fleeing heke tenduristiya ajan kêm be nirxên karûbar bilindtir vedigerîne, û heke dijmin pir bi hêz be çalakiya Attacking nirxên karûbar kêmtir vedigerîne. Ji ber vê yekê, çalakiya Revînê di her rewşê de ku ajan hîs dike ku têra xwe tenduristiya wî tune ku dijmin têk bibe, pêşî li Êrîşkirinê digire. Ev dihêle ku çalakî li ser bingeha her hejmarek pîvanan bêne pêşîn kirin, ev nêzîkatî ji dara tevgerê an FSM-ê maqûltir û guhêrbartir dike.

Her çalakiyek ji bo hesabkirina bernameyê gelek şert hene. Ew dikarin bi zimanê nivîsandinê an jî wekî rêzek formulên matematîkî bêne nivîsandin. The Sims, ku rûtînek rojane ya karakterek simule dike, tewra hesabek din lê zêde dike - ajan rêzek "motîvasyonên" werdigire ku bandorê li rêjeyên karûbar dike. Ger karakterek birçî be, ew ê bi demê re hîn birçîtir bibin, û nirxa karanîna çalakiya EatFood dê zêde bibe heya ku karakter wê pêk bîne, asta birçîbûnê kêm bike û nirxa EatFood vegerîne sifir.

Fikra hilbijartina çalakiyan li ser bingeha pergalek rêjeyê pir hêsan e, ji ber vê yekê pergalek-based Utility dikare wekî beşek pêvajoyên biryargirtinê yên AI-ê were bikar anîn, ne ku wekî şûna wan a bêkêmasî were bikar anîn. Dibe ku dara biryarê ji du girêkên zarokan re nirxek bikêrhatî bixwaze û ya bilind hilbijêrin. Bi heman rengî, dara tevgerê dikare xwedan girêkek Karûbarek pêkhatî hebe ku karanîna çalakiyan binirxîne da ku biryar bide ka kîjan zarokê îdam bike.

Tevger û navîgasyon

Di mînakên berê de, me platformek ku em li çepê an rastê diçûn û cerdevanek ku nobetê digirt an jî êrîş dikir hebû. Lê bi rastî em çawa di heyamekê de tevgera ajantiyê bi rê ve dibin? Em çawa lezê saz dikin, em çawa ji astengiyan dûr dikevin, û em çawa rêyek plan dikin dema ku gihandina cîhek ji tenê tevgerîna di xetek rast de dijwartir e? Ka em li vê binêrin.

Hikûmetê

Di qonaxa destpêkê de, em ê texmîn bikin ku her karmendek xwedan nirxek bilez e, ku tê de çiqas bilez dimeşe û di kîjan alî de ye. Ew dikare bi metre di saniyeyê de, kîlometre di saetê de, pixel di çirkekê de, hwd. Bi bîr bîne hêlîna Sense/Think/Act, em dikarin bifikirin ku beşa Think lezekê hildibijêre, û beşa Act wê lezê li ser ajanê tetbîq dike. Bi gelemperî lîstikan pergalek fîzîkê heye ku vî karî ji we re dike, nirxa leza her tiştê fêr dibe û wê sererast dike. Ji ber vê yekê, hûn dikarin AI-ê bi yek peywirê bihêlin - biryar bidin ka kîjan leza ajan divê hebe. Ger hûn dizanin ku ajan li ku derê be, wê hingê hûn hewce ne ku wê bi lezek diyarkirî di riya rast de bimeşînin. Wekheviyek pir piçûk:

xwestin_travel = cihê_destpêkî - agent_position

Dinyayek 2D xeyal bikin. Ajan li xala (-2,-2) ye, mebest li deverek li bakur-rojhilat li xala (30, 20) ye, û rêça pêdivî ye ku ajan bigihîje wir (32, 22). Em bibêjin ku ev pozîsyon bi metre têne pîvandin - heke em leza ajanê 5 metre di çirkeyê de bigirin, wê hingê em ê vektora xweya jicîhûwarkirinê pîvandin û bilezek bi qasî (4.12, 2.83) bistînin. Bi van pîvanan, ajan dê hema hema di 8 çirkeyan de bigihîje cihê xwe.

Hûn dikarin di her kêliyê de nirxan ji nû ve hesab bikin. Ger ajan nîvê rê berbi armancê ve bihata, tevger dê nîvê dirêjahîyê bûya, lê ji ber ku leza herî zêde ajanê 5 m/s ye (me li jor ev biryar da), lez û bez dê heman be. Ev di heman demê de ji bo armancên tevgerê jî dixebite, dihêle ajan gava ku ew diherikin guhertinên piçûk çêbike.

Lê em guheztinek bêtir dixwazin - mînakî, hêdî hêdî leza xwe zêde dikin da ku karakterek ji rawestanê berbi bazdanê simule bikin. Heman tişt dikare di dawiyê de berî rawestandinê were kirin. Ev taybetmendî wekî tevgerên rêvekirinê têne zanîn, ku her yek ji wan navên taybetî hene: Lêgerîn, Revîn, Hatin, hwd. Fikir ev e ku hêzên lezkirinê dikarin li ser leza ajanê werin sepandin, li ser bingeha berhevkirina pozîsyona ajan û leza heyî bi mebestê re. ji bo ku rêbazên cûda yên ku ji bo armancê diçin bikar bînin.

Her tevger xwedî armancek hinekî cûda ye. Lêgerîn û Gihîştin awayên guheztina ajanek berbi cîhek in. Dûrketina Asteng û Veqetandinê tevgera ajanê eyar dike da ku ji astengiyên li ser riya armancê dûr nekevin. Alignment û Cohesion ajanan bi hev re dihêlin. Hejmarek tevgerên rêveberiyê yên cihêreng dikare were berhev kirin da ku vektorek rêyek yekane hilberîne ku hemî faktor li ber çavan digire. Karmendek ku tevgerên Hatina, Veqetandin û Dûrgirtina Astengiyê bikar tîne da ku ji dîwaran û ajanên din dûr bimîne. Ev nêzîkatî li cîhên vekirî bêyî hûrguliyên nehewce baş dixebite.

Di şert û mercên dijwar de, lêzêdekirina tevgerên cihêreng xirabtir dixebite - mînakî, ajanek dikare ji ber nakokiyek di navbera Hatina û Astengiyê de di dîwar de asê bimîne. Ji ber vê yekê, hûn hewce ne ku vebijarkên ku ji lê zêdekirina hemî nirxan tevlihevtir in bifikirin. Rê ev e: li şûna ku hûn encamên her tevgerê lê zêde bikin, hûn dikarin tevgerê di rêgezên cûda de binirxînin û vebijarka çêtirîn hilbijêrin.

Lêbelê, di hawîrdorek tevlihev de ku bi rêyên mirî û vebijarkan ve girêdayî ye, em ê hewceyê tiştek hîn pêşkeftîtir bin.

Dîtina rêyekê

Tevgerên rêvebiriyê ji bo tevgera hêsan li deverek vekirî (qada futbolê an qada futbolê) ku gihandina ji A ber bi B rêyek rast e ku bi tenê bi rêveçûnên piçûk ên li dora astengan ve girêdayî ye. Ji bo rêyên tevlihev, pêdivîya me bi peydakirina rê heye, ku ew rêyek e ji bo vekolîna cîhanê û biryardana li ser rêyek di nav wê de.

Ya herî hêsan ev e ku meriv li her çargoşeyek li tenişta ajanê tevnek bicîh bike û binirxîne ka kîjan ji wan destûr e ku biçe. Ger yek ji wan cîhek be, wê hingê rêça ji her çargoşe berbi ya berê bişopînin heya ku hûn bigihîjin destpêkê. Ev rê ye. Wekî din, pêvajoyê bi meydanên din ên nêzîk re dubare bikin heya ku hûn cîhê xwe bibînin an hûn ji meydanan biqedin (tê vê wateyê ku rêyek mimkun tune). Ya ku bi fermî wekî Lêgerîna Berfireh-Yekemîn an BFS (algorîtmaya lêgerîna fireh-yekemîn) tê zanîn ev e. Di her gavê de ew li her alî dinêre (ji ber vê yekê firehî, "fireh"). Cihê lêgerînê mîna pêlekek e ku dimeşe heya ku digihîje cîhê xwestinê - cîhê lêgerînê di her gavê de berfireh dibe heya ku xala dawî tê de ye, pişt re ew dikare vegere destpêkê.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Wekî encamek, hûn ê navnîşek çargoşeyan bistînin ku li ser wan riya xwestinê tê berhev kirin. Ev rê ye (ji ber vê yekê, peydakirina rê) - navnîşek cîhên ku ajan dê dema ku meqsedê bişopîne serdana wan bike.

Ji ber ku em pozîsyona her çargoşeya cîhanê dizanin, em dikarin tevgerên rêvekirinê bikar bînin da ku bi rê de bimeşin - ji girêka 1 berbi girê 2, dûv re ji girêka 2 berbi girê 3, û hwd. Vebijarka herî hêsan ev e ku meriv ber bi navenda meydana din ve biçe, lê vebijarkek hê çêtir ew e ku meriv di nîvê qiraxa di navbera meydana heyî û ya din de raweste. Ji ber vê yekê, ajan dê bikaribe li ser zivirînên tûj quncikê bibire.

Algorîtmaya BFS di heman demê de dezavantajên xwe jî hene - ew bi qasî çargoşeyan di riya "çewt" de û di riya "rast" de vedikole. Li vir algorîtmayek tevlihevtir a bi navê A* (stêrkek) tê lîstin. Ew bi heman rengî dixebite, lê li şûna ku bi çavê kor li çarşeyên cîran lêkolîn bike (paşê cîranên cîranan, dûv re cîranên cîranên cîranan, û hwd.), ew girêkan di lîsteyek de berhev dike û wan rêz dike da ku girêka din a ku tê vekolîn her gav ew be. ya ku ber bi rêya herî kurt ve diçe. Nod li ser bingeha heurîstîkek ku du tiştan li ber çavan digire - "lêçûn" rêwîtiyek hîpotetîk berbi meydana xwestî (tevî lêçûnên rêwîtiyê) û texmînek ku ew çargoşe ji meqsedê dûr e (alîgirkirina lêgerînê di nav de) têne rêz kirin. riya rast).

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ev mînak nîşan dide ku ajan her car çargoşeyekê dikole, her carê yeka cîran ku ya herî hêvîdar e hildibijêre. Rêya encam wekî BFS ye, lê di pêvajoyê de kêmtir çargoşe hatin hesibandin - ku bandorek mezin li ser performansa lîstikê dike.

Tevgerê bê torê

Lê pir lîstik li ser torê nayên danîn, û bi gelemperî ne gengaz e ku meriv wiya bêyî qurbankirina realîzmê bike. Lihevkirin pêwîst in. Mezinahiya çargoşeyan divê çi be? Pir mezin e û ew ê nikaribin bi rast korîdorên piçûk an ziviran temsîl bikin, pir piçûk in û dê pir çargoşe hebin ku li wan bigere, ku di dawiyê de dê gelek dem bigire.

Yekem tiştê ku meriv fêm dike ev e ku mesh grafiyek girêkên girêdayî dide me. Algorîtmayên A* û BFS bi rastî li ser grafikan dixebitin û qet guh nadin meşa me. Em dikarin girêkan li her cîhê cîhana lîstikê deynin: heya ku têkiliyek di navbera her du girêkên girêdayî de, û her weha di navbera xalên destpêk û dawiyê de û bi kêmanî yek ji girêkan de hebe, dê algorîtma jî wekî berê bixebite. Ji vê re pir caran pergala xala rê tê gotin, ji ber ku her nodek di cîhanê de cîhek girîng temsîl dike ku dikare bibe beşek ji her hejmarek rêyên hîpotetîk.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk
Mînak 1: Di her çargoşe de girêkek. Lêgerîn ji girêka ku ajan lê ye dest pê dike û li girêka meydana xwestinê diqede.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk
Mînak 2: Komek girêkên piçûktir (nîqteyên rê). Lêgerîn li meydana agentê dest pê dike, di nav hejmara pêdiviya girêkan re derbas dibe, û dûv re berbi cîhê xwe didomîne.

Ev pergalek bi tevahî nerm û bi hêz e. Lê di biryardana li ku û çawa cîhê rêyekê de hin baldarî hewce ye, wekî din dibe ku ajan tenê xala herî nêzîk nebînin û nikaribin rê bidin destpêkirin. Ger em bixweber li ser bingeha geometrîya cîhanê xalên rê bi cîh bikin dê hêsantir be.

Li vir tevna navîgasyon an navmesh (navîgasyon mesh) xuya dike. Ev bi gelemperî tevnek 2D ya sêgoşeyan e ku li ser geometrîya cîhanê tê pêçan - li ku derê destûr tê dayîn ku ajan bimeşe. Her yek ji sêgoşekên di tevnekê de dibe girêk di grafê de, û heya sê sêgoşeyên cîran hene ku di grafê de dibin girêkên cîran.

Ev wêne mînakek ji motora Unity ye - ew geometriya li cîhanê analîz kir û navmeshek çêkir (di dîmenê de bi şînê sivik). Di navmeshê de her pirgoş deverek e ku ajanek dikare li wir bisekine an ji pirgoşeyekê berbi pirgoşeyekî din ve bibe. Di vê nimûneyê de, polîgon ji qatên ku ew lê ne piçûktir in - ev yek ji bo ku mezinahiya ajansê were hesibandin, ku dê ji pozîsyona wê ya binavkirî dirêj bibe, tête kirin.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Em dikarin di nav vê meshê de rêyek bigerin, dîsa bi algorîtmaya A* bikar bînin. Ev ê di cîhanê de rêyek hema bêkêmasî bide me, ku hemî geometriyê li ber çavan digire û pêdivî bi girêkên nehewce û çêkirina xalên rê nake.

Pathfinding mijarek pir berfireh e ku ji bo wê yek beşa gotarek têrê nake. Heke hûn dixwazin wê bi hûrgulî bixwînin, wê hingê ev ê bibe alîkar Malpera Amit Patel.

Pîlankirinî

Em bi şopandina rêyê fêr bûne ku carinan ne bes e ku meriv tenê rêgezek hilbijêrin û bimeşin - pêdivî ye ku em rêyek hilbijêrin û çend ziviran bikin da ku bigihîjin cîhê xweya xwestinê. Em dikarin vê ramanê giştî bikin: gihandina armancekê ne tenê gava paşîn e, lê rêzek tevahî ye ku carinan hûn hewce ne ku li çend gavan bigerin da ku hûn bizanin ka ya yekem çi ye. Ji vê re plansazkirin tê gotin. Pathfinding dikare wekî yek ji çend dirêjkirina plansaziyê were hesibandin. Di warê çerxa meya Hiş / Bifikirin / Çalakî de, li vir beşa Think ji bo pêşerojê gelek beşên Act plan dike.

Werin em li mînaka lîstika panelê binêrin Magic: The Gathering. Em pêşî bi kartên jêrîn di destên xwe de diçin:

  • Swamp - 1 mana reş (karta axa) dide.
  • Daristan - 1 mana kesk (karta erd) dide.
  • Wizard Fugitive - Ji bo gazîkirinê 1 mana şîn hewce dike.
  • Elvish Mystic - Ji bo gazîkirinê 1 mana kesk hewce dike.

Em sê kartên mayî paşguh dikin da ku wê hêsantir bikin. Li gorî qaîdeyan, destûr heye ku lîstikvanek di her dorê de 1 qerta erdê bilîze, ew dikare li ser vê qertê "tep bike" da ku mana jê derxe, û dûv re li gorî mêjera mana sêrbazan bavêje (tevî gazîkirina mexlûqê). Di vê rewşê de, lîstikvanê mirov dizane ku Forest bilîze, 1 mana kesk bikire, û dûv re gazî Elvish Mystic bike. Lê lîstika AI-ê çawa dikare vê yekê fêhm bike?

Plansazkirina hêsan

Nêzîkatiya bêkêmasî ev e ku meriv her çalakiyê bi rêzê biceribîne heya ku yên maqûl nemînin. Bi nihêrîna li qertan, AI dibîne ku Swamp dikare çi bilîze. Û ew dilîze. Di vê dewrê de çalakiyên din ma ne? Ew nekare gazî Elvish Mystic û Fugitive Wizard bike, ji ber ku ji wan re mana kesk û şîn hewce dike ku gazî wan bike, dema ku Swamp tenê mana reş peyda dike. Û ew ê êdî nikaribe Forest bilîze, ji ber ku wî berê jî Swamp lîstiye. Bi vî rengî, lîstika AI-ê qaîdeyan şopand, lê ew nebaş kir. Dikare were başkirin.

Plansazkirin dikare navnîşek çalakiyan bibîne ku lîstikê tîne rewşa tê xwestin. Çawa ku her çarçoveyek li ser rêyekê cîranên xwe hebûn (di rêça lêgerînê de), her kiryarek di planê de cîran an paşgirên xwe jî hene. Heta ku em bigihin rewşa tê xwestin, em dikarin li van kiryaran û çalakiyên paşerojê bigerin.

Di mînaka me de, encama tê xwestin ev e ku "ger gengaz be gazî afirîdek bike." Di destpêka zivirînê de, em tenê du kiryarên gengaz ên ku ji hêla qaîdeyên lîstikê ve têne destûr kirin dibînin:

1. Swamp bilîzin (encam: Swamp di lîstikê de)
2. Daristanê bileyizin (encam: Di lîstikê de daristan)

Her çalakiyek ku tête kirin dikare dîsa li gorî qaîdeyên lîstikê ve girêdayî bibe sedema çalakiyên din û yên din bigire. Bifikirin ku me Swamp lîst - ev ê Swamp-ê wekî gava paşîn jê rake (me berê ew lîst), û ev ê di heman demê de Forestê jî rake (ji ber ku li gorî qaîdeyan hûn dikarin her gavê yek qerta erdê bilîzin). Piştî vê yekê, AI-ê girtina 1 mana reş wekî gava paşîn zêde dike ji ber ku vebijarkên din tune. Ger ew pêş de here û Tap the Swamp hilbijêre, ew ê 1 yekîneya mana reş bistîne û dê nikaribe bi wê re tiştek bike.

1. Swamp bilîzin (encam: Swamp di lîstikê de)
1.1 Swamp "Tap" (encam: Swamp "teqandin", +1 yekîneya mana reş)
Çalakî tune - DAWÎ
2. Daristanê bileyizin (encam: Di lîstikê de daristan)

Lîsteya çalakiyan kurt bû, em gihîştin qonaxek mirî. Em pêvajoyê ji bo gava paşîn dubare dikin. Em Forest dilîzin, çalakiya "1 mana kesk bistînin" vekin, ku di encamê de dê çalakiya sêyemîn vebike - gazî Elvish Mystic bike.

1. Swamp bilîzin (encam: Swamp di lîstikê de)
1.1 Swamp "Tap" (encam: Swamp "teqandin", +1 yekîneya mana reş)
Çalakî tune - DAWÎ
2. Daristanê bileyizin (encam: Di lîstikê de daristan)
2.1 Daristana "Tap" (encam: Daristan "teqandin", +1 yekîneya mana kesk)
2.1.1 Gazî Elvish Mystic bike (encam: Elvish Mystic di lîstikê de, -1 mana kesk)
Çalakî tune - DAWÎ

Di dawiyê de, me hemî kiryarên gengaz lêkolîn kir û planek ku gazî afirîdek dike dît.

Ev mînakek pir hêsankirî ye. Tête pêşniyar kirin ku hûn nexşeya çêtirîn çêtirîn hilbijêrin, ji bilî her planek ku hin pîvanan pêk tîne. Bi gelemperî gengaz e ku meriv planên potansiyel li ser bingeha encam an berjewendiya giştî ya pêkanîna wan binirxîne. Hûn dikarin ji bo lîstina qertek axê 1 pûan û ji bo gazîkirina mexlûqekî jî 3 xalan bi dest bixin. Lîstina Swamp dê planek 1 xalî be. Û lîstina Daristan → Tap the Forest → gazîkirina Elvish Mystic dê tavilê 4 xalan bide.

Bi vî rengî plansazkirin di Magic: The Gathering de dixebite, lê heman mantiq di rewşên din de jî derbas dibe. Mînakî, livîna piyonekê da ku cîh ji metran re çêbike ku di satrancê de tevbigere. An jî li pişt dîwarek veşêrin ku hûn bi vî rengî bi ewlehî di XCOM-ê de gulebaran bikin. Bi gelemperî, hûn ramanê digirin.

Plansaziya çêtirîn

Carinan gelek çalakiyên potansiyel hene ku meriv her vebijarkek gengaz bifikire. Vegera mînaka bi Magic: The Gathering: Ka em bibêjin ku di lîstikê de û di destê we de çend kartên erd û mexlûqan hene - hejmara tevliheviyên gengaz ên tevgerê dikare bi dehan be. Gelek çareseriyên pirsgirêkê hene.

Rêbaza yekem zincîrkirina paşverû ye. Li şûna ku hûn hemî berhevokan biceribînin, çêtir e ku hûn bi encama dawîn dest pê bikin û hewl bidin ku rêyek rasterast bibînin. Li şûna ku em ji koka darê berbi pelek taybetî ve biçin, em berovajî vê yekê dimeşin - ji pel berbi kokê. Ev rêbaz hêsantir û zûtir e.

Ger dijmin 1 tenduristiyê hebe, hûn dikarin plana "peymana 1 an jî bêtir zirarê" bibînin. Ji bo bidestxistina vê yekê, divê çend şert bêne bicîh kirin:

1. Zirar dikare ji hêla sêwiranê ve bibe - divê di dest de be.
2. Ji bo avêtina sêrbazê, hûn hewceyê mana.
3. Ji bo bidestxistina mana, hûn hewce ne ku karta axa lîstin.
4. Ji bo lîstina karta axê, divê hûn di destê we de hebe.

Rêyek din lêgerîna çêtirîn-yekemîn e. Li şûna ku em hemî riyan biceribînin, em ya herî guncaw hildibijêrin. Bi gelemperî, ev rêbaz bêyî lêçûnên lêgerînê yên nehewce nexşeya çêtirîn dide. A* formek lêgerîna yekem a çêtirîn e - bi vekolîna rêyên herî sozdar ji destpêkê ve, ew jixwe dikare riya çêtirîn bibîne bêyî ku vebijarkên din kontrol bike.

Vebijêrkek lêgerîna çêtirîn-yekemîn a balkêş û her ku diçe populer Lêgerîna Dara Monte Carlo ye. Li şûna ku texmîn bike ka kîjan plan ji yên din çêtir in dema ku her çalakiya paşîn hilbijêrin, algorîtm di her gavê de serketiyên rasthatî hildibijêre heya ku bigihîje dawiyê (gava ku plan di encamê de serkeftin an têkçûn bû). Encama paşîn paşê tê bikar anîn da ku giraniya vebijarkên berê zêde bike an kêm bike. Bi dûbarekirina vê pêvajoyê çend caran li pey hev, algorîtma texmînek baş dide ku tevgera paşîn a çêtirîn çi ye, hetta rewş biguhere (heke dijmin tevdîr bike da ku destwerdana lîstikvan bike).

Ti çîrokek di derbarê plansazkirina di lîstikan de bêyî Plansaziya Çalakiya Armanc-Oriented an GOAP (plansaziya çalakiyê-mebest-armanc) temam nabe. Ev rêbazek ku bi berfirehî tê bikar anîn û nîqaş kirin e, lê ji bilî çend hûrguliyên cihêreng, ew di bingeh de rêbaza zincîrkirina paşverû ye ku me berê li ser behs kir. Ger armanc "hilweşandina lîstikvan" bû û lîstikvan li pişt perdeyê be, plan dikare ev be: bi bombeyekê hilweşînin → bistînin → bavêjin.

Bi gelemperî çend armanc hene, her yek bi pêşengiya xwe. Ger armanca herî pêşîn nekare biqede (tu tevheviya çalakiyan nexşeyek "lîstikvan bikuje" çêdike ji ber ku lîstikvan nayê dîtin), AI dê vegere armancên pêşîn ên jêrîn.

Perwerde û adaptasyon

Me berê jî got ku lîstika AI bi gelemperî fêrbûna makîneyê bikar nayîne ji ber ku ew ji bo birêvebirina ajanên di wextê rast de ne maqûl e. Lê ev nayê wê wateyê ku hûn nikarin tiştek ji vê deverê deyn bikin. Em di gulebaranê de dijberek dixwazin ku em dikarin tiştek jê fêr bibin. Mînakî, li ser pozîsyonên çêtirîn li ser nexşeyê fêr bibin. An jî dijberek di lîstikek şer de ku dê tevgerên lîstikvan ên ku pir caran têne bikar anîn asteng bike, wî teşwîq bike ku yên din bikar bîne. Ji ber vê yekê fêrbûna makîneyê dikare di rewşên weha de pir bikêr be.

Statîstîk û Îhtîmal

Berî ku em bikevin nav mînakên tevlihev, werin em bibînin ka em dikarin çend pîvandinên hêsan û bi karanîna wan ji bo biryaran çiqas dûr herin. Mînakî, stratejiya rast-dem - em çawa diyar dikin ka lîstikvanek dikare di çend hûrdemên pêşîn ên lîstikê de êrîşek bike û kîjan berevaniyê li hember vê yekê amade bike? Em dikarin serpêhatiyên paşîn ên lîstikvanek bixwînin da ku fêm bikin ka reaksiyonên pêşerojê çi dibin. Destpêkê, me daneyên wusa xav tune, lê em dikarin wê berhev bikin - her carê ku AI li dijî mirovek dilîze, ew dikare dema êrîşa yekem tomar bike. Piştî çend danişînan, em ê navînek wextê ku lîstikvan di pêşerojê de êrîş bike bistînin bistînin.

Di nav nirxên navîn de pirsgirêkek jî heye: heke lîstikvanek 20 carî lez kir û 20 carî hêdî hêdî lîst, wê hingê nirxên pêwîst dê li deverek navîn bin, û ev ê tiştek bikêr nede me. Yek çareserî sînorkirina daneya têketinê ye - 20 perçeyên paşîn dikarin bêne hesibandin.

Nêzîkatiyek wusa tête bikar anîn dema ku îhtîmala hin kiryaran tê texmîn kirin ku tercîhên lîstikvanê berê dê di pêşerojê de yek bin. Ger lîstikvanek pênc caran bi guleya agir, du caran bi birûskê û carekê jî bi mele êrîşî me bike, diyar e ku ew guleya agir tercîh dike. Werin em îhtîmala bikaranîna çekên cihêreng derxînin û bibînin: agir = 62,5%, birûs = 25% û melee = 12,5%. Lîstika me AI hewce dike ku xwe amade bike da ku xwe ji agir biparêze.

Rêbazek din a balkêş ev e ku hûn Klasifkerê Naive Bayes bikar bînin da ku mîqdarên mezin daneyên têketinê bixwînin û rewşê dabeş bikin da ku AI bi awayê xwestinê reaksiyonê bike. Dabeşkerên Bayesian herî baş ji bo karanîna wan di fîlterên spam e-nameyê de têne zanîn. Li wir ew peyvan lêkolîn dikin, wan didin ber hev li cihê ku ew peyvan berê xuya bûne (di spam an na), û di derbarê e-nameyên hatine de encaman derdixin. Em dikarin heman tiştî bi hindik ketinan jî bikin. Li ser bingeha hemî agahdariya kêrhatî ya ku AI-ê dibîne (wek mînak kîjan yekîneyên dijmin têne afirandin, an ew çi efsûn bikar tînin, an wan çi teknolojiyên wan lêkolîn kirine), û encama dawîn (şer an aştî, bazdan an parastin, hwd.) - em ê tevgera AI-ê ya xwestin hilbijêrin.

Hemî van rêbazên perwerdehiyê bes in, lê tê pêşniyar kirin ku wan li ser bingeha daneyên ceribandinê bikar bînin. AI dê fêr bibe ku li gorî stratejiyên cihêreng ên ku lîstikvanên we bikar anîne biguncîne. AI-ya ku piştî serbestberdanê bi lîstikvan re adapte dibe dibe ku têkbirina pir pêşbînbar an jî pir dijwar be.

Adaptasyona bingehîn a nirxê

Ji ber naveroka cîhana lîstika me û qaîdeyên me, em dikarin li şûna ku tenê daneyên têketinê bikar bînin, komek nirxên ku bandorê li biryargirtinê dikin biguhezînin. Em vê yekê dikin:

  • Bila AI-ê daneyên li ser rewşa cîhanê û bûyerên sereke di dema lîstikê de berhev bike (wek li jor).
  • Ka em li ser bingeha vê daneyê çend nirxên girîng biguhezînin.
  • Em biryarên xwe li ser bingeha pêvajoyê an nirxandina van nirxan pêk tînin.

Mînakî, ajanek çend jûreyên ku li ser nexşeyek gulebarana yekem-kesê hilbijêrin hene. Her jûreyek nirxa xwe heye, ku diyar dike ku meriv çiqasî xwestî ye ku were serdan. AI-ê li gorî nirxê bi korfelaqî hildibijêre ku kîjan jûreyê biçe. Dûv re ajan tê bîra wî ku ew li kîjan jûreyê hatiye kuştin û nirxa wê kêm dike (îhtîmala ku ew ê vegere wir). Bi heman rengî ji bo rewşa berevajî - heke ajan gelek dijberan hilweşîne, wê hingê nirxa jûreyê zêde dibe.

Modela Markov

Ger me daneyên berhevkirî bikar bînin da ku pêşbîniyan bikin? Ger em her jûreyek ku em lîstikvanek tê de dibînin ji bo demek diyar bi bîr bînin, em ê pêşbînî bikin ku lîstikvan dikare biçe kîjan jûreyê. Bi şopandin û tomarkirina tevgerên lîstikvan li seranserê jûreyan (nirxan), em dikarin wan pêşbîn bikin.

Werin em sê jûreyan bigirin: sor, kesk û şîn. Û her weha çavdêriyên ku me dema temaşekirina danişîna lîstikê tomar kir:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Hejmara çavdêriyên li her jûreyê hema hema wekhev e - em hîn jî nizanin li ku derê ji bo kemînê cîhek baş çêbikin. Di heman demê de berhevkirina statîstîkan ji hêla nûvekirina lîstikvanan ve, ku li seranserê nexşeyê bi rengek wekhev xuya dikin, tevlihev e. Lê daneyên li ser jûreya din a ku ew têkevin piştî ku li ser nexşeyê xuya dibin, jixwe kêrhatî ne.

Tê dîtin ku jûreya kesk li gorî lîstikvanan e - pir kes ji jûreya sor ber bi wê ve diçin, 50% ji wan li wir bêtir dimînin. Odeya şîn, berevajî, ne populer e; hema bêje kes naçe wê, û ger bike, ew dirêj namîne.

Lê dane ji me re tiştek girîngtir vedibêje - gava lîstikvanek li jûreyek şîn be, jûreya din a ku em wî tê de dibînin dê sor be, ne kesk. Her çend jûreya kesk ji jûreya sor populertir e jî, heke lîstikvan di jûreya şîn de be rewş diguhere. Rewşa din (ango jûreya ku lîstikvan wê biçe) bi rewşa berê ve girêdayî ye (ango jûreya lîstikvan niha tê de ye). Ji ber ku em pêwendiyan vedikolin, em ê pêşbîniyên rasttir bikin ji ya ku em tenê çavdêriyên serbixwe bijmêrin.

Pêşbînkirina rewşek paşerojê li ser bingeha daneyên dewleta berê, modela Markov, û nimûneyên weha (bi jûreyan) jê re zincîreyên Markov tê gotin. Ji ber ku qalibên îhtîmala guhertinên di navbera dewletên li pey hev de temsîl dikin, ew bi dîtbarî wekî FSM bi îhtimalek li dora her veguheztinê têne xuyang kirin. Berê, me FSM bikar anî da ku rewşa behrê ya ku nûnerek tê de bû temsîl bike, lê ev têgeh li her dewletê dirêj dibe, gelo ew bi ajan re têkildar be an na. Di vê rewşê de, dewlet odeya ku ajan dagir dike temsîl dikin:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ev rêgezek hêsan a temsîlkirina îhtîmala têkildar a guheztinên dewletê ye, ku hin jêhatîbûnê dide AI-ê ku pêşbîniya dewleta din bike. Hûn dikarin çend gavan pêşbînî bikin.

Ger lîstikvanek di jûreya kesk de be, şansê 50% heye ku gava din were dîtin ew ê li wir bimîne. Lê şansên ku ew ê piştî wê jî li wir bimîne çi ne? Ne tenê şansek heye ku lîstikvan piştî du çavdêriyan di jûreya kesk de bimîne, lê di heman demê de şansek heye ku ew derkeve û vegere. Li vir tabloya nû ye ku daneyên nû li ber çavan digire:

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk

Ew nîşan dide ku şansê dîtina lîstikvan di jûreya kesk de piştî du çavdêriyan dê bibe 51% - 21% ku ew ê ji odeya sor be, 5% ji wan ku lîstikvan dê serdana jûreya şîn a di navbera wan de bike, û 25% ku lîstikvan dê nekeve odeya kesk.

Tablo tenê amûrek dîtbar e - pêvajo tenê di her gavê de pirkirina îhtîmalan hewce dike. Ev tê vê wateyê ku hûn dikarin bi yek hişyariyê li pêşerojê dûr binihêrin: em texmîn dikin ku şansê ketina jûreyek bi tevahî bi jûreya heyî ve girêdayî ye. Ji vê re Taybetmendiya Markov tê gotin - dewleta pêşerojê tenê bi niha ve girêdayî ye. Lê ev XNUMX% ne rast e. Lîstik dikarin li gorî faktorên din biryaran biguhezînin: asta tenduristî an mîqdara cebilxane. Ji ber ku em van nirxan tomar nakin, pêşbîniyên me dê kêmtir rast bin.

N-Gram

Li ser mînaka lîstikek şerker û pêşbînkirina tevgerên hevbeş ên lîstikvan çi ye? Hemen! Lê li şûna yek dewlet an bûyerek, em ê hemî rêzikên ku lêdanek hevbeş pêk tînin lêkolîn bikin.

Yek awayê kirina vê yekê ev e ku meriv her têketinê (wek Kick, Punch an Block) di tamponekê de hilîne û tevahî tampon wekî bûyerek binivîse. Ji ber vê yekê lîstikvan çend caran Kick, Kick, Punch dike da ku êrîşa SuperDeathFist bikar bîne, pergala AI-ê hemî têketinan di tamponek de hilîne û sêyên paşîn ên ku di her gavê de hatine bikar anîn bi bîr tîne.

Meriv çawa AI-ya lîstikê biafirîne: rêbernameyek ji bo destpêk
(Rêzên bi qelew in dema ku lîstikvan êrîşa SuperDeathFist dest pê dike.)

Dema ku lîstikvan Kick hildibijêre, li dû Kickek din, AI dê hemî vebijarkan bibîne, û dûv re bala xwe bide ku têketina paşîn her gav Punch e. Ev ê bihêle ku ajan tevgera hevber a SuperDeathFist pêşbîn bike û heke gengaz be wê asteng bike.

Ji van rêzikên bûyeran re N-gram tê gotin, ku N hejmara hêmanên tomarkirî ye. Di mînaka berê de ew 3-gram (trigram) bû, ku tê vê wateyê: du navnîşên yekem ji bo pêşbînkirina ya sêyemîn têne bikar anîn. Li gorî vê yekê, di 5-gram de, çar navnîşên yekem pêncemîn pêşbînî dikin û hwd.

Sêwiraner pêdivî ye ku mezinahiya N-gram bi baldarî hilbijêrin. N-ya piçûktir bîranînek hindik hewce dike lê di heman demê de kêmtir dîrok jî hilîne. Mînakî, 2-gramek (bigram) dê Kick, Kick an Kick, Punch tomar bike, lê dê nikaribe Kick, Kick, Punch hilîne, ji ber vê yekê AI dê bersivê nede kombuna SuperDeathFist.

Ji hêla din ve, hejmarên mezin bêtir bîranîn hewce dike û AI-ê dê hîn dijwartir be ji ber ku dê gelek vebijarkên gengaz hebin. Ger we sê têlên gengaz ên Kick, Punch an Block hebûya, û me 10-gramek bikar anîbûya, ew ê bi qasî 60 hezar vebijarkên cihêreng be.

Modela bigram zincîreyek Markov a hêsan e - her cotek dewleta berê/dewleta heyî bigramek e, û hûn dikarin li ser bingeha yekem dewleta duyemîn pêşbînî bikin. N-gramên 3-gram û mezintir jî dikarin wekî zincîrên Markov bêne hesibandin, ku hemî hêman (ji bilî ya paşîn a di N-gramê de) bi hev re dewleta yekem û hêmana paşîn ya duyemîn pêk tînin. Mînaka lîstika şer şansê derbasbûna ji rewşa Kick û Kick bo rewşa Kick û Punch nîşan dide. Bi dermankirina gelek têketinên dîroka têketinê wekî yekîneyek yekane, em bi bingehîn rêzika têketinê vediguhezînin beşek ji tevahiya dewletê. Ev taybetmendiya Markov dide me, ku destûrê dide me ku em zincîreyên Markov bikar bînin da ku têketina paşîn pêşbîn bikin û texmîn bikin ka dê paşê çi tevgera hevbeş be.

encamê

Me di pêşveçûna îstîxbarata sûnî de li ser amûr û nêzîkatiyên herî gelemperî axivîn. Me her weha li rewşên ku ew hewce ne ku werin bikar anîn û ku ew bi taybetî bikêr in jî mêze kir.

Divê ev bes be ku hûn bingehên lîstika AI-ê fam bikin. Lê, bê guman, ev hemî rêbaz ne. Kêmtir populer, lê ne kêmtir bi bandor ev in:

  • algorîtmayên optimîzasyonê di nav de hilkişîna çiyê, daketina gradient û algorîtmayên genetîkî
  • algorîtmayên lêgerîn/plansaziyê yên dijber (biçûkkirina herî kêm û alfa-beta)
  • rêbazên dabeşkirinê (perceptron, torên neuralî û makîneyên vektorê piştgirî)
  • pergalên ji bo hilberandina têgihiştin û bîranîna ajanan
  • Nêzîkatiyên mîmarî yên ji AI-yê (pergalên hîbrîd, mîmariyên binesaziyê û awayên din ên girtina pergalên AI-ê)
  • Amûrên anîmasyonê (plankirin û hevrêziya tevgerê)
  • faktorên performansê (asta hûragahiyan, her dem, û algorîtmayên dabeşkirina demê)

Çavkaniyên serhêl li ser mijarê:

1. GameDev.net heye beşa bi gotar û tutorials li ser AIû herweha forum.
2. AiGameDev.com gelek pêşkêşî û gotaran li ser cûrbecûr mijarên ku bi pêşkeftina lîstika AI-ê ve girêdayî ne hene.
3. GDC Vault mijarên ji Civîna GDC AI-ê vedihewîne, ku gelek ji wan belaş têne peyda kirin.
4. Materyalên kêrhatî jî li ser malperê têne dîtin AI Game Bernamenûs Guild.
5. Tommy Thompson, lêkolînerê AI û pêşdebirê lîstikê, vîdyoyan li ser YouTube çêdike AI û Games bi ravekirin û lêkolîna AI-ê di lîstikên bazirganî de.

Pirtûkên li ser mijarê:

1. Rêzeya pirtûka Game AI Pro berhevokek gotarên kurt e ku rave dike ka meriv çawa taybetmendiyên taybetî bicîh tîne an meriv çawa pirsgirêkên taybetî çareser dike.

Lîstika AI Pro: Hikmeta Berhevkirî ya Pisporên Lîstika AI
Lîstika AI Pro 2: Hikmeta Berhevkirî ya Pisporên Lîstika AI
Lîstika AI Pro 3: Hikmeta Berhevkirî ya Pisporên Lîstika AI

2. AI Game Programming series Wisdom selefê rêzikên Game AI Pro ye. Ew rêbazên kevntir dihewîne, lê hema hema hemî îro jî têkildar in.

Wisdom 1 Programming Game AI
Wisdom 2 Programming Game AI
Wisdom 3 Programming Game AI
Wisdom 4 Programming Game AI

3. Îstixbarata Hunerî: Nêzîktêdayînek Nûjen yek ji nivîsarên bingehîn e ji bo her kesê ku dixwaze qada giştî ya îstîxbarata sûnî fam bike. Ev ne pirtûkek li ser pêşkeftina lîstikê ye - ew bingehên AI-ê hîn dike.

Source: www.habr.com

Add a comment