Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Nilikutana na nyenzo za kupendeza kuhusu akili ya bandia katika michezo. Kwa maelezo ya mambo ya msingi kuhusu AI kwa kutumia mifano rahisi, na ndani kuna zana nyingi muhimu na mbinu kwa ajili ya maendeleo yake rahisi na muundo. Jinsi, wapi na wakati wa kuzitumia pia kuna.

Mifano nyingi zimeandikwa kwa pseudocode, kwa hiyo hakuna ujuzi wa juu wa programu unahitajika. Chini ya kukata kuna karatasi 35 za maandishi na picha na gifs, hivyo uwe tayari.

UPD. Ninaomba msamaha, lakini tayari nimefanya tafsiri yangu mwenyewe ya makala hii kuhusu Habre MgonjwaZero. Unaweza kusoma toleo lake hapa, lakini kwa sababu fulani makala hiyo ilinipitisha (nilitumia utafutaji, lakini kuna kitu kilienda vibaya). Na kwa kuwa ninaandika kwenye blogi iliyojitolea kwa maendeleo ya mchezo, niliamua kuacha toleo langu la tafsiri kwa wanachama (baadhi ya pointi zimeundwa tofauti, baadhi ziliachwa kwa makusudi kwa ushauri wa watengenezaji).

AI ni nini?

Mchezo AI inazingatia hatua gani kitu kinapaswa kufanya kulingana na hali ambayo iko. Huu kwa kawaida hujulikana kama usimamizi wa "wakala mahiri", ambapo wakala ni mhusika mchezaji, gari, roboti, au wakati mwingine kitu kisichoeleweka zaidi: kikundi kizima cha huluki au hata ustaarabu. Katika kila hali, ni jambo ambalo lazima lione mazingira yake, lifanye maamuzi kwa kuzingatia hilo, na litende kwa mujibu wao. Huu unaitwa mzunguko wa Sense/Fikiria/Tendo:

  • Hisia: Wakala hupata au kupokea taarifa kuhusu vitu katika mazingira yake ambavyo vinaweza kuathiri tabia yake (vitisho vilivyo karibu, vitu vya kukusanya, maeneo ya kuvutia ya kuchunguza).
  • Fikiria: Wakala anaamua jinsi ya kuitikia (huzingatia kama ni salama vya kutosha kukusanya vitu au kama anapaswa kupigana/kujificha kwanza).
  • Tendo: wakala hufanya vitendo ili kutekeleza uamuzi wa awali (huanza kuelekea kwa adui au kitu).
  • ...sasa hali imebadilika kutokana na matendo ya wahusika, hivyo mzunguko unajirudia na data mpya.

AI huelekea kuzingatia sehemu ya Sense ya kitanzi. Kwa mfano, magari ya uhuru huchukua picha za barabara, kuchanganya na data ya rada na lidar, na kutafsiri. Hii kwa kawaida hufanywa kwa kujifunza kwa mashine, ambayo huchakata data inayoingia na kuipa maana, na kutoa maelezo ya kisemantiki kama "kuna gari lingine umbali wa yadi 20 mbele yako." Haya ndiyo yanayoitwa matatizo ya uainishaji.

Michezo haihitaji mfumo changamano ili kutoa taarifa kwa kuwa data nyingi tayari ni sehemu yake muhimu. Hakuna haja ya kutekeleza kanuni za utambuzi wa picha ili kubaini kama kuna adui mbeleni—mchezo tayari unajua na kulisha taarifa moja kwa moja katika mchakato wa kufanya maamuzi. Kwa hivyo, sehemu ya Sense ya mzunguko mara nyingi ni rahisi zaidi kuliko sehemu ya Fikiria na Tenda.

Mapungufu ya Mchezo AI

AI ina idadi ya mapungufu ambayo lazima izingatiwe:

  • AI haihitaji kufunzwa mapema, kana kwamba ni algorithm ya kujifunza kwa mashine. Haijalishi kuandika mtandao wa neva wakati wa ukuzaji ili kufuatilia makumi ya maelfu ya wachezaji na kujifunza njia bora ya kucheza dhidi yao. Kwa nini? Kwa sababu mchezo haujatolewa na hakuna wachezaji.
  • Mchezo unapaswa kuwa wa kufurahisha na wenye changamoto, kwa hivyo mawakala hawapaswi kutafuta mbinu bora dhidi ya watu.
  • Mawakala wanahitaji kuangalia uhalisia ili wachezaji wahisi kama wanacheza dhidi ya watu halisi. Programu ya AlphaGo iliwashinda wanadamu, lakini hatua zilizochaguliwa zilikuwa mbali sana na uelewa wa jadi wa mchezo. Ikiwa mchezo unaiga mpinzani wa kibinadamu, hisia hii haipaswi kuwepo. Algorithm inahitaji kubadilishwa ili ifanye maamuzi yanayokubalika badala ya yale bora.
  • AI lazima ifanye kazi kwa wakati halisi. Hii ina maana kwamba kanuni haiwezi kuhodhi matumizi ya CPU kwa muda mrefu kufanya maamuzi. Hata milisekunde 10 ni ndefu sana, kwa sababu michezo mingi inahitaji tu milisekunde 16 hadi 33 ili kufanya uchakataji wote na kuendelea hadi kwenye fremu inayofuata ya michoro.
  • Kwa hakika, angalau sehemu ya mfumo inapaswa kuendeshwa na data, ili wasioweka coders wanaweza kufanya mabadiliko na marekebisho yanaweza kutokea kwa haraka zaidi.

Wacha tuangalie mbinu za AI zinazoshughulikia mzunguko mzima wa Sense/Fikiria/Tendo.

Kufanya Maamuzi ya Msingi

Wacha tuanze na mchezo rahisi zaidi - Pong. Kusudi: sogeza kasia ili mpira utoke juu yake badala ya kuruka nyuma yake. Ni kama tenisi, ambapo unapoteza ikiwa hautapiga mpira. Hapa AI ina kazi rahisi - kuamua ni mwelekeo gani wa kusonga jukwaa.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kauli zenye masharti

Kwa AI huko Pong, suluhisho dhahiri zaidi ni kujaribu kila wakati kuweka jukwaa chini ya mpira.

Algorithm rahisi ya hii, iliyoandikwa kwa pseudocode:

kila sura/sasisho wakati mchezo unaendelea:
ikiwa mpira uko upande wa kushoto wa kasia:
sogeza kasia kushoto
sivyo ikiwa mpira uko upande wa kulia wa kasia:
sogeza kasia kulia

Ikiwa jukwaa linasonga kwa kasi ya mpira, basi hii ndio algorithm inayofaa kwa AI huko Pong. Hakuna haja ya kutatiza chochote ikiwa hakuna data nyingi na vitendo vinavyowezekana kwa wakala.

Mbinu hii ni rahisi sana hivi kwamba mzunguko mzima wa Sense/Fikiria/Tendo hauonekani kwa urahisi. Lakini iko pale:

  • Sehemu ya Sense iko katika mbili ikiwa taarifa. Mchezo unajua mpira ulipo na jukwaa liko wapi, kwa hivyo AI huiangalia kwa habari hiyo.
  • Sehemu ya Fikiria pia imejumuishwa katika hizo mbili ikiwa taarifa. Zinajumuisha suluhisho mbili, ambazo katika kesi hii ni za kipekee. Kama matokeo, moja ya vitendo vitatu huchaguliwa - songa jukwaa upande wa kushoto, uhamishe kulia, au usifanye chochote ikiwa tayari imewekwa kwa usahihi.
  • Sehemu ya Sheria inapatikana katika taarifa za Sogeza Paddle Kushoto na Sogeza Kulia. Kulingana na muundo wa mchezo, wanaweza kusogeza jukwaa papo hapo au kwa kasi mahususi.

Mbinu kama hizo huitwa tendaji - kuna seti rahisi ya sheria (katika kesi hii ikiwa taarifa katika nambari) ambayo huguswa na hali ya sasa ya ulimwengu na kuchukua hatua.

Mti wa uamuzi

Mfano wa Pong kwa kweli ni sawa na dhana rasmi ya AI inayoitwa mti wa uamuzi. Algorithm inapitia ili kufikia "jani" - uamuzi kuhusu hatua ya kuchukua.

Wacha tufanye mchoro wa kizuizi cha mti wa uamuzi kwa algorithm ya jukwaa letu:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kila sehemu ya mti inaitwa nodi - AI hutumia nadharia ya grafu kuelezea miundo kama hii. Kuna aina mbili za nodi:

  • Nodi za maamuzi: kuchagua kati ya njia mbili mbadala kulingana na kujaribu hali fulani, ambapo kila mbadala inawakilishwa kama nodi tofauti.
  • Nodi za mwisho: Kitendo cha kutekeleza ambacho kinawakilisha uamuzi wa mwisho.

Algorithm huanza kutoka nodi ya kwanza ("mizizi" ya mti). Hufanya uamuzi kuhusu nodi ya mtoto kwenda, au hutekeleza kitendo kilichohifadhiwa kwenye nodi na kutoka.

Kuna faida gani ya kuwa na mti wa maamuzi kufanya kazi sawa na kama taarifa katika sehemu iliyopita? Kuna mfumo wa jumla hapa ambapo kila uamuzi una sharti moja tu na matokeo mawili yanayowezekana. Hii inamruhusu msanidi programu kuunda AI kutoka kwa data inayowakilisha maamuzi kwenye mti bila kuibandika kwa bidii. Wacha tuwasilishe kwa namna ya meza:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kwa upande wa nambari utapata mfumo wa kusoma kamba. Unda nodi kwa kila mmoja wao, unganisha mantiki ya uamuzi kulingana na safu ya pili, na nodi za watoto kulingana na safu ya tatu na ya nne. Bado unahitaji kupanga hali na vitendo, lakini sasa muundo wa mchezo utakuwa ngumu zaidi. Hapa unaongeza maamuzi na vitendo vya ziada, na kisha ubinafsishe AI ​​nzima kwa kuhariri tu faili ya maandishi ya ufafanuzi wa mti. Kisha, unahamisha faili kwa mbuni wa mchezo, ambaye anaweza kubadilisha tabia bila kurejesha mchezo au kubadilisha msimbo.

Miti ya maamuzi ni muhimu sana inapojengwa kiotomatiki kutoka kwa seti kubwa ya mifano (kwa mfano, kwa kutumia algoriti ya ID3). Hii inazifanya kuwa zana bora na ya utendaji wa juu ya kuainisha hali kulingana na data iliyopatikana. Hata hivyo, tunapita zaidi ya mfumo rahisi kwa mawakala kuchagua vitendo.

Matukio

Tulichanganua mfumo wa mti wa maamuzi ambao ulitumia hali na vitendo vilivyoundwa awali. Mtu anayeunda AI anaweza kupanga mti jinsi anavyotaka, lakini bado anapaswa kutegemea msimbo aliyepanga yote. Je, ikiwa tunaweza kumpa mbuni zana za kuunda hali au vitendo vyao wenyewe?

Ili mtayarishaji programu asilazimike kuandika msimbo wa masharti ya Je, Mpira wa Kushoto wa Paddle na Je, Mpira wa Kulia Kwa Paddle, anaweza kuunda mfumo ambao mbunifu ataandika masharti ya kuangalia maadili haya. Kisha data ya mti wa uamuzi itaonekana kama hii:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kimsingi hii ni sawa na katika jedwali la kwanza, lakini suluhu zenyewe zina msimbo wao wenyewe, kidogo kama sehemu ya masharti ya if taarifa. Kwa upande wa nambari, hii ingesomwa kwenye safu ya pili ya nodi za uamuzi, lakini badala ya kutafuta hali maalum ya kutekeleza (Je, Mpira Ulio kushoto wa Paddle), hutathmini usemi wa masharti na kurudisha ukweli au uwongo ipasavyo. Hii inafanywa kwa kutumia lugha ya uandishi ya Lua au Angelscript. Kwa kuzitumia, msanidi anaweza kuchukua vitu kwenye mchezo wake (mpira na kasia) na kuunda vigeu ambavyo vitapatikana kwenye hati (ball.position). Pia, lugha ya uandishi ni rahisi kuliko C++. Haihitaji hatua kamili ya mkusanyiko, kwa hivyo ni bora kwa kurekebisha mantiki ya mchezo haraka na inaruhusu "wasio nambari" kuunda kazi zinazohitajika wenyewe.

Katika mfano hapo juu, lugha ya uandishi hutumiwa tu kutathmini usemi wa masharti, lakini pia inaweza kutumika kwa vitendo. Kwa mfano, data Hamisha Paddle Right inaweza kuwa taarifa ya hati (ball.position.x += 10). Ili kitendo pia kifafanuliwe kwenye hati, bila hitaji la kupanga Sogeza Paddle kulia.

Unaweza kwenda mbali zaidi na kuandika mti mzima wa uamuzi katika lugha ya uandishi. Hii itakuwa nambari katika mfumo wa taarifa za masharti ngumu, lakini zitakuwa kwenye faili za maandishi ya nje, ambayo ni, zinaweza kubadilishwa bila kurudisha programu nzima. Mara nyingi unaweza kuhariri faili ya hati wakati wa uchezaji ili kujaribu majibu tofauti ya AI kwa haraka.

Majibu ya Tukio

Mifano hapo juu ni kamili kwa Pong. Wanaendelea kuendesha mzunguko wa Sense/Fikiria/Tendo na kuchukua hatua kulingana na hali ya hivi punde ya ulimwengu. Lakini katika michezo ngumu zaidi unahitaji kuguswa na matukio ya mtu binafsi, na si kutathmini kila kitu mara moja. Pong katika kesi hii tayari ni mfano mbaya. Tuchague nyingine.

Hebu fikiria mpiga risasi ambapo maadui hawana mwendo hadi watambue mchezaji, baada ya hapo wanafanya kulingana na "utaalamu" wao: mtu atakimbia "kukimbilia", mtu atashambulia kutoka mbali. Bado ni mfumo tendaji wa kimsingi - "mchezaji akionekana, fanya jambo" - lakini unaweza kugawanywa kimantiki kuwa tukio la Mchezaji Anayeonekana na Majibu (chagua jibu na ulitekeleze).

Hii inaturudisha kwenye mzunguko wa Sense/Fikiria/Tendo. Tunaweza kuweka nambari ya sehemu ya Sense ambayo itaangalia kila fremu ikiwa AI inamwona mchezaji. Ikiwa sivyo, hakuna kitu kinachotokea, lakini ikiwa kinaona, basi tukio la Mchezaji aliyeonekana linaundwa. Msimbo utakuwa na sehemu tofauti inayosema "wakati tukio la Mchezaji Anayeonekana linapotokea, fanya" ambapo ni jibu ambalo unahitaji kushughulikia sehemu za Fikiria na Tenda. Kwa hivyo, utaweka maoni kwa tukio la Mchezaji Anayeonekana: kwa mhusika "aliyekimbia" - ChargeAndAttack, na kwa mpiga risasi - HideAndSnipe. Mahusiano haya yanaweza kuundwa katika faili ya data kwa uhariri wa haraka bila kulazimika kujumuisha tena. Lugha ya uandishi inaweza kutumika hapa pia.

Kufanya maamuzi magumu

Ingawa mifumo rahisi ya majibu ina nguvu sana, kuna hali nyingi ambapo haitoshi. Wakati mwingine unahitaji kufanya maamuzi tofauti kulingana na kile wakala anafanya kwa sasa, lakini ni vigumu kufikiria hili kama hali. Wakati mwingine kuna hali nyingi sana za kuziwakilisha vyema katika mti wa uamuzi au hati. Wakati mwingine unahitaji kutathmini mapema jinsi hali itabadilika kabla ya kuamua juu ya hatua inayofuata. Mbinu za kisasa zaidi zinahitajika ili kutatua matatizo haya.

Mashine ya hali ya mwisho

Mashine ya hali ya mwisho au FSM (mashine ya hali ya mwisho) ni njia ya kusema kwamba wakala wetu kwa sasa yuko katika mojawapo ya hali kadhaa zinazowezekana, na kwamba anaweza kuhama kutoka jimbo moja hadi jingine. Kuna idadi fulani ya majimbo kama haya - kwa hivyo jina. Mfano bora kutoka kwa maisha ni taa ya trafiki. Kuna mlolongo tofauti wa taa katika maeneo tofauti, lakini kanuni ni sawa - kila hali inawakilisha kitu (kuacha, kutembea, nk). Taa ya trafiki iko katika hali moja tu wakati wowote, na husogea kutoka moja hadi nyingine kulingana na sheria rahisi.

Ni hadithi sawa na NPC katika michezo. Kwa mfano, hebu tuchukue walinzi na majimbo yafuatayo:

  • Doria.
  • Kushambulia.
  • Kukimbia.

Na masharti haya ya kubadilisha hali yake:

  • Mlinzi akimwona adui, anashambulia.
  • Mlinzi akishambulia lakini haoni adui tena, anarudi doria.
  • Mlinzi akishambulia lakini akajeruhiwa vibaya, anakimbia.

Unaweza pia kuandika kama-taarifa kwa mabadiliko ya hali ya mlezi na ukaguzi mbalimbali: je, kuna adui karibu, kiwango cha afya cha NPC ni kipi, n.k. Hebu tuongeze majimbo machache zaidi:

  • Uvivu - kati ya doria.
  • Kutafuta - wakati adui aliyeonekana ametoweka.
  • Kutafuta Msaada - wakati adui anaonekana, lakini ana nguvu sana kupigana peke yake.

Chaguo kwa kila mmoja wao ni mdogo - kwa mfano, mlinzi hatakwenda kutafuta adui aliyefichwa ikiwa ana afya ya chini.

Baada ya yote, kuna orodha kubwa ya "ikiwa" , Hiyo " inaweza kuwa ngumu sana, kwa hivyo tunahitaji kurasimisha njia ambayo inaruhusu sisi kuweka majimbo na mabadiliko kati ya majimbo akilini. Ili kufanya hivyo, tunazingatia majimbo yote, na chini ya kila hali tunaandika katika orodha mabadiliko yote kwa majimbo mengine, pamoja na hali muhimu kwao.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Hili ni jedwali la mpito la serikali - njia ya kina ya kuwakilisha FSM. Wacha tuchore mchoro na tupate muhtasari kamili wa jinsi tabia ya NPC inavyobadilika.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Mchoro unaonyesha kiini cha kufanya maamuzi kwa wakala huyu kulingana na hali ya sasa. Zaidi ya hayo, kila mshale unaonyesha mpito kati ya majimbo ikiwa hali iliyo karibu nayo ni kweli.

Kila sasisho tunaangalia hali ya sasa ya wakala, angalia orodha ya mabadiliko, na ikiwa masharti ya mpito yametimizwa, inakubali hali mpya. Kwa mfano, kila fremu hukagua ikiwa kipima muda cha sekunde 10 kimeisha muda wake, na ikiwa ni hivyo, basi mlinzi anatoka katika hali ya Idling hadi Doria. Kwa njia hiyo hiyo, hali ya Kushambulia inaangalia afya ya wakala - ikiwa ni ya chini, basi huenda kwenye hali ya Kukimbia.

Hii ni kushughulikia mabadiliko kati ya majimbo, lakini vipi kuhusu tabia inayohusishwa na majimbo yenyewe? Kwa upande wa kutekeleza tabia halisi kwa jimbo fulani, kawaida kuna aina mbili za "ndoano" ambapo tunapeana vitendo kwa FSM:

  • Vitendo ambavyo tunafanya mara kwa mara kwa hali ya sasa.
  • Hatua tunazochukua tunapohama kutoka jimbo moja hadi jingine.

Mifano kwa aina ya kwanza. Hali ya Doria itasogeza wakala kwenye njia ya doria kila fremu. Hali ya Kushambulia itajaribu kuanzisha shambulizi kwa kila fremu au mpito hadi hali ambayo hii inawezekana.

Kwa aina ya pili, fikiria mpito "ikiwa adui anaonekana na adui ana nguvu sana, basi nenda kwenye hali ya Kupata Msaada. Ni lazima wakala achague mahali pa kupata usaidizi na kuhifadhi maelezo haya ili hali ya Usaidizi wa Kutafuta ijue pa kwenda. Mara msaada unapopatikana, wakala hurudi kwenye hali ya Kushambulia. Katika hatua hii, atataka kumwambia mshirika kuhusu tishio, ili hatua ya NotifyFriendOfThreat inaweza kutokea.

Kwa mara nyingine tena, tunaweza kuangalia mfumo huu kupitia lenzi ya mzunguko wa Sense/Fikiria/Tendo. Sense imejumuishwa katika data inayotumiwa na mantiki ya mpito. Fikiria - mabadiliko yanapatikana katika kila jimbo. Na Sheria inafanywa na vitendo vinavyofanywa mara kwa mara ndani ya jimbo au katika mabadiliko kati ya majimbo.

Wakati mwingine hali ya mpito ya upigaji kura inayoendelea inaweza kuwa ghali. Kwa mfano, ikiwa kila wakala atafanya hesabu changamano kila fremu ili kubaini kama inaweza kuona maadui na kuelewa ikiwa inaweza kuhama kutoka hali ya Doria hadi hali ya Kushambulia, hii itachukua muda mwingi wa CPU.

Mabadiliko muhimu katika hali ya ulimwengu yanaweza kuzingatiwa kama matukio ambayo yatashughulikiwa yanapotokea. Badala ya FSM kuangalia hali ya mpito "je wakala wangu anaweza kuona kichezaji?" kila fremu, mfumo tofauti unaweza kusanidiwa kuangalia mara kwa mara (k.m. mara 5 kwa sekunde). Na matokeo yake ni kutoa Player Seen wakati hundi inapita.

Hii inapitishwa kwa FSM, ambayo inapaswa sasa kwenda kwa tukio la Mchezaji Anavyoonekana kupokea hali na kujibu ipasavyo. Tabia inayotokana ni sawa isipokuwa kwa kucheleweshwa kwa karibu kutoonekana kabla ya kujibu. Lakini utendakazi umeimarika kutokana na kutenganisha sehemu ya Sense katika sehemu tofauti ya programu.

Mashine ya hali ya juu ya hali ya juu

Walakini, kufanya kazi na FSM kubwa sio rahisi kila wakati. Ikiwa tunataka kupanua hali ya mashambulizi ili kutenganisha MeleeAttacking na RangedAttacking, itatubidi tubadilishe mabadiliko kutoka kwa majimbo mengine yote ambayo husababisha hali ya Kushambulia (ya sasa na ya baadaye).

Labda umegundua kuwa katika mfano wetu kuna mabadiliko mengi ya nakala. Mabadiliko mengi katika hali ya Idling yanafanana na mabadiliko katika hali ya Doria. Itakuwa nzuri kutojirudia, haswa ikiwa tunaongeza majimbo zaidi yanayofanana. Inaleta maana kuweka kikundi cha Idling na Doria chini ya lebo ya jumla ya "kutopigana", ambapo kuna seti moja tu ya kawaida ya mpito ili kupambana na majimbo. Ikiwa tutafikiria lebo hii kama jimbo, basi Idling na Doria huwa majimbo madogo. Mfano wa kutumia jedwali tofauti la mpito kwa jimbo dogo lisilo la kupigana:

Majimbo kuu:
Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Hali ya nje ya mapigano:
Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Na katika fomu ya mchoro:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Ni mfumo sawa, lakini kwa hali mpya isiyo ya mapigano ambayo inajumuisha Idling na Doria. Kwa kila jimbo lililo na FSM yenye substates (na substates hizi, kwa upande wake, zenye FSMs zao - na kadhalika kwa muda mrefu kama unahitaji), tunapata Hierarchical Finite State Machine au HFSM (hierarchical finite state machine). Kwa kupanga hali isiyo ya mapigano, tunakata rundo la mabadiliko yasiyo ya lazima. Tunaweza kufanya vivyo hivyo kwa majimbo yoyote mapya yenye mabadiliko ya kawaida. Kwa mfano, kama katika siku zijazo tutapanua hali ya Kushambulia hadi majimbo ya MeleeAttacking na MissileAttacking, yatakuwa majimbo ambayo mpito kati ya kila mmoja na mwingine kulingana na umbali wa adui na upatikanaji wa ammo. Kwa hivyo, tabia changamano na tabia ndogo zinaweza kuwakilishwa kwa kiwango cha chini cha mabadiliko ya nakala.

Mti wa tabia

Kwa HFSM, michanganyiko changamano ya tabia huundwa kwa njia rahisi. Hata hivyo, kuna ugumu kidogo kwamba kufanya maamuzi katika mfumo wa sheria za mpito kunahusiana kwa karibu na hali ya sasa. Na katika michezo mingi hii ndiyo hasa inahitajika. Na matumizi makini ya uongozi wa serikali yanaweza kupunguza idadi ya marudio ya mpito. Lakini wakati mwingine unahitaji sheria zinazofanya kazi bila kujali uko katika hali gani, au zinazotumika katika karibu jimbo lolote. Kwa mfano, afya ya wakala ikishuka hadi 25%, utamtaka akimbie bila kujali alikuwa katika mapigano, bila kufanya kitu, au akizungumza - itabidi uongeze hali hii kwa kila jimbo. Na ikiwa mbuni wako baadaye anataka kubadilisha kizingiti cha chini cha afya kutoka 25% hadi 10%, basi hii italazimika kufanywa tena.

Kwa hakika, hali hii inahitaji mfumo ambao maamuzi kuhusu "hali gani ya kuwa" ni nje ya majimbo yenyewe, ili kufanya mabadiliko tu katika sehemu moja na si kugusa hali ya mpito. Miti ya tabia inaonekana hapa.

Kuna njia kadhaa za kuzitekeleza, lakini kiini ni takribani sawa kwa wote na ni sawa na mti wa uamuzi: algorithm huanza na nodi ya "mizizi", na mti una nodes zinazowakilisha maamuzi au vitendo. Kuna tofauti chache muhimu ingawa:

  • Nodi sasa zinarudisha moja ya maadili matatu: Imefaulu (ikiwa kazi imekamilika), Imeshindwa (ikiwa haiwezi kuanza), au Inaendesha (ikiwa bado inaendelea na hakuna matokeo ya mwisho).
  • Hakuna nodi za maamuzi zaidi za kuchagua kati ya njia mbili mbadala. Badala yake, ni nodi za mapambo, ambazo zina nodi moja ya watoto. Iwapo watafanikiwa, watatekeleza nodi ya mtoto wao pekee.
  • Nodi zinazofanya vitendo hurejesha thamani ya Uendeshaji ili kuwakilisha vitendo vinavyofanywa.

Seti hii ndogo ya nodi inaweza kuunganishwa ili kuunda idadi kubwa ya tabia ngumu. Wacha tufikirie mlinzi wa HFSM kutoka kwa mfano uliopita kama mti wa tabia:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kwa muundo huu kusiwe na mpito dhahiri kutoka majimbo ya Idling/Doria hadi Kushambulia au majimbo mengine yoyote. Ikiwa adui anaonekana na afya ya mhusika iko chini, utekelezaji utasimama kwenye nodi ya Kukimbia, bila kujali ni nodi gani ilikuwa ikitekelezwa hapo awali - Doria, Kuzembea, Kushambulia, au nyingine yoyote.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Miti ya tabia ni ngumu-kuna njia nyingi za kuitunga, na kutafuta mchanganyiko sahihi wa wapambaji na nodi za mchanganyiko inaweza kuwa changamoto. Pia kuna maswali kuhusu mara ngapi kuangalia mti - tunataka kupitia kila sehemu yake au tu wakati moja ya masharti yamebadilika? Tunawezaje kuhifadhi hali inayohusiana na nodi - tunajuaje wakati tumekuwa tukizembea kwa sekunde 10, au tunajuaje ni nodi zipi zilikuwa zikitekeleza mara ya mwisho ili tuweze kuchakata mfuatano kwa usahihi?

Ndio maana kuna utekelezaji mwingi. Kwa mfano, mifumo mingine imebadilisha nodi za mapambo na wapambaji wa ndani. Wanatathmini tena mti wakati hali za mapambo zinabadilika, kusaidia kuunganisha nodi, na kutoa masasisho ya mara kwa mara.

Mfumo wa msingi wa matumizi

Michezo mingine ina mechanics nyingi tofauti. Inastahili kupokea faida zote za sheria rahisi na za jumla za mpito, lakini si lazima kwa namna ya mti kamili wa tabia. Badala ya kuwa na seti ya wazi ya uchaguzi au mti wa vitendo iwezekanavyo, ni rahisi kuchunguza vitendo vyote na kuchagua moja sahihi zaidi kwa sasa.

Mfumo wa msingi wa Utility utasaidia na hii tu. Huu ni mfumo ambapo wakala ana aina mbalimbali za vitendo na huchagua zipi za kutekeleza kulingana na manufaa ya kila moja. Ambapo matumizi ni kipimo kiholela cha jinsi ilivyo muhimu au kuhitajika kwa wakala kutekeleza kitendo hiki.

Matumizi yaliyokokotwa ya kitendo kulingana na hali na mazingira ya sasa, wakala anaweza kuangalia na kuchagua hali nyingine inayofaa zaidi wakati wowote. Hii ni sawa na FSM, isipokuwa pale ambapo mabadiliko yanaamuliwa na makadirio ya kila hali inayoweza kutokea, ikijumuisha iliyopo sasa. Tafadhali kumbuka kuwa tunachagua hatua muhimu zaidi ya kuendelea (au kubaki ikiwa tayari tumeikamilisha). Kwa anuwai zaidi, hii inaweza kuwa chaguo la usawa lakini nasibu kutoka kwa orodha ndogo.

Mfumo huu unapeana anuwai ya thamani za matumizi-kwa mfano, kutoka 0 (haifai kabisa) hadi 100 (inayohitajika kabisa). Kila kitendo kina idadi ya vigezo vinavyoathiri hesabu ya thamani hii. Tukirudi kwa mfano wetu wa mlezi:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Mabadiliko kati ya vitendo ni ya utata—hali yoyote inaweza kufuata nyingine yoyote. Vipaumbele vya hatua hupatikana katika thamani za matumizi zilizorejeshwa. Ikiwa adui anaonekana, na adui huyo ni mwenye nguvu, na afya ya mhusika iko chini, basi Kukimbia na KupataUsaidizi kutarudisha thamani za juu zisizo sifuri. Katika kesi hii, FindingHelp itakuwa ya juu kila wakati. Vivyo hivyo, shughuli zisizo za mapigano hazirudi tena zaidi ya 50, kwa hivyo zitakuwa chini kila wakati kuliko zile za mapigano. Unahitaji kuzingatia hili wakati wa kuunda vitendo na kuhesabu matumizi yao.

Katika mfano wetu, vitendo hurejesha thamani isiyobadilika au moja ya maadili mawili yaliyowekwa. Mfumo wa uhalisia zaidi unaweza kurejesha makadirio kutoka kwa anuwai ya thamani inayoendelea. Kwa mfano, Kitendo cha Kukimbia hurejesha thamani za juu za matumizi ikiwa afya ya wakala iko chini, na Kitendo cha Kushambulia hurejesha thamani za chini za matumizi ikiwa adui ni mkali sana. Kwa sababu hii, Kitendo cha Kukimbia huchukua nafasi ya kwanza juu ya Kushambulia katika hali yoyote ambapo wakala anahisi kuwa hana afya ya kutosha kumshinda adui. Hii inaruhusu vitendo kupewa kipaumbele kulingana na idadi yoyote ya vigezo, na kufanya mbinu hii kunyumbulika zaidi na kubadilika kuliko mti wa tabia au FSM.

Kila kitendo kina masharti mengi ya kuhesabu programu. Zinaweza kuandikwa kwa lugha ya uandishi au kama msururu wa fomula za hisabati. Sims, ambayo huiga utaratibu wa kila siku wa mhusika, huongeza safu ya ziada ya hesabu - wakala hupokea mfululizo wa "motisha" zinazoathiri ukadiriaji wa matumizi. Ikiwa mhusika ana njaa, atahisi njaa zaidi baada ya muda, na thamani ya matumizi ya kitendo cha EatFood itaongezeka hadi mhusika aifanye, kupunguza kiwango cha njaa na kurudisha thamani ya EatFood hadi sufuri.

Wazo la kuchagua vitendo kulingana na mfumo wa ukadiriaji ni rahisi sana, kwa hivyo mfumo unaotegemea Huduma unaweza kutumika kama sehemu ya michakato ya kufanya maamuzi ya AI, badala ya kuchukua nafasi yao kamili. Mti wa uamuzi unaweza kuomba ukadiriaji wa matumizi wa nodi mbili za watoto na uchague ile ya juu zaidi. Vile vile, mti wa tabia unaweza kuwa na nodi ya Utumishi inayojumuisha kutathmini matumizi ya vitendo kuamua ni mtoto gani atekeleze.

Harakati na urambazaji

Katika mifano iliyotangulia, tulikuwa na jukwaa ambalo tulisogea kushoto au kulia, na mlinzi ambaye alipiga doria au kushambulia. Lakini je, tunashughulikia vipi harakati za wakala kwa muda fulani? Je, tunawekaje kasi, tunaepuka vipi vikwazo, na tunapangaje njia wakati kufika kulengwa ni ngumu zaidi kuliko kusonga tu kwenye mstari ulionyooka? Hebu tuangalie hili.

Utawala

Katika hatua ya awali, tutafikiri kwamba kila wakala ana thamani ya kasi, ambayo inajumuisha jinsi inavyosonga haraka na kwa mwelekeo gani. Inaweza kupimwa kwa mita kwa sekunde, kilomita kwa saa, pikseli kwa sekunde, n.k. Tukikumbuka kitanzi cha Sense/Fikiria/Kitendo, tunaweza kufikiria kuwa sehemu ya Fikiria huchagua kasi, na sehemu ya Sheria itatumia kasi hiyo kwa wakala. Kwa kawaida michezo huwa na mfumo wa fizikia unaokufanyia kazi hii, kujifunza thamani ya kasi ya kila kitu na kuirekebisha. Kwa hivyo, unaweza kuacha AI na kazi moja - kuamua ni kasi gani wakala anapaswa kuwa nayo. Ikiwa unajua wapi wakala anapaswa kuwa, basi unahitaji kuihamisha kwa mwelekeo sahihi kwa kasi iliyowekwa. Equation isiyo na maana sana:

taka_kusafiri = destination_position - wakala_nafasi

Hebu fikiria ulimwengu wa 2D. Wakala yuko mahali (-2,-2), marudio ni mahali fulani kaskazini-mashariki kwa uhakika (30, 20), na njia inayohitajika kwa wakala kufika huko ni (32, 22). Wacha tuseme nafasi hizi zinapimwa kwa mita - ikiwa tutachukua kasi ya wakala kuwa mita 5 kwa sekunde, basi tutaongeza vekta yetu ya uhamishaji na kupata kasi ya takriban (4.12, 2.83). Kwa vigezo hivi, wakala angefika mahali pake katika karibu sekunde 8.

Unaweza kuhesabu tena maadili wakati wowote. Ikiwa wakala alikuwa nusu ya lengo, harakati itakuwa nusu ya urefu, lakini tangu kasi ya juu ya wakala ni 5 m / s (tuliamua hii hapo juu), kasi itakuwa sawa. Hii pia inafanya kazi kwa kusonga malengo, ikiruhusu wakala kufanya mabadiliko madogo wanaposonga.

Lakini tunataka tofauti zaidi - kwa mfano, kuongeza polepole kasi ya kuiga mhusika anayesonga kutoka kusimama hadi kukimbia. Vile vile vinaweza kufanywa mwishoni kabla ya kuacha. Vipengele hivi vinajulikana kama tabia za uongozaji, ambazo kila moja ina majina mahususi: Kutafuta, Kukimbia, Kuwasili, n.k. Wazo ni kwamba nguvu za kuongeza kasi zinaweza kutumika kwa kasi ya wakala, kulingana na kulinganisha nafasi ya wakala na kasi ya sasa na lengwa katika ili kutumia mbinu mbalimbali za kuelekea kwenye lengo.

Kila tabia ina kusudi tofauti kidogo. Tafuta na Kuwasili ni njia za kupeleka wakala kwenye lengwa. Kuepuka Vikwazo na Kutenganisha kurekebisha harakati za wakala ili kuepuka vikwazo kwenye njia ya kufikia lengo. Ulinganifu na Mshikamano huweka mawakala kusonga pamoja. Idadi yoyote ya tabia tofauti za uongozaji inaweza kufupishwa ili kutoa vekta ya njia moja ikizingatia mambo yote. Wakala anayetumia tabia za Kuwasili, Kutengana na Kuepuka Vikwazo ili kukaa mbali na kuta na mawakala wengine. Njia hii inafanya kazi vizuri katika maeneo ya wazi bila maelezo yasiyo ya lazima.

Katika hali ngumu zaidi, kuongezwa kwa tabia tofauti hufanya kazi mbaya zaidi - kwa mfano, wakala anaweza kukwama kwenye ukuta kutokana na mgongano kati ya Kufika na Kuepuka Vikwazo. Kwa hivyo, unahitaji kuzingatia chaguzi ambazo ni ngumu zaidi kuliko kuongeza tu maadili yote. Njia ni hii: badala ya kuongeza matokeo ya kila tabia, unaweza kuzingatia harakati katika mwelekeo tofauti na kuchagua chaguo bora zaidi.

Walakini, katika mazingira magumu yenye ncha zisizokufa na chaguo kuhusu njia ya kwenda, tutahitaji kitu cha juu zaidi.

Kutafuta njia

Tabia za uendeshaji ni nzuri kwa harakati rahisi katika eneo wazi (uwanja wa mpira wa miguu au uwanja) ambapo kutoka A hadi B ni njia iliyonyooka yenye mikengeuko midogo tu ya kuzunguka vizuizi. Kwa njia changamano, tunahitaji kutafuta njia, ambayo ni njia ya kuchunguza ulimwengu na kuamua njia kuupitia.

Rahisi zaidi ni kutumia gridi ya taifa kwa kila mraba karibu na wakala na kutathmini ni nani kati yao anayeruhusiwa kusonga. Ikiwa mmoja wao ni marudio, basi fuata njia kutoka kwa kila mraba hadi uliopita hadi ufikie mwanzo. Hii ndio njia. Vinginevyo, rudia mchakato huo na miraba mingine iliyo karibu hadi upate unakoenda au umalize miraba (maana hakuna njia inayowezekana). Hiki ndicho kinachojulikana rasmi kama Utafutaji wa Breadth-First au BFS (algorithm ya utafutaji wa upana-kwanza). Katika kila hatua anatazama pande zote (kwa hivyo upana, "upana"). Nafasi ya utafutaji ni kama sehemu ya mbele ya wimbi inayosogea hadi kufikia eneo linalohitajika - nafasi ya utafutaji hupanuka kwa kila hatua hadi sehemu ya mwisho ijumuishwe, kisha inaweza kufuatiliwa hadi mwanzo.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Kama matokeo, utapokea orodha ya mraba ambayo njia inayotaka imeundwa. Hii ndiyo njia (kwa hivyo, kutafuta njia) - orodha ya maeneo ambayo wakala atatembelea wakati wa kufuata marudio.

Kwa kuzingatia kwamba tunajua nafasi ya kila mraba duniani, tunaweza kutumia tabia za uendeshaji ili kusonga njiani - kutoka node 1 hadi node 2, kisha kutoka node 2 hadi node 3, na kadhalika. Chaguo rahisi zaidi ni kuelekea katikati ya mraba unaofuata, lakini chaguo bora zaidi ni kuacha katikati ya makali kati ya mraba wa sasa na unaofuata. Kwa sababu ya hili, wakala ataweza kukata pembe kwa zamu kali.

Algorithm ya BFS pia ina hasara - inachunguza miraba mingi katika mwelekeo "mbaya" kama katika mwelekeo "sahihi". Hapa ndipo kanuni changamano zaidi inayoitwa A* (Nyota) inapotumika. Inafanya kazi kwa njia ile ile, lakini badala ya kuchunguza kwa upofu viwanja vya jirani (basi majirani wa majirani, kisha majirani wa majirani, na kadhalika), hukusanya nodi kwenye orodha na kuzipanga ili nodi inayofuata ichunguzwe kila wakati. moja inayoongoza kwa njia fupi zaidi. Nodi hupangwa kulingana na hali ambayo inazingatia mambo mawili—“gharama” ya njia dhahania hadi mraba unaotaka (pamoja na gharama zozote za usafiri) na makadirio ya umbali wa mraba huo kutoka unakoenda (kuegemea utafutaji katika mwelekeo sahihi).

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Mfano huu unaonyesha kwamba wakala huchunguza mraba mmoja kwa wakati mmoja, kila wakati akichagua ule ulio karibu ambao unatia matumaini zaidi. Njia inayotokana ni sawa na BFS, lakini miraba michache ilizingatiwa katika mchakato - ambayo ina athari kubwa katika utendaji wa mchezo.

Harakati bila gridi ya taifa

Lakini michezo mingi haijawekwa kwenye gridi ya taifa, na mara nyingi haiwezekani kufanya hivyo bila kuacha uhalisia. Maelewano yanahitajika. Je, mraba unapaswa kuwa na ukubwa gani? Ni kubwa mno na hazitaweza kuwakilisha kwa usahihi korido ndogo au zamu, ndogo sana na kutakuwa na miraba mingi sana ya kutafuta, ambayo hatimaye itachukua muda mwingi.

Jambo la kwanza kuelewa ni kwamba mesh inatupa grafu ya nodes zilizounganishwa. Algoriti za A* na BFS hufanya kazi kwenye grafu na hazijali matundu yetu hata kidogo. Tunaweza kuweka nodi popote katika ulimwengu wa mchezo: mradi tu kuna muunganisho kati ya nodi zozote mbili zilizounganishwa, na vile vile kati ya sehemu za kuanzia na za mwisho na angalau nodi moja, algoriti itafanya kazi vilevile kama hapo awali. Hii mara nyingi huitwa mfumo wa njia, kwani kila nodi inawakilisha nafasi muhimu ulimwenguni ambayo inaweza kuwa sehemu ya idadi yoyote ya njia za dhahania.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta
Mfano 1: fundo katika kila mraba. Utafutaji huanza kutoka kwa nodi ambapo wakala iko na kuishia kwenye nodi ya mraba inayotaka.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta
Mfano 2: Seti ndogo ya nodi (njia). Utafutaji huanza kwenye mraba wa wakala, hupitia nambari inayohitajika ya nodi, na kisha kuendelea hadi lengwa.

Huu ni mfumo unaobadilika kabisa na wenye nguvu. Lakini uangalifu fulani unahitajika katika kuamua wapi na jinsi ya kuweka njia, vinginevyo mawakala wanaweza tu wasione eneo la karibu na hawataweza kuanza njia. Ingekuwa rahisi ikiwa tunaweza kuweka njia moja kwa moja kulingana na jiometri ya ulimwengu.

Hapa ndipo mesh ya urambazaji au navmesh (mesh ya urambazaji) inaonekana. Hii ni kawaida mesh ya 2D ya pembetatu ambayo huwekwa kwenye jiometri ya ulimwengu - popote wakala anaruhusiwa kutembea. Kila moja ya pembetatu kwenye wavu inakuwa nodi kwenye grafu, na ina hadi pembetatu tatu zilizo karibu ambazo huwa nodi zilizo karibu kwenye grafu.

Picha hii ni mfano kutoka kwa injini ya Unity - ilichambua jiometri ulimwenguni na kuunda navmesh (kwenye skrini ya bluu nyepesi). Kila poligoni katika navmesh ni eneo ambalo wakala anaweza kusimama au kuhama kutoka poligoni moja hadi poligoni nyingine. Katika mfano huu, polygons ni ndogo kuliko sakafu ambayo iko - hii inafanywa ili kuzingatia ukubwa wa wakala, ambayo itaenea zaidi ya nafasi yake ya majina.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Tunaweza kutafuta njia kupitia wavu huu, tena kwa kutumia algoriti ya A*. Hii itatupa njia karibu kamili duniani, ambayo inazingatia jiometri yote na hauhitaji nodes zisizohitajika na kuundwa kwa njia.

Kutafuta njia ni mada pana sana ambayo sehemu moja ya makala haitoshi. Ikiwa unataka kujifunza kwa undani zaidi, basi hii itasaidia Tovuti ya Amit Patel.

Upangaji

Tumejifunza kwa kutafuta njia kwamba wakati mwingine haitoshi tu kuchagua mwelekeo na kusonga - inatubidi kuchagua njia na kufanya zamu chache ili kufika tunakotaka. Tunaweza kujumlisha wazo hili: kufikia lengo sio tu hatua inayofuata, lakini mlolongo mzima ambapo wakati mwingine unahitaji kuangalia mbele hatua kadhaa ili kujua nini cha kwanza kinapaswa kuwa. Hii inaitwa kupanga. Utaftaji wa njia unaweza kuzingatiwa kama moja ya viendelezi kadhaa vya kupanga. Kwa mujibu wa mzunguko wetu wa Sense/Fikiria/Tendo, hapa ndipo sehemu ya Fikiri inapanga sehemu nyingi za Sheria kwa siku zijazo.

Hebu tuangalie mfano wa mchezo wa ubao Uchawi: Kukusanya. Tunaenda kwanza na seti ifuatayo ya kadi mikononi mwetu:

  • Kinamasi - Hutoa mana 1 nyeusi (kadi ya ardhi).
  • Msitu - hutoa mana 1 ya kijani (kadi ya ardhi).
  • Mchawi Mtoro - Inahitaji mana 1 ya bluu ili kumwita.
  • Elvish Mystic - Inahitaji mana 1 ya kijani ili kumwita.

Tunapuuza kadi tatu zilizobaki ili kurahisisha. Kulingana na sheria, mchezaji anaruhusiwa kucheza kadi 1 ya ardhi kwa kila zamu, anaweza "kugonga" kadi hii ili kutoa mana kutoka kwake, na kisha kuroga (pamoja na kumwita kiumbe) kulingana na kiasi cha mana. Katika hali hii, mchezaji wa binadamu anajua kucheza Forest, bomba 1 kijani mana, na kisha kumwita Elvish Mystic. Lakini mchezo wa AI unawezaje kubaini hili?

Rahisi kupanga

Njia isiyo na maana ni kujaribu kila hatua kwa zamu hadi hakuna zinazofaa zilizobaki. Kwa kuangalia kadi, AI anaona kile Swamp inaweza kucheza. Na anaicheza. Je, kuna vitendo vingine vilivyosalia zamu hii? Haiwezi kumwita Elvish Mystic au Mchawi Mtoro, kwa kuwa wanahitaji mana ya kijani na buluu mtawalia ili kuwaita, wakati Swamp hutoa mana nyeusi pekee. Na hataweza tena kucheza Forest, kwa sababu tayari ameshacheza Swamp. Kwa hivyo, mchezo wa AI ulifuata sheria, lakini ulifanya vibaya. Inaweza kuboreshwa.

Kupanga kunaweza kupata orodha ya vitendo vinavyoleta mchezo kwa hali inayotakiwa. Kama vile kila mraba kwenye njia ulivyokuwa na majirani (katika kutafuta njia), kila tendo katika mpango pia lina majirani au warithi. Tunaweza kutafuta vitendo hivi na vitendo vifuatavyo hadi tufikie hali tunayotaka.

Katika mfano wetu, matokeo yanayotarajiwa ni "kumwita kiumbe ikiwezekana." Mwanzoni mwa zamu, tunaona vitendo viwili tu vinavyoruhusiwa na sheria za mchezo:

1. Cheza Kinamasi (matokeo: Kinamasi kwenye mchezo)
2. Cheza Msitu (matokeo: Msitu kwenye mchezo)

Kila hatua inayochukuliwa inaweza kusababisha hatua zaidi na kufunga zingine, tena kulingana na sheria za mchezo. Fikiria tulicheza Swamp - hii itaondoa Swamp kama hatua inayofuata (tayari tuliicheza), na hii pia itaondoa Forest (kwa sababu kulingana na sheria unaweza kucheza kadi moja ya ardhi kwa zamu). Baada ya hayo, AI inaongeza kupata mana 1 kama hatua inayofuata kwa sababu hakuna chaguzi zingine. Iwapo ataendelea na kuchagua Gonga Kinamasi, atapokea kitengo 1 cha mana nyeusi na hataweza kufanya chochote nacho.

1. Cheza Kinamasi (matokeo: Kinamasi kwenye mchezo)
1.1 Kinamasi cha "Gonga" (matokeo: Dimbwi "lililogongwa", + kitengo 1 cha mana nyeusi)
Hakuna vitendo vinavyopatikana - END
2. Cheza Msitu (matokeo: Msitu kwenye mchezo)

Orodha ya vitendo ilikuwa fupi, tulifikia mwisho. Tunarudia mchakato kwa hatua inayofuata. Tunacheza Forest, fungua hatua "pata mana 1 ya kijani", ambayo itafungua hatua ya tatu - mwite Elvish Mystic.

1. Cheza Kinamasi (matokeo: Kinamasi kwenye mchezo)
1.1 Kinamasi cha "Gonga" (matokeo: Dimbwi "lililogongwa", + kitengo 1 cha mana nyeusi)
Hakuna vitendo vinavyopatikana - END
2. Cheza Msitu (matokeo: Msitu kwenye mchezo)
2.1 Msitu wa "Gonga" (matokeo: Msitu "umegongwa", +1 kitengo cha mana ya kijani)
2.1.1 Summon Elvish Mystic (matokeo: Elvish Mystic anacheza, -1 mana ya kijani)
Hakuna vitendo vinavyopatikana - END

Hatimaye, tulichunguza vitendo vyote vinavyowezekana na tukapata mpango unaoita kiumbe.

Huu ni mfano uliorahisishwa sana. Inashauriwa kuchagua mpango bora zaidi, badala ya mpango wowote unaokidhi vigezo fulani. Kwa ujumla inawezekana kutathmini mipango inayowezekana kulingana na matokeo au manufaa ya jumla ya utekelezaji wake. Unaweza kujipatia pointi 1 kwa kucheza kadi ya ardhi na pointi 3 kwa kumwita kiumbe. Kucheza Swamp itakuwa mpango wa pointi 1. Na kucheza Msitu → Gonga Msitu → mwita Elvish Mystic atatoa pointi 4 mara moja.

Hivi ndivyo upangaji unavyofanya kazi katika Uchawi: Mkusanyiko, lakini mantiki sawa inatumika katika hali zingine. Kwa mfano, kusonga pawn ili kutoa nafasi kwa askofu kuhamia chess. Au jifunike nyuma ya ukuta ili kupiga risasi salama katika XCOM kama hii. Kwa ujumla, unapata wazo.

Mipango iliyoboreshwa

Wakati mwingine kuna vitendo vingi sana vya kuzingatia kila chaguo linalowezekana. Kurudi kwa mfano na Uchawi: Mkusanyiko: hebu sema kwamba katika mchezo na mkononi mwako kuna kadi kadhaa za ardhi na viumbe - idadi ya mchanganyiko unaowezekana wa hatua inaweza kuwa katika kadhaa. Kuna ufumbuzi kadhaa wa tatizo.

Njia ya kwanza ni mnyororo wa nyuma. Badala ya kujaribu mchanganyiko wote, ni bora kuanza na matokeo ya mwisho na kujaribu kutafuta njia ya moja kwa moja. Badala ya kutoka kwenye mizizi ya mti hadi kwenye jani maalum, tunahamia kinyume chake - kutoka kwenye jani hadi kwenye mizizi. Njia hii ni rahisi na ya haraka.

Ikiwa adui ana afya 1, unaweza kupata mpango wa "dili 1 au zaidi". Ili kufikia hili, masharti kadhaa lazima yakamilishwe:

1. Uharibifu unaweza kusababishwa na spell - lazima iwe mkononi.
2. Kuroga unahitaji mana.
3. Ili kupata mana, unahitaji kucheza kadi ya ardhi.
4. Ili kucheza kadi ya ardhi, unahitaji kuwa nayo mkononi mwako.

Njia nyingine ni bora-kwanza kutafuta. Badala ya kujaribu njia zote, tunachagua moja inayofaa zaidi. Mara nyingi, njia hii inatoa mpango bora bila gharama zisizo za lazima za utaftaji. A* ni aina ya utafutaji bora wa kwanza - kwa kuchunguza njia zenye matumaini tangu mwanzo, inaweza tayari kupata njia bora zaidi bila kulazimika kuangalia chaguo zingine.

Chaguo la utafutaji la kuvutia na maarufu zaidi ni Utafutaji wa Miti wa Monte Carlo. Badala ya kubahatisha ni mipango gani iliyo bora zaidi kuliko mingine wakati wa kuchagua kila hatua inayofuata, algoriti huchagua warithi bila mpangilio katika kila hatua hadi kufikia mwisho (wakati mpango ulisababisha ushindi au kushindwa). Matokeo ya mwisho hutumiwa kuongeza au kupunguza uzito wa chaguzi zilizopita. Kwa kurudia mchakato huu mara kadhaa mfululizo, algorithm inatoa makadirio mazuri ya hatua inayofuata ni nini, hata kama hali itabadilika (ikiwa adui atachukua hatua kuingilia mchezaji).

Hakuna hadithi kuhusu kupanga katika michezo ambayo itakamilika bila Upangaji wa Utekelezaji Unaolenga Lengo au GOAP (mpango wa utekelezaji unaolenga lengo). Hii ni njia inayotumika sana na iliyojadiliwa, lakini zaidi ya maelezo machache ya kutofautisha, kimsingi ni njia ya kurudi nyuma tuliyozungumza hapo awali. Ikiwa lengo lilikuwa "kuharibu mchezaji" na mchezaji yuko nyuma ya kifuniko, mpango unaweza kuwa: kuharibu kwa guruneti → kupata → kutupa.

Kawaida kuna malengo kadhaa, kila moja na kipaumbele chake. Ikiwa lengo la kipaumbele la juu haliwezi kukamilika (hakuna mchanganyiko wa vitendo unaounda mpango wa "kuua mchezaji" kwa sababu mchezaji haonekani), AI itarejea kwa malengo ya kipaumbele cha chini.

Mafunzo na kukabiliana

Tayari tumesema kuwa mchezo wa AI kwa kawaida hautumii kujifunza kwa mashine kwa sababu haufai kudhibiti mawakala kwa wakati halisi. Lakini hii haina maana kwamba huwezi kukopa kitu kutoka eneo hili. Tunataka mpinzani katika mpiga risasi kwamba tunaweza kujifunza kitu kutoka kwake. Kwa mfano, fahamu kuhusu nafasi bora kwenye ramani. Au mpinzani katika mchezo wa mapigano ambaye angezuia miondoko ya mseto ya mchezaji inayotumiwa mara kwa mara, na kumhamasisha kutumia wengine. Kwa hivyo kujifunza kwa mashine kunaweza kuwa muhimu sana katika hali kama hizi.

Takwimu na Uwezekano

Kabla hatujaingia katika mifano changamano, acheni tuone ni umbali gani tunaweza kufikia kwa kuchukua vipimo vichache rahisi na kuvitumia kufanya maamuzi. Kwa mfano, mkakati wa wakati halisi - tunawezaje kubaini iwapo mchezaji anaweza kuanzisha shambulizi katika dakika chache za kwanza za mchezo na ni utetezi gani wa kujiandaa dhidi ya hili? Tunaweza kusoma uzoefu wa zamani wa mchezaji ili kuelewa ni maoni gani yanaweza kuwa. Kuanza, hatuna data mbichi kama hiyo, lakini tunaweza kuikusanya - kila wakati AI inapocheza dhidi ya mwanadamu, inaweza kurekodi wakati wa shambulio la kwanza. Baada ya vipindi vichache, tutapata wastani wa muda ambao itachukua kwa mchezaji kushambulia katika siku zijazo.

Pia kuna shida na maadili ya wastani: ikiwa mchezaji alikimbia mara 20 na kucheza polepole mara 20, basi maadili yanayotakiwa yatakuwa mahali fulani katikati, na hii haitatupa chochote muhimu. Suluhisho mojawapo ni kupunguza data ya pembejeo - vipande 20 vya mwisho vinaweza kuzingatiwa.

Mbinu sawa hutumiwa wakati wa kukadiria uwezekano wa vitendo fulani kwa kudhani kuwa mapendeleo ya zamani ya mchezaji yatakuwa sawa katika siku zijazo. Ikiwa mchezaji anatushambulia mara tano na mpira wa moto, mara mbili na umeme, na mara moja kwa melee, ni dhahiri kwamba anapendelea mpira wa moto. Wacha tuongeze na tuone uwezekano wa kutumia silaha tofauti: mpira wa moto=62,5%, umeme=25% na melee=12,5%. Mchezo wetu wa AI unahitaji kujiandaa ili kujikinga na moto.

Njia nyingine ya kufurahisha ni kutumia Naive Bayes Classifier kusoma idadi kubwa ya data ya pembejeo na kuainisha hali hiyo ili AI ijibu kwa njia inayotaka. Viainishi vya Bayesian vinajulikana zaidi kwa matumizi yao katika vichujio vya barua taka. Huko wanachunguza maneno, kulinganisha na mahali ambapo maneno hayo yameonekana hapo awali (katika barua taka au la), na kufikia hitimisho kuhusu barua pepe zinazoingia. Tunaweza kufanya vivyo hivyo hata kwa pembejeo chache. Kulingana na habari yote muhimu ambayo AI inaona (kama vile vitengo vya adui vimeundwa, au ni tahajia gani wanazotumia, au ni teknolojia gani walitafiti), na matokeo ya mwisho (vita au amani, kukimbilia au kutetea, n.k.) - tutachagua tabia ya AI inayotaka.

Njia hizi zote za mafunzo ni za kutosha, lakini ni vyema kuzitumia kulingana na data ya kupima. AI itajifunza kuzoea mikakati tofauti ambayo wajaribu kucheza wako wametumia. AI ambayo inabadilika kulingana na mchezaji baada ya kutolewa inaweza kuwa ya kutabirika sana au ngumu sana kushindwa.

Urekebishaji kulingana na thamani

Kwa kuzingatia maudhui ya ulimwengu wa mchezo wetu na sheria, tunaweza kubadilisha seti ya thamani zinazoathiri kufanya maamuzi, badala ya kutumia data ya ingizo. Tunafanya hivi:

  • Ruhusu AI ikusanye data kuhusu hali ya ulimwengu na matukio muhimu wakati wa mchezo (kama ilivyo hapo juu).
  • Wacha tubadilishe maadili machache muhimu kulingana na data hii.
  • Tunatekeleza maamuzi yetu kulingana na kuchakata au kutathmini maadili haya.

Kwa mfano, wakala ana vyumba kadhaa vya kuchagua kutoka kwenye ramani ya mtu wa kwanza. Kila chumba kina thamani yake, ambayo huamua jinsi inavyohitajika kutembelea. AI ​​huchagua chumba cha kwenda kwa nasibu kulingana na thamani. Kisha wakala anakumbuka ni chumba gani aliuawa na kupunguza thamani yake (uwezekano kwamba atarudi huko). Vile vile kwa hali ya nyuma - ikiwa wakala huharibu wapinzani wengi, basi thamani ya chumba huongezeka.

Mfano wa Markov

Je, iwapo tungetumia data iliyokusanywa kufanya ubashiri? Ikiwa tutakumbuka kila chumba tunachoona mchezaji kwa muda fulani, tutatabiri chumba ambacho mchezaji anaweza kwenda. Kwa kufuatilia na kurekodi mienendo ya mchezaji kwenye vyumba (maadili), tunaweza kutabiri.

Hebu tuchukue vyumba vitatu: nyekundu, kijani na bluu. Na pia uchunguzi ambao tulirekodi wakati wa kutazama kipindi cha mchezo:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Idadi ya uchunguzi katika kila chumba ni karibu sawa - bado hatujui mahali pazuri pa kuvizia. Kukusanya takwimu pia kunachanganyikiwa na utokeaji upya wa wachezaji, ambao huonekana kwa usawa kwenye ramani. Lakini data kuhusu chumba kinachofuata wanachoingia baada ya kuonekana kwenye ramani tayari ni muhimu.

Inaweza kuonekana kuwa chumba cha kijani kinafaa kwa wachezaji - watu wengi huhamia kutoka kwenye chumba nyekundu, 50% yao hubakia hapo zaidi. Chumba cha bluu, kinyume chake, sio maarufu; karibu hakuna mtu anayeenda kwake, na ikiwa wanafanya, hawakaa muda mrefu.

Lakini data inatuambia jambo muhimu zaidi - wakati mchezaji yuko kwenye chumba cha bluu, chumba kinachofuata tunachomwona kitakuwa nyekundu, sio kijani. Ingawa chumba cha kijani ni maarufu zaidi kuliko chumba nyekundu, hali inabadilika ikiwa mchezaji yuko kwenye chumba cha bluu. Hali inayofuata (yaani chumba ambacho mchezaji ataenda) inategemea hali ya awali (yaani chumba ambacho mchezaji yuko kwa sasa). Kwa sababu tunachunguza utegemezi, tutafanya ubashiri sahihi zaidi kuliko ikiwa tulihesabu uchunguzi kwa kujitegemea.

Kutabiri hali ya baadaye kulingana na data kutoka kwa hali ya zamani inaitwa mfano wa Markov, na mifano kama hiyo (yenye vyumba) inaitwa minyororo ya Markov. Kwa kuwa ruwaza zinawakilisha uwezekano wa mabadiliko kati ya hali zinazofuatana, zinaonyeshwa kama FSM zenye uwezekano karibu na kila mpito. Hapo awali, tulitumia FSM kuwakilisha hali ya tabia ambayo wakala alikuwamo, lakini dhana hii inaenea hadi hali yoyote, iwe inahusishwa na wakala au la. Katika kesi hii, majimbo yanawakilisha chumba ambacho wakala huchukua:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Hii ni njia rahisi ya kuwakilisha uwezekano wa jamaa wa mabadiliko ya hali, kutoa AI uwezo fulani wa kutabiri hali inayofuata. Unaweza kutarajia hatua kadhaa mbele.

Ikiwa mchezaji yuko kwenye chumba cha kijani, kuna uwezekano wa 50% kwamba atabaki huko wakati ujao atakapozingatiwa. Lakini kuna uwezekano gani kwamba bado atakuwepo hata baada ya hapo? Sio tu kwamba kuna nafasi kwamba mchezaji alibaki kwenye chumba cha kijani baada ya uchunguzi mbili, lakini pia kuna nafasi kwamba aliondoka na kurudi. Hapa kuna jedwali jipya kwa kuzingatia data mpya:

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta

Inaonyesha kwamba nafasi ya kuona mchezaji katika chumba kijani baada ya uchunguzi mbili itakuwa sawa na 51% - 21% kwamba atakuwa kutoka chumba nyekundu, 5% yao kwamba mchezaji kutembelea chumba bluu kati yao, na. 25% ambayo mchezaji hataondoka kwenye chumba cha kijani.

Jedwali ni zana ya kuona tu - utaratibu unahitaji tu kuzidisha uwezekano katika kila hatua. Hii inamaanisha kuwa unaweza kutazama siku zijazo kwa tahadhari moja: tunadhania kuwa nafasi ya kuingia kwenye chumba inategemea kabisa chumba cha sasa. Hii inaitwa Mali ya Markov - hali ya baadaye inategemea tu sasa. Lakini hii si asilimia mia moja sahihi. Wachezaji wanaweza kubadilisha maamuzi kulingana na mambo mengine: kiwango cha afya au kiasi cha risasi. Kwa sababu haturekodi thamani hizi, utabiri wetu hautakuwa sahihi sana.

N-Gramu

Vipi kuhusu mfano wa mchezo wa mapigano na kutabiri mienendo ya kuchana ya mchezaji? Sawa! Lakini badala ya hali moja au tukio, tutachunguza mlolongo mzima unaounda mgomo wa mchanganyiko.

Njia moja ya kufanya hivi ni kuhifadhi kila ingizo (kama vile Kick, Punch au Block) kwenye bafa na uandike bafa nzima kama tukio. Kwa hivyo mchezaji anabonyeza mara kwa mara Kick, Kick, Punch ili kutumia mashambulizi ya SuperDeathFist, mfumo wa AI huhifadhi pembejeo zote kwenye bafa na hukumbuka tatu za mwisho zilizotumiwa katika kila hatua.

Jinsi ya kuunda AI ya michezo ya kubahatisha: mwongozo kwa Kompyuta
(Mistari yenye herufi nzito ni wakati mchezaji anapozindua mashambulizi ya SuperDeathFist.)

AI itaona chaguo zote mchezaji anapochagua Kick, ikifuatiwa na Kick nyingine, na kisha utambue kwamba ingizo linalofuata daima ni Punch. Hii itamruhusu wakala kutabiri uhamishaji wa mseto wa SuperDeathFist na kuizuia ikiwezekana.

Mfuatano huu wa matukio huitwa N-grams, ambapo N ni idadi ya vipengele vilivyohifadhiwa. Katika mfano uliopita ilikuwa 3-gramu (trigram), ambayo ina maana: maingizo mawili ya kwanza hutumiwa kutabiri ya tatu. Ipasavyo, katika gramu 5, viingilio vinne vya kwanza vinatabiri ya tano na kadhalika.

Mbuni anahitaji kuchagua saizi ya N-gramu kwa uangalifu. N ndogo inahitaji kumbukumbu kidogo lakini pia huhifadhi historia kidogo. Kwa mfano, 2-gramu (bigram) itarekodi Kick, Kick au Kick, Punch, lakini haitaweza kuhifadhi Kick, Kick, Punch, hivyo AI haitajibu combo ya SuperDeathFist.

Kwa upande mwingine, nambari kubwa zinahitaji kumbukumbu zaidi na AI itakuwa ngumu zaidi kutoa mafunzo kwani kutakuwa na chaguzi nyingi zaidi zinazowezekana. Ikiwa ungekuwa na pembejeo tatu zinazowezekana za Kick, Punch au Block, na tulitumia gramu 10, hiyo ingekuwa takriban chaguzi elfu 60 tofauti.

Mfano wa bigram ni mnyororo rahisi wa Markov - kila jozi ya hali ya zamani / hali ya sasa ni bigram, na unaweza kutabiri hali ya pili kulingana na ya kwanza. Gramu 3 na N-gramu kubwa pia zinaweza kuzingatiwa kama minyororo ya Markov, ambapo vitu vyote (isipokuwa ile ya mwisho kwenye N-gramu) kwa pamoja huunda hali ya kwanza na kipengele cha mwisho cha pili. Mfano wa mchezo wa mapigano unaonyesha fursa ya kuhama kutoka hali ya Kick na Kick hadi hali ya Kick na Punch. Kwa kushughulikia maingizo mengi ya historia ya ingizo kama kitengo kimoja, kimsingi tunabadilisha mlolongo wa ingizo kuwa sehemu ya jimbo zima. Hii inatupa mali ya Markov, ambayo huturuhusu kutumia minyororo ya Markov kutabiri ingizo linalofuata na kukisia ni hoja gani ya mseto itafuata.

Hitimisho

Tulizungumza juu ya zana na njia za kawaida katika ukuzaji wa akili ya bandia. Tuliangalia pia hali ambazo zinahitaji kutumiwa na ambapo zinafaa sana.

Hii inapaswa kutosha kuelewa misingi ya mchezo AI. Lakini, bila shaka, hizi sio njia zote. Chini maarufu, lakini sio chini ya ufanisi ni pamoja na:

  • kanuni za uboreshaji ikiwa ni pamoja na kupanda vilima, mteremko wa gradient na kanuni za kijeni
  • Utafutaji pinzani/kuratibu algoriti (upogoaji mdogo na alpha-beta)
  • njia za uainishaji (perceptrons, mitandao ya neural na mashine za vekta za usaidizi)
  • mifumo ya utambuzi na kumbukumbu ya mawakala
  • mbinu za usanifu kwa AI (mifumo ya mseto, usanifu wa sehemu ndogo na njia zingine za kufunika mifumo ya AI)
  • zana za uhuishaji (mipango na uratibu wa mwendo)
  • vipengele vya utendaji (kiwango cha maelezo, wakati wowote, na kanuni za mpangilio wa nyakati)

Rasilimali za mtandaoni kwenye mada:

1. GameDev.net ina sehemu iliyo na vifungu na mafunzo juu ya AINa jukwaa.
2. AiGameDev.com ina mawasilisho na vifungu vingi juu ya mada anuwai zinazohusiana na ukuzaji wa AI ya mchezo.
3. Sehemu ya GDC inajumuisha mada kutoka kwa Mkutano wa GDC AI, nyingi zinapatikana bila malipo.
4. Nyenzo muhimu zinaweza pia kupatikana kwenye tovuti Chama cha Watengenezaji wa Michezo ya AI.
5. Tommy Thompson, mtafiti wa AI na msanidi wa mchezo, hutengeneza video kwenye YouTube AI na Michezo kwa maelezo na utafiti wa AI katika michezo ya kibiashara.

Vitabu juu ya mada:

1. Mfululizo wa kitabu cha Game AI Pro ni mkusanyo wa makala mafupi yanayoeleza jinsi ya kutekeleza vipengele mahususi au jinsi ya kutatua matatizo mahususi.

Mchezo AI Pro: Imekusanywa Hekima ya Mchezo Wataalamu wa AI
Mchezo AI Pro 2: Imekusanywa Hekima ya Mchezo Wataalamu wa AI
Mchezo AI Pro 3: Imekusanywa Hekima ya Mchezo Wataalamu wa AI

2. Msururu wa Hekima ya Kuandaa Mchezo wa AI ndio mtangulizi wa mfululizo wa Game AI Pro. Ina njia za zamani, lakini karibu zote zinafaa hata leo.

Hekima ya Kupanga Michezo ya AI 1
Hekima ya Kupanga Michezo ya AI 2
Hekima ya Kupanga Michezo ya AI 3
Hekima ya Kupanga Michezo ya AI 4

3. Akili Bandia: Mbinu ya Kisasa ni moja ya maandishi ya msingi kwa kila mtu ambaye anataka kuelewa uwanja wa jumla wa akili ya bandia. Hiki si kitabu kuhusu ukuzaji wa mchezo - kinafundisha misingi ya AI.

Chanzo: mapenzi.com

Kuongeza maoni