Cara nggawe AI game: pandhuan kanggo pamula

Cara nggawe AI game: pandhuan kanggo pamula

Aku nemokake sawetara materi sing menarik babagan intelijen buatan ing game. Kanthi panjelasan babagan dhasar babagan AI nggunakake conto sing prasaja, lan ing njero ana akeh alat lan cara sing migunani kanggo pangembangan lan desain sing trep. Carane, ngendi lan nalika nggunakake uga ana.

Umume conto ditulis ing pseudocode, mula ora dibutuhake kawruh pemrograman lanjut. Ing ngisor potongan kasebut ana 35 lembar teks kanthi gambar lan gif, mula siyap.

UPD. Nyuwun pangapunten, nanging aku wis nindakake terjemahan dhewe saka artikel iki babagan Habré PatientZero. Sampeyan bisa maca versi dheweke kene, nanging sakperangan alesan artikel liwati kula (Aku nggunakake panelusuran, nanging ana sing salah). Lan wiwit aku nulis ing blog darmabakti kanggo pangembangan game, aku mutusaké kanggo ninggalake versi terjemahan kanggo pelanggan (sawetara TCTerms sing format beda, sawetara padha sengaja tilar ing saran saka pangembang).

Apa AI?

Game AI fokus ing tumindak apa sing kudu ditindakake obyek adhedhasar kahanan sing ana. Iki umume diarani manajemen "agen cerdas", ing ngendi agen minangka karakter pemain, kendaraan, bot, utawa kadhangkala luwih abstrak: kabeh klompok entitas utawa malah peradaban. Ing saben kasus, iku kudu ndeleng lingkungane, nggawe keputusan adhedhasar iku, lan tumindak miturut wong-wong mau. Iki diarani siklus Sense/Think/Act:

  • Sense: Agen nemokake utawa nampa informasi babagan samubarang ing lingkungane sing bisa mengaruhi prilaku (ancaman ing cedhak, item kanggo dikumpulake, panggonan menarik kanggo njelajah).
  • Mikir: Agen nemtokake cara kanggo nanggepi (nganggep manawa cukup aman kanggo ngumpulake barang utawa apa dheweke kudu perang / ndhelikake dhisik).
  • Tumindak: agen nindakake tumindak kanggo ngleksanakake keputusan sadurunge (miwiti pindhah menyang mungsuh utawa obyek).
  • ...saiki kahanan wis owah amarga tumindake paraga, mula sikluse bola-bali nganggo data anyar.

AI cenderung fokus ing bagean Sense saka daur ulang. Contone, mobil otonom njupuk gambar dalan, gabungke karo data radar lan lidar, lan interpretasi. Iki biasane ditindakake kanthi sinau mesin, sing ngolah data sing mlebu lan menehi makna, ngekstrak informasi semantik kaya "ana mobil liyane 20 yard ing ngarep sampeyan." Iki sing diarani masalah klasifikasi.

Game ora mbutuhake sistem sing rumit kanggo ngekstrak informasi amarga umume data wis dadi bagian integral. Ora perlu mbukak algoritma pangenalan gambar kanggo nemtokake manawa ana mungsuh ing ngarep-game wis ngerti lan menehi informasi langsung menyang proses nggawe keputusan. Mulane, bagean Sense saka siklus asring luwih prasaja tinimbang bagean Think and Act.

Watesan Game AI

AI duwe sawetara watesan sing kudu diamati:

  • AI ora perlu dilatih luwih dhisik, kaya-kaya algoritma pembelajaran mesin. Ora ana gunane nulis jaringan saraf sajrone pangembangan kanggo ngawasi puluhan ewu pemain lan sinau cara paling apik kanggo main nglawan dheweke. Kenging punapa? Amarga game kasebut durung dirilis lan ora ana pemain.
  • Game kasebut kudu nyenengake lan nantang, mula agen ora kudu nemokake pendekatan sing paling apik kanggo wong.
  • Agen kudu katon realistis supaya pemain aran kaya lagi main nglawan wong nyata. Program AlphaGo ngluwihi manungsa, nanging langkah-langkah sing dipilih adoh banget saka pangerten tradisional babagan game kasebut. Yen game simulasi mungsuh manungsa, perasaan iki ora kudu ana. Algoritma kasebut kudu diganti supaya bisa nggawe keputusan sing bisa dipercaya tinimbang sing cocog.
  • AI kudu bisa ing wektu nyata. Iki tegese algoritma ora bisa monopoli panggunaan CPU kanggo wektu sing suwe kanggo nggawe keputusan. Malah 10 milliseconds dawa banget, amarga paling game mung perlu 16 kanggo 33 milliseconds kanggo nindakake kabeh Processing lan pindhah menyang pigura grafis sabanjuré.
  • Saenipun, paling ora bagean saka sistem kudu data-driven, supaya non-koder bisa nggawe owah-owahan lan pangaturan bisa kelakon luwih cepet.

Ayo goleki pendekatan AI sing nutupi kabeh siklus Sense/Think/Act.

Nggawe Keputusan Dasar

Ayo dadi miwiti karo game paling prasaja - Pong. Goal: mindhah dayung supaya bal mumbul saka iku tinimbang mabur liwat iku. Iku kaya tenis, sing kalah yen ora kenek bal. Ing kene AI duwe tugas sing gampang banget - mutusake arah kanggo mindhah platform kasebut.

Cara nggawe AI game: pandhuan kanggo pamula

Pranyatan kondisional

Kanggo AI ing Pong, solusi sing paling jelas yaiku tansah nyoba nyelehake platform ing sangisore bal.

Algoritma prasaja kanggo iki, ditulis ing pseudocode:

saben pigura / nganyari nalika game mlaku:
yen bal ana ing sisih kiwa paddle:
ngalih dayung ngiwa
Yen bal ana ing sisih tengen paddle:
ngalih paddle tengen

Yen platform obah kanthi kacepetan bal, mula iki minangka algoritma sing cocog kanggo AI ing Pong. Ora perlu rumit apa-apa yen ora ana data lan tumindak sing bisa ditindakake kanggo agen kasebut.

Pendekatan iki gampang banget supaya kabeh siklus Sense / Think / Act meh ora katon. Nanging ana:

  • Bagian Sense ana ing rong pernyataan yen. Game kasebut ngerti ing ngendi bal kasebut lan ing ngendi platform kasebut, mula AI nggoleki informasi kasebut.
  • Perangan Think uga kalebu ing rong pernyataan yen. Dheweke ngemot rong solusi, sing ing kasus iki saling eksklusif. Akibaté, salah siji saka telung tumindak dipilih - mindhah platform ngiwa, pindhah menyang tengen, utawa ora nindakake apa-apa yen wis dipanggonke kanthi bener.
  • Bagean Undhang-undhang ditemokake ing statement Pindhah Paddle Ngiwa lan Pindhah Paddle Kanan. Gumantung ing desain game, padha bisa mindhah platform langsung utawa ing kacepetan tartamtu.

Pendekatan kasebut diarani reaktif - ana aturan sing prasaja (ing kasus iki, yen pernyataan ing kode) sing nanggepi kahanan saiki ing donya lan tumindak.

Wit kaputusan

Conto Pong bener-bener padha karo konsep AI resmi sing diarani wit keputusan. Algoritma kasebut ngliwati kanggo nggayuh "godhong" - keputusan babagan tindakan sing kudu ditindakake.

Ayo nggawe diagram blok saka wit keputusan kanggo algoritma platform kita:

Cara nggawe AI game: pandhuan kanggo pamula

Saben bagean wit kasebut diarani simpul - AI nggunakake teori grafik kanggo nggambarake struktur kasebut. Ana rong jinis node:

  • Node keputusan: milih antarane rong alternatif adhedhasar nguji sawetara kondisi, ing ngendi saben alternatif dituduhake minangka simpul sing kapisah.
  • End node: Tumindak kanggo nindakake sing makili kaputusan final.

Algoritma kasebut diwiwiti saka simpul pisanan ("root" saka wit). Iki nggawe keputusan babagan simpul anak sing arep dituju, utawa nindakake tumindak sing disimpen ing simpul lan metu.

Apa gunane yen wit keputusan nindakake pakaryan sing padha karo pernyataan yen ing bagean sadurunge? Ana sistem umum ing ngendi saben keputusan mung nduweni siji kondisi lan rong kemungkinan asil. Iki ngidini pangembang nggawe AI saka data sing makili keputusan ing wit tanpa kudu kode hard. Ayo diwenehi ing wangun tabel:

Cara nggawe AI game: pandhuan kanggo pamula

Ing sisih kode sampeyan bakal entuk sistem kanggo maca strings. Nggawe simpul kanggo saben wong, nyambung logika kaputusan adhedhasar kolom kapindho, lan simpul anak adhedhasar kolom katelu lan papat. Sampeyan isih kudu program kahanan lan tumindak, nanging saiki struktur game bakal luwih Komplek. Ing kene sampeyan nambahake keputusan lan tumindak tambahan, banjur ngatur kabeh AI kanthi mung nyunting file teks definisi wit. Sabanjure, sampeyan nransfer file menyang desainer game, sing bisa ngganti prilaku tanpa recompile game utawa ngganti kode.

Wit kaputusan banget migunani nalika lagi dibangun kanthi otomatis saka pesawat gedhe conto (contone, nggunakake algoritma ID3). Iki ndadekake alat sing efektif lan kinerja dhuwur kanggo klasifikasi kahanan adhedhasar data sing dipikolehi. Nanging, kita ngluwihi sistem prasaja kanggo agen kanggo milih tumindak.

Skenario

Kita nganalisa sistem wit keputusan sing nggunakake kahanan lan tumindak sing wis digawe. Wong sing ngrancang AI bisa ngatur wit kaya sing dikarepake, nanging dheweke isih kudu ngandelake coder sing wis diprogram kabeh. Apa yen kita bisa menehi desainer alat kanggo nggawe kahanan utawa tumindak dhewe?

Supaya programmer ora kudu nulis kode kanggo kondisi Apa Ball Kiri saka Paddle lan Ball tengen Paddle, kang bisa nggawe sistem kang desainer bakal nulis kahanan kanggo mriksa nilai kasebut. Banjur data wit keputusan bakal katon kaya iki:

Cara nggawe AI game: pandhuan kanggo pamula

Iki pancen padha karo ing tabel pisanan, nanging solusi kasebut duwe kode dhewe, kaya bagean kondisional saka pernyataan yen. Ing sisih kode, iki bakal maca ing kolom kapindho kanggo simpul kaputusan, nanging tinimbang looking for kondisi tartamtu kanggo nglakokaké (Apa Ball Kiri saka Paddle), ngevaluasi expression saratipun lan bali bener utawa salah. Iki ditindakake nggunakake basa skrip Lua utawa Angelscript. Nggunakake, pangembang bisa njupuk obyek ing game (bal lan paddle) lan nggawe variabel sing bakal kasedhiya ing script (ball.position). Uga, basa skrip luwih gampang tinimbang C++. Ora mbutuhake tataran kompilasi lengkap, dadi becik kanggo nyetel logika game kanthi cepet lan ngidini "non-coders" nggawe fungsi sing dibutuhake dhewe.

Ing conto ing ndhuwur, basa skrip mung digunakake kanggo ngevaluasi ekspresi kondisional, nanging uga bisa digunakake kanggo tumindak. Contone, data Move Paddle Right bisa dadi statement script (ball.position.x += 10). Supaya tumindak kasebut uga ditetepake ing naskah, tanpa perlu program Move Paddle Right.

Sampeyan bisa luwih maju lan nulis kabeh wit keputusan ing basa skrip. Iki bakal dadi kode ing bentuk pernyataan kondisional hardcoded, nanging bakal ana ing file skrip eksternal, yaiku, bisa diganti tanpa nglumpukake kabeh program. Sampeyan kerep bisa ngowahi file skrip sajrone urutane critane game kanggo nguji reaksi AI kanthi cepet.

Tanggapan Acara

Conto ing ndhuwur iku sampurna kanggo Pong. Dheweke terus-terusan nglakokake siklus Sense / Think / Act lan tumindak adhedhasar kahanan paling anyar ing donya. Nanging ing game sing luwih rumit sampeyan kudu nanggepi acara individu, lan ora ngevaluasi kabeh bebarengan. Pong ing kasus iki wis dadi conto sing ala. Ayo milih liyane.

Mbayangno penembake ngendi mungsuh ora obah nganti padha ndeteksi pamuter, sawise kang tumindak gumantung ing "spesialisasi": wong bakal mlayu menyang "rush", wong bakal nyerang saka kadohan. Iku isih sistem reaktif dhasar - "yen pemain kesawang, apa soko" - nanging bisa logis bejat mudhun menyang acara Player Seen lan Reaksi (pilih respon lan nglakokaké).

Iki nggawa kita bali menyang siklus Sense / Think / Act. Kita bisa kode bagean Sense sing bakal mriksa saben pigura apa AI weruh pamuter. Yen ora, ora ana sing kedadeyan, nanging yen ndeleng, mula acara Player Seen digawe. Kode bakal duwe bagean kapisah sing ngandika "nalika acara Player Seen occurs, apa" ngendi respon sampeyan kudu alamat bagean Think and Act. Mangkono, sampeyan bakal nyetel reaksi menyang acara Player Seen: kanggo karakter "rushing" - ChargeAndAttack, lan kanggo penembak jitu - HideAndSnipe. Hubungan kasebut bisa digawe ing file data kanggo nyunting kanthi cepet tanpa kudu dikompilasi maneh. Basa skrip uga bisa digunakake ing kene.

Nggawe keputusan sing angel

Senajan sistem reaksi prasaja banget kuat, ana akeh kahanan sing padha ora cukup. Kadhangkala sampeyan kudu nggawe keputusan sing beda adhedhasar apa sing ditindakake agen saiki, nanging angel mbayangake iki minangka syarat. Kadhangkala ana akeh banget kahanan kanggo makili kanthi efektif ing wit keputusan utawa naskah. Kadhangkala sampeyan kudu netepake luwih dhisik kepiye kahanan bakal diganti sadurunge mutusake langkah sabanjure. Pendekatan sing luwih canggih dibutuhake kanggo ngatasi masalah kasebut.

mesin negara winates

mesin negara winates utawa FSM (mesin negara winates) iku sawijining cara ngandika agen kita saiki ing salah siji saka sawetara negara bisa, lan bisa transisi saka siji negara liyane. Ana sawetara negara kasebut - mula jenenge. Conto paling apik saka urip yaiku lampu lalu lintas. Ana macem-macem urutan lampu ing macem-macem panggonan, nanging prinsip padha - saben negara makili soko (mandheg, lumaku, etc.). Lampu lalu lintas mung ana ing siji negara ing sembarang wektu, lan pindhah saka siji menyang liyane adhedhasar aturan prasaja.

Iku crita sing padha karo NPC ing game. Contone, ayo njupuk pengawal kanthi negara ing ngisor iki:

  • Patroli.
  • nyerang.
  • Mlayu.

Lan kahanan iki kanggo ngganti negara:

  • Yen pengawal weruh mungsuh, dheweke nyerang.
  • Yen pengawal nyerang nanging ora weruh mungsuh maneh, dheweke bali menyang patroli.
  • Yen pengawal nyerang nanging tatu parah, dheweke mlayu.

Sampeyan uga bisa nulis yen-statements karo variabel negara wali lan macem-macem mriksa: ana mungsuh cedhak, apa tingkat kesehatan saka NPC, etc. Ayo nambah sawetara negara liyane:

  • Idleness - antarane patroli.
  • Nggoleki - nalika mungsuh sing katon wis ilang.
  • Nemokake Pitulung - nalika mungsuh katon, nanging kuwat banget kanggo perang piyambak.

Pilihan kanggo saben wong diwatesi - umpamane, penjaga ora bakal nggoleki mungsuh sing didhelikake yen kesehatane kurang.

Sawise kabeh, ana dhaptar akeh "yen" , Iku "Bisa dadi rumit banget, mula kita kudu ngresmikake metode sing ngidini kita ngelingi negara lan transisi antarane negara. Kanggo nindakake iki, kita njupuk menyang akun kabeh negara, lan ing saben negara kita nulis mudhun ing dhaftar kabeh transisi menyang negara liyane, bebarengan karo kahanan sing perlu kanggo wong-wong mau.

Cara nggawe AI game: pandhuan kanggo pamula

Iki minangka tabel transisi negara - cara lengkap kanggo makili FSM. Ayo nggambar diagram lan entuk gambaran lengkap babagan owah-owahan prilaku NPC.

Cara nggawe AI game: pandhuan kanggo pamula

Diagram kasebut nggambarake inti saka nggawe keputusan kanggo agen iki adhedhasar kahanan saiki. Menapa malih, saben panah nuduhake transisi antarane negara yen kondisi jejere iku bener.

Saben nganyari kita mriksa negara saiki agen, katon liwat dhaftar transisi, lan yen kahanan kanggo transisi ketemu, iku nampa negara anyar. Contone, saben pigura mriksa apa wektu 10 detik wis kadaluwarsa, lan yen ya, banjur njaga saka negara Idling kanggo Patrolling. Kanthi cara sing padha, negara Attacking mriksa kesehatan agen - yen kurang, banjur pindhah menyang negara Fleeing.

Iki nangani transisi antarane negara, nanging kepiye prilaku sing ana gandhengane karo negara kasebut? Ing babagan ngetrapake prilaku nyata kanggo negara tartamtu, biasane ana rong jinis "pancing" ing ngendi kita nemtokake tumindak menyang FSM:

  • Tumindak sing ditindakake sacara periodik kanggo kahanan saiki.
  • Tumindak sing ditindakake nalika pindhah saka siji negara menyang negara liyane.

Conto kanggo jinis pisanan. Negara Patroli bakal mindhah agen ing rute patroli saben pigura. Negara Attacking bakal nyoba kanggo miwiti serangan saben pigura utawa transisi menyang negara ngendi iki bisa.

Kanggo jinis kapindho, nimbang transisi "yen mungsuh katon lan mungsuh kuwat banget, banjur pindhah menyang negara Finding Help. Agen kudu milih menyang ngendi kanggo njaluk bantuan lan nyimpen informasi iki supaya negara Finding Help ngerti ngendi kanggo pindhah. Sawise bantuan ditemokake, agen bali menyang negara Attacking. Ing wektu iki, dheweke pengin ngandhani sekutu babagan ancaman kasebut, supaya tumindak NotifyFriendOfThreat bisa kedadeyan.

Sawise maneh, kita bisa ndeleng sistem iki liwat lensa siklus Sense / Think / Act. Sense diwujudake ing data sing digunakake dening logika transisi. Mikir - transisi kasedhiya ing saben negara. Lan Undhang-undhang ditindakake kanthi tumindak sing ditindakake sacara periodik ing sawijining negara utawa ing transisi antarane negara.

Kadhangkala kahanan transisi polling sing terus-terusan bisa larang. Contone, yen saben agen nindakake petungan Komplek saben pigura kanggo nemtokake apa bisa ndeleng mungsuh lan ngerti apa bisa transisi saka Patroli kanggo negara nyerang, iki bakal njupuk akèh wektu CPU.

Owah-owahan penting ing kahanan donya bisa dianggep minangka acara sing bakal diproses nalika kedadeyan kasebut. Tinimbang FSM mriksa kondisi transisi "bisa agen sandi ndeleng pamuter?" Saben pigura, sistem kapisah bisa diatur kanggo mriksa kurang kerep (f.eks. 5 kaping per detik). Lan asil kanggo ngetokake Player Seen nalika mriksa liwat.

Iki diterusake menyang FSM, sing saiki kudu pindhah menyang acara Player Seen sing ditampa lan nanggapi. Prilaku sing diasilake padha kajaba wektu tundha sing meh ora katon sadurunge nanggapi. Nanging kinerja wis apik minangka asil saka misahake bagean Sense menyang bagean kapisah saka program.

Mesin negara winates hirarkis

Nanging, nggarap FSM gedhe ora mesthi trep. Yen kita pengin nggedhekake negara serangan kanggo misahake MeleeAttacking lan RangedAttacking, kita kudu ngganti transisi saka kabeh negara liyane sing mimpin kanggo negara Attacking (saiki lan mangsa).

Sampeyan bisa uga ngerteni manawa ing conto kita ana akeh transisi duplikat. Umume transisi ing negara Idling padha karo transisi ing negara Patroli. Iku bakal becik ora kanggo mbaleni dhéwé, utamané yen kita nambah liyane padha negara. Iku ndadekake pangertèn kanggo grup Idling lan Patrolling ing label umum "non-pertempuran", ngendi ana mung siji pesawat umum saka transisi kanggo pertempuran negara. Yen kita nganggep label iki minangka negara, mula Idling lan Patroli dadi substate. Conto nggunakake tabel transisi kapisah kanggo substate non-pertempuran anyar:

Negara utama:
Cara nggawe AI game: pandhuan kanggo pamula

Status metu saka pertempuran:
Cara nggawe AI game: pandhuan kanggo pamula

Lan ing wangun diagram:

Cara nggawe AI game: pandhuan kanggo pamula

Iku sistem padha, nanging karo negara non-pertempuran anyar sing kalebu Idling lan Patrolling. Kanthi saben negara ngemot FSM karo substates (lan substates iki, ing siji, ngemot FSMs dhewe - lan sateruse kanggo anggere sampeyan perlu), kita njaluk Hierarchical Finite State Machine utawa HFSM (hierarchical finite state machine). Kanthi klompok negara non-pertempuran, kita Cut metu Bunch saka transisi keluwih. Kita bisa nindakake padha kanggo sembarang negara anyar karo transisi umum. Contone, yen ing mangsa kita nggedhekake negara Attacking kanggo negara MeleeAttacking lan MissileAttacking, bakal substates sing transisi antarane saben liyane adhedhasar kadohan kanggo mungsuh lan kasedhiyan amunisi. Akibaté, prilaku rumit lan sub-prilaku bisa diwakili kanthi minimal transisi duplikat.

Wit kelakuan

Kanthi HFSM, kombinasi prilaku sing rumit digawe kanthi cara sing gampang. Nanging, ana kangelan sethitik sing nggawe kaputusan ing wangun aturan transisi raket banget karo negara saiki. Lan ing akeh game iki persis apa sing dibutuhake. Lan kanthi ati-ati nggunakake hirarki negara bisa nyuda jumlah repetisi transisi. Nanging kadhangkala sampeyan butuh aturan sing bisa digunakake apa wae negara sampeyan, utawa sing ditrapake ing meh kabeh negara. Contone, yen kesehatan agen mudhun nganti 25%, sampeyan pengin dheweke mlayu, ora preduli saka pertempuran, nganggur, utawa ngomong - sampeyan kudu nambah kondisi kasebut ing saben negara. Lan yen desainer sampeyan mengko pengin ngganti ambang kesehatan sing kurang saka 25% dadi 10%, mula iki kudu ditindakake maneh.

Saenipun, kahanan iki mbutuhake sistem ing ngendi keputusan babagan "negara apa" ana ing njaba negara kasebut, supaya bisa ngowahi mung ing sak panggonan lan ora ndemek kahanan transisi. Wit prilaku katon ing kene.

Ana sawetara cara kanggo ngleksanakake, nanging intine kira-kira padha kanggo kabeh lan padha karo wit keputusan: algoritma diwiwiti kanthi simpul "root", lan wit kasebut ngemot kelenjar sing makili keputusan utawa tumindak. Nanging ana sawetara prabédan utama:

  • Node saiki ngasilake salah siji saka telung nilai: Sukses (yen proyek wis rampung), Gagal (yen ora bisa diwiwiti), utawa Running (yen isih mlaku lan ora ana asil pungkasan).
  • Ora ana simpul kaputusan maneh kanggo milih antarane rong alternatif. Nanging, iku simpul Dekorator, sing duwe siji simpul anak. Yen padha Sukses, padha nglakokaké siji-sijine simpul anak.
  • Node sing nindakake tumindak ngasilake nilai Running kanggo makili tumindak sing ditindakake.

Iki set cilik saka kelenjar bisa digabungake kanggo nggawe nomer akeh prilaku Komplek. Ayo mbayangno pengawal HFSM saka conto sadurunge minangka wit prilaku:

Cara nggawe AI game: pandhuan kanggo pamula

Kanthi struktur iki, ora ana transisi sing jelas saka negara Idling / Patrolling menyang Attacking utawa negara liya. Yen mungsuh katon lan kesehatan karakter kurang, eksekusi bakal mandheg ing simpul Fleeing, preduli saka simpul sing sadurunge dieksekusi - Patroli, Idling, Attacking, utawa liyane.

Cara nggawe AI game: pandhuan kanggo pamula

Wit-witan prilaku rumit-ana akeh cara kanggo nyipta, lan nemokake kombinasi dekorator lan simpul majemuk sing bener bisa dadi tantangan. Ana uga pitakonan babagan sepira kerepe mriksa wit - apa kita pengin ngliwati saben bagean utawa mung nalika salah sawijining kahanan wis diganti? Kepiye carane kita nyimpen negara sing ana hubungane karo simpul - kepiye ngerti yen kita wis Idling sajrone 10 detik, utawa kepiye ngerti simpul endi sing ditindakake pungkasan supaya bisa ngolah urutan kasebut kanthi bener?

Mulane ana akeh implementasine. Contone, sawetara sistem wis ngganti simpul dekorator karo dekorator inline. Dheweke ngevaluasi maneh wit kasebut nalika kahanan dekorator ganti, mbantu nggabungake simpul, lan menehi nganyari kanthi periodik.

Sistem basis Utilitas

Sawetara game duwe macem-macem mekanika. Iku seng di pengeni sing padha nampa kabeh keuntungan saka aturan transisi prasaja lan umum, nanging ora kudu ing wangun wit lengkap prilaku. Tinimbang duwe pilihan sing jelas utawa wit sing bisa ditindakake, luwih gampang kanggo nliti kabeh tumindak lan milih sing paling cocog saiki.

Sistem basis Utilitas bakal mbantu mung iki. Iki minangka sistem ing ngendi agen duwe macem-macem tumindak lan milih sing bakal ditindakake adhedhasar utilitas relatif saben. Ing ngendi utilitas minangka ukuran sewenang-wenang babagan carane penting utawa dikarepake agen kanggo nindakake tumindak iki.

Utilitas sing diwilang saka tumindak adhedhasar kahanan lan lingkungan saiki, agen bisa mriksa lan milih negara liya sing paling cocog kapan wae. Iki padha karo FSM, kajaba transisi ditemtokake dening perkiraan kanggo saben negara potensial, kalebu saiki. Elinga yen kita milih tumindak sing paling migunani kanggo nerusake (utawa tetep yen kita wis rampung). Kanggo macem-macem liyane, iki bisa dadi pilihan imbang nanging acak saka dhaptar cilik.

Sistem kasebut menehi sawetara nilai utilitas sing sewenang-wenang-contone, saka 0 (rampung ora dikarepake) nganti 100 (rampung dikarepake). Saben tumindak duwe sawetara paramèter sing mengaruhi pitungan nilai iki. Bali menyang conto wali kita:

Cara nggawe AI game: pandhuan kanggo pamula

Transisi ing antarane tumindak sing ambigu - negara apa wae bisa ngetutake liyane. Prioritas tumindak ditemokake ing nilai utilitas sing bali. Yen mungsuh katon, lan mungsuh kuwat, lan kesehatan karakter kurang, banjur Fleeing lan FindingHelp bakal ngasilake nilai non-nol sing dhuwur. Ing kasus iki, FindingHelp mesthi luwih dhuwur. Kajaba iku, aktivitas non-pertempuran ora bakal bali luwih saka 50, mula bakal luwih murah tinimbang pertempuran. Sampeyan kudu nganggep iki nalika nggawe tumindak lan ngitung kegunaane.

Ing conto kita, tumindak ngasilake nilai konstan utawa salah siji saka rong nilai tetep. Sistem sing luwih nyata bakal ngasilake perkiraan saka sawetara nilai sing terus-terusan. Contone, tumindak Fleeing ngasilake nilai utilitas sing luwih dhuwur yen kesehatan agen kurang, lan tumindak Attacking ngasilake nilai utilitas sing luwih murah yen mungsuh kuwat banget. Amarga iki, tumindak Mlayu luwih dhisik tinimbang Serangan ing kahanan apa wae nalika agen kasebut rumangsa ora duwe kesehatan sing cukup kanggo ngalahake mungsuh. Iki ngidini tumindak bisa diprioritasake adhedhasar sawetara kritéria, nggawe pendekatan iki luwih fleksibel lan variabel tinimbang wit prilaku utawa FSM.

Saben tumindak nduweni akeh kahanan kanggo ngitung program. Bisa ditulis nganggo basa skrip utawa minangka seri rumus matematika. The Sims, kang simulates tumindake saben karakter kang, nambah lapisan tambahan saka pitungan - agen nampa seri saka "motivasi" sing pengaruhe ratings sarana. Yen karakter luwe, bakal dadi malah luwe liwat wektu, lan Nilai sarana tumindak EatFood bakal nambah nganti karakter performs, ngurangi tingkat keluwen lan bali Nilai EatFood kanggo nul.

Gagasan kanggo milih tumindak adhedhasar sistem rating cukup gampang, mula sistem basis Utilitas bisa digunakake minangka bagean saka proses nggawe keputusan AI, tinimbang minangka pengganti lengkap. Wit kaputusan bisa njaluk rating sarana saka rong kelenjar anak lan pilih sing luwih dhuwur. Kajaba iku, wit prilaku bisa duwe simpul Utilitas gabungan kanggo ngevaluasi utilitas tumindak kanggo mutusake bocah sing bakal ditindakake.

Gerakan lan pandhu arah

Ing conto sadurunge, kita duwe platform sing dipindhah ngiwa utawa nengen, lan pengawal sing patroli utawa nyerang. Nanging kepiye carane kita nangani gerakan agen sajrone sawetara wektu? Kepiye carane nyetel kacepetan, kepiye supaya ora ana alangan, lan kepiye cara ngrancang rute nalika tekan tujuan luwih angel tinimbang mung obah ing garis lurus? Ayo ndeleng iki.

Pamrentah

Ing tahap wiwitan, kita bakal nganggep yen saben agen nduweni nilai kacepetan, sing kalebu sepira cepet obah lan arah apa. Bisa diukur ing meter per detik, kilometer per jam, piksel per detik, etc.. Recalling Sense / Mikir / tumindak daur ulang, kita bisa mbayangno sing bagean Think milih kacepetan, lan bagean undhang ditrapake kacepetan sing agen. Biasane game duwe sistem fisika sing nindakake tugas iki kanggo sampeyan, sinau nilai kacepetan saben obyek lan nyetel. Mulane, sampeyan bisa ninggalake AI karo siji tugas - kanggo mutusake apa kacepetan agen kudu. Yen sampeyan ngerti ngendi agen kudu, sampeyan kudu pindhah menyang arah tengen ing kacepetan pesawat. Persamaan sing ora pati penting:

wanted_travel = panggonan_posisi – agen_posisi

Mbayangno donya 2D. Agen ana ing titik (-2,-2), tujuane ana ing sisih lor-wétan ing titik (30, 20), lan dalan sing dibutuhake kanggo agen kasebut yaiku (32, 22). Contone, posisi kasebut diukur ing meter - yen kita njupuk kacepetan agen dadi 5 meter per detik, banjur kita bakal skala vektor pamindahan lan entuk kacepetan kira-kira (4.12, 2.83). Kanthi paramèter kasebut, agen bakal tekan tujuane meh 8 detik.

Sampeyan bisa ngetung maneh nilai kasebut kapan wae. Yen agen wis setengah dalan kanggo target, gerakan bakal setengah dawa, nanging wiwit kacepetan maksimum agen punika 5 m / s (kita mutusaké ing ndhuwur), kacepetan bakal padha. Iki uga bisa digunakake kanggo mindhah target, saéngga agen bisa nggawe owah-owahan cilik nalika pindhah.

Nanging kita pengin luwih variasi - contone, alon-alon nambah kacepetan kanggo simulasi karakter obah saka ngadeg kanggo mlaku. Sing padha bisa ditindakake ing pungkasan sadurunge mandheg. Fitur iki dikenal minangka tindak tanduk setir, saben kang duwe jeneng tartamtu: Nggoleki, Mlayu, Rawuh, etc. Ide iku pasukan akselerasi bisa Applied kanggo kacepetan agen, adhedhasar mbandingaken posisi agen lan kacepetan saiki karo tujuan ing supaya nggunakake macem-macem cara kanggo pindhah menyang goal.

Saben prilaku nduweni tujuan sing rada beda. Seek and Arrival minangka cara kanggo mindhah agen menyang panggonan sing dituju. Panyegahan lan Pemisahan Rintangan nyetel gerakan agen supaya ora ana alangan ing dalan menyang tujuan. Alignment lan Kohesi supaya agen bisa mlaku bebarengan. Sembarang sawetara prilaku setir beda bisa diringkes kanggo gawé vektor path siji njupuk kabeh faktor menyang akun. Agen sing nggunakake prilaku Kedatangan, Pemisahan, lan Ngindhari Rintangan supaya adoh saka tembok lan agen liyane. Pendekatan iki bisa digunakake kanthi apik ing lokasi sing mbukak tanpa rincian sing ora perlu.

Ing kahanan sing luwih angel, tambahan prilaku sing beda-beda bisa dadi luwih elek - contone, agen bisa macet ing tembok amarga konflik antarane Kedatangan lan Ngindhari Rintangan. Mulane, sampeyan kudu nimbang opsi sing luwih rumit tinimbang mung nambah kabeh nilai. Cara iki: tinimbang nambah asil saben prilaku, sampeyan bisa nimbang gerakan ing arah sing beda-beda lan milih pilihan sing paling apik.

Nanging, ing lingkungan sing rumit kanthi buntu lan pilihan babagan cara sing bakal ditindakake, kita butuh sing luwih maju.

Golek cara

Prilaku setir apik banget kanggo gerakan sing prasaja ing area sing mbukak (lapangan bal-balan utawa arena) ing ngendi njupuk saka A menyang B minangka dalan sing lurus kanthi mung ngubengi alangan. Kanggo rute sing rumit, kita butuh pathfinding, yaiku cara kanggo njelajah jagad iki lan mutusake rute kasebut.

Sing paling gampang yaiku aplikasi kothak ing saben kothak ing jejere agen lan ngevaluasi sapa sing diijini pindhah. Yen salah sawijining tujuan, banjur tindakake rute saka saben alun-alun menyang sing sadurunge nganti tekan wiwitan. Iki rute. Yen ora, baleni proses kasebut karo kothak liyane sing cedhak nganti sampeyan nemokake tujuan sampeyan utawa kehabisan kothak (tegese ora ana rute sing bisa ditindakake). Iki sing sacara resmi dikenal minangka Breadth-First Search utawa BFS (algoritma telusuran pertama-breadth-first). Ing saben langkah dheweke katon ing kabeh arah (mula jembar, "jembaré"). Spasi telusuran kaya gelombang ngarep sing obah nganti tekan lokasi sing dikarepake - ruang telusuran nggedhekake saben langkah nganti titik pungkasan kalebu, banjur bisa dilacak maneh menyang wiwitan.

Cara nggawe AI game: pandhuan kanggo pamula

Akibaté, sampeyan bakal nampa dhaptar kothak ing sadawane rute sing dikarepake dikompilasi. Iki minangka path (mulane, pathfinding) - dhaptar panggonan sing bakal ditekani agen nalika ngetutake tujuan kasebut.

Amarga kita ngerti posisi saben kothak ing donya, kita bisa nggunakake prilaku setir kanggo mindhah dalan - saka simpul 1 kanggo simpul 2, banjur saka simpul 2 kanggo simpul 3, lan ing. Pilihan sing paling gampang yaiku tumuju menyang tengah kothak sabanjure, nanging pilihan sing luwih apik yaiku mandheg ing tengah pinggir antarane alun-alun saiki lan sabanjure. Amarga iki, agen bakal bisa ngethok sudhut ing belokan sing cetha.

Algoritma BFS uga duwe kekurangan - njelajah akeh kothak ing arah "salah" kaya ing arah "tengen". Iki minangka algoritma sing luwih rumit sing diarani A * (bintang A). Kerjane kanthi cara sing padha, nanging tinimbang nliti kothak pepadhamu kanthi wuta (banjur tanggi tetangga, banjur tanggi tanggane, lan liya-liyane), ngumpulake simpul dadi dhaptar lan ngurutake supaya simpul sabanjure sing ditliti tansah siji sing ndadékaké menyang rute paling cedhak. Node diurutake adhedhasar heuristik sing nyathet rong perkara - "biaya" rute hipotetis menyang alun-alun sing dikarepake (kalebu biaya perjalanan) lan perkiraan jarak alun-alun kasebut saka tujuan (bias telusuran ing arah sing bener).

Cara nggawe AI game: pandhuan kanggo pamula

Conto iki nuduhake yen agen njelajah siji kothak ing siji wektu, saben-saben milih siji jejer sing paling janjeni. Path asil padha BFS, nanging kurang kothak padha dianggep ing proses - kang wis impact amba ing kinerja game.

Gerakan tanpa kothak

Nanging paling game ora glethakaken metu ing kothak, lan asring mokal kanggo nindakake tanpa ngorbanake realisme. Kompromi dibutuhake. Apa ukuran kothak kudu? Gedhe banget lan ora bakal bisa makili koridor utawa belokan cilik kanthi bener, cilik banget lan bakal akeh banget kothak sing kudu digoleki, sing pungkasane butuh wektu akeh.

Wangsulan: Bab ingkang pisanan kanggo ngerti iku bolong menehi kita graph saka simpul sambungan. Algoritma A* lan BFS bener-bener nggarap grafik lan ora peduli babagan bolong kita. Kita bisa nyelehake simpul ing endi wae ing jagad game: anggere ana sambungan ing antarane rong simpul sing disambungake, uga ing antarane titik wiwitan lan pungkasan lan paling ora siji simpul, algoritma kasebut bakal bisa digunakake kaya sadurunge. Iki asring diarani sistem waypoint, amarga saben simpul nggambarake posisi sing penting ing donya sing bisa dadi bagean saka sawetara jalur hipotetis.

Cara nggawe AI game: pandhuan kanggo pamula
Tuladha 1: simpul ing saben kothak. Panelusuran diwiwiti saka simpul ing ngendi agen dumunung lan rampung ing simpul kothak sing dikarepake.

Cara nggawe AI game: pandhuan kanggo pamula
Conto 2: Sakumpulan simpul sing luwih cilik (titik arah). Panelusuran diwiwiti ing alun-alun agen, ngliwati jumlah simpul sing dibutuhake, banjur terus menyang tujuan.

Iki minangka sistem sing fleksibel lan kuat. Nanging sawetara ati-ati dibutuhake kanggo mutusake ing endi lan kepiye nempatake titik dalan, yen ora, agen bisa uga ora bisa ndeleng titik sing paling cedhak lan ora bisa miwiti dalan kasebut. Iku bakal luwih gampang yen kita bisa kanthi otomatis nyetel waypoints adhedhasar geometri donya.

Ing kene katon bolong navigasi utawa navmesh (bolong navigasi). Iki biasane bolong 2D saka segi telu sing dilapisi ing geometri donya - ing ngendi wae agen diijini mlaku. Saben segitiga ing bolong dadi simpul ing grafik, lan nganti telung segitiga jejer sing dadi simpul jejer ing grafik.

Gambar iki minangka conto saka mesin Unity - nganalisa geometri ing donya lan nggawe navmesh (ing gambar ing biru cahya). Saben poligon ing navmesh minangka area ing ngendi agen bisa ngadeg utawa pindhah saka poligon siji menyang poligon liyane. Ing conto iki, poligon luwih cilik tinimbang jubin sing ana - iki ditindakake kanggo njupuk ukuran agen, sing bakal ngluwihi posisi nominal.

Cara nggawe AI game: pandhuan kanggo pamula

Kita bisa nggoleki rute liwat bolong iki, maneh nggunakake algoritma A *. Iki bakal menehi kita rute meh sampurna ing donya, kang njupuk menyang akun kabeh geometri lan ora mbutuhake simpul rasah lan nggawe waypoints.

Pathfinding topik sing amba banget, sing siji bagean saka artikel ora cukup. Yen sampeyan pengin sinau kanthi luwih rinci, mula iki bakal mbantu situs web Amit Patel.

Planning

Kita wis sinau karo pathfinding sing kadhangkala ora cukup mung milih arah lan pindhah - kita kudu milih rute lan nggawe sawetara giliran kanggo tekan tujuan sing dikarepake. Kita bisa generalize idea iki: entuk goal ora mung langkah sabanjure, nanging kabeh urutan ing ngendi kadhangkala sampeyan kudu katon ahead sawetara langkah kanggo mangerteni apa sing kudu pisanan. Iki diarani planning. Pathfinding bisa dianggep minangka salah siji saka sawetara ekstensi kanggo ngrancang. Ing babagan siklus Sense / Think / Act, ing kene bagean Think ngrancang pirang-pirang bagean Act kanggo masa depan.

Ayo goleki conto papan game Magic: The Gathering. Kita pindhah dhisik karo set kertu ing tangan kita:

  • Rawa - Menehi 1 mana ireng (kertu tanah).
  • Alas - menehi 1 mana ijo (kertu tanah).
  • Fugitive Wizard - Mbutuhake 1 mana biru kanggo nelpon.
  • Elvish Mystic - Mbutuhake 1 mana ijo kanggo nyeluk.

We nglirwakake telung SIM isih kanggo gawe iku luwih gampang. Miturut aturan, pemain diijini kanggo muter 1 kertu tanah saben giliran, kang bisa "tutul" kertu iki kanggo extract mana saka, lan banjur mantra (kalebu nyeluk makhluk) miturut jumlah mana. Ing kahanan iki, pamuter manungsa ngerti kanggo muter Forest, tunyuk 1 mana ijo, lan banjur nelpon Elvish Mistik. Nanging kepiye carane game AI bisa ngerteni iki?

Perencanaan sing gampang

Pendekatan sing ora pati penting yaiku nyoba saben tumindak kanthi giliran nganti ora ana sing cocog. Kanthi ndeleng kertu, AI weruh apa sing bisa dimainake Swamp. Lan dheweke main. Apa ana tumindak liyane sing isih ana ing giliran iki? Ora bisa nelpon salah siji Elvish Mistik utawa Fugitive Wisaya, amarga padha mbutuhake mana ijo lan biru mungguh kanggo nelpon wong, nalika Rawa mung nyedhiyani mana ireng. Lan dheweke ora bakal bisa main Forest maneh, amarga dheweke wis main Rawa. Mangkono, game AI ngetutake aturan kasebut, nanging ora apik. Bisa ditingkatake.

Perencanaan bisa nemokake dhaptar tumindak sing nggawa game menyang negara sing dikarepake. Kayadene saben alun-alun ing dalan duwe tangga teparo (ing pathfinding), saben tumindak ing rencana uga duwe tanggi utawa penerus. Kita bisa nggoleki tumindak kasebut lan tumindak sakteruse nganti tekan kahanan sing dikarepake.

Ing conto kita, asil sing dikarepake yaiku "nyeluk makhluk yen bisa." Ing wiwitan giliran, kita mung bisa ndeleng rong tumindak sing diidini dening aturan game:

1. Play Swamp (hasil: Swamp in the game)
2. Play Forest (hasil: Forest in the game)

Saben tumindak bisa mimpin kanggo tumindak luwih lan nutup liyane, maneh gumantung ing aturan saka game. Mbayangno kita diputer Rawa - iki bakal mbusak Rawa minangka langkah sabanjure (kita wis diputer), lan iki uga bakal mbusak Alas (amarga miturut aturan sampeyan bisa muter siji kertu tanah saben siji). Sawise iki, AI nambahake 1 mana ireng minangka langkah sabanjure amarga ora ana pilihan liyane. Yen dheweke maju lan milih Tutul Rawa, dheweke bakal nampa 1 unit mana ireng lan ora bakal bisa nindakake apa-apa.

1. Play Swamp (hasil: Swamp in the game)
1.1 Rawa "Tap" (asil: Rawa "tapped", +1 unit mana ireng)
Ora ana tumindak sing kasedhiya - END
2. Play Forest (hasil: Forest in the game)

Dhaptar tumindak cendhak, kita tekan buntu. Kita mbaleni proses kanggo langkah sabanjure. Kita main Hutan, bukak aksi "entuk 1 mana ijo", sing bakal mbukak aksi katelu - nyeluk Elvish Mystic.

1. Play Swamp (hasil: Swamp in the game)
1.1 Rawa "Tap" (asil: Rawa "tapped", +1 unit mana ireng)
Ora ana tumindak sing kasedhiya - END
2. Play Forest (hasil: Forest in the game)
2.1 Alas "Tap" (asil: Alas "tapped", +1 unit mana ijo)
2.1.1 Panggil Elvish Mistik (asil: Elvish Mistik ing play, -1 ijo mana)
Ora ana tumindak sing kasedhiya - END

Pungkasan, kita njelajah kabeh tumindak sing bisa ditindakake lan nemokake rencana sing ngundang makhluk.

Iki minangka conto sing gampang banget. Disaranake milih rencana sing paling apik, tinimbang mung rencana sing cocog karo sawetara kritéria. Umume bisa ngevaluasi rencana potensial adhedhasar asil utawa entuk manfaat sakabèhé saka implementasine. Sampeyan bisa ngetung dhewe 1 TCTerms kanggo muter kertu tanah lan 3 TCTerms kanggo nelpon titah. Muter Rawa bakal dadi rencana 1 titik. Lan muter Hutan → Tutul Alas → nyeluk Elvish Mystic bakal langsung menehi 4 poin.

Iki minangka cara perencanaan ing Magic: The Gathering, nanging logika sing padha ditrapake ing kahanan liyane. Contone, obah pion kanggo nggawe papan kanggo uskup kanggo pindhah ing catur. Utawa nutupi tembok kanggo njupuk kanthi aman ing XCOM kaya iki. Umumé, sampeyan entuk ide.

Apik planning

Kadhangkala ana akeh banget tumindak potensial kanggo nimbang saben opsi sing bisa ditindakake. Bali menyang conto karo Piandel: The Gathering: ayo kang ngomong ing game lan ing tangan ana sawetara kertu tanah lan titah - nomer bisa kombinasi gerakane bisa ing Welasan. Ana sawetara solusi kanggo masalah kasebut.

Cara pisanan yaiku chaining mundur. Tinimbang nyoba kabeh kombinasi, luwih becik miwiti kanthi asil pungkasan lan nyoba golek rute langsung. Tinimbang pindhah saka ROOT wit menyang rwaning tartamtu, kita pindhah ing arah ngelawan - saka rwaning kanggo ROOT. Cara iki luwih gampang lan luwih cepet.

Yen mungsuh duwe 1 kesehatan, sampeyan bisa nemokake rencana "kesepakatan 1 utawa karusakan liyane". Kanggo nggayuh iki, sawetara syarat kudu ditindakake:

1. Karusakan bisa disebabake mantra - kudu ana ing tangan.
2. Kanggo mantra, sampeyan butuh mana.
3. Kanggo njaluk mana, sampeyan kudu muter kertu tanah.
4. Kanggo muter kertu tanah, sampeyan kudu duwe ing tangan.

Cara liya yaiku telusuran paling apik. Tinimbang nyoba kabeh dalan, kita milih sing paling cocok. Paling asring, cara iki menehi rencana optimal tanpa biaya panelusuran sing ora perlu. A* minangka wangun telusuran pisanan sing paling apik - kanthi mriksa rute sing paling njanjeni saka wiwitan, bisa nemokake dalan sing paling apik tanpa kudu mriksa pilihan liyane.

Opsi telusuran sing paling apik lan paling populer yaiku Monte Carlo Tree Search. Tinimbang ngira rencana sing luwih apik tinimbang liyane nalika milih saben tumindak sakteruse, algoritma milih penerus acak ing saben langkah nganti tekan pungkasan (nalika rencana kasebut ngasilake kamenangan utawa kekalahan). Asil pungkasan banjur digunakake kanggo nambah utawa nyuda bobot saka opsi sadurunge. Kanthi mbaleni proses iki kaping pirang-pirang saurutan, algoritma menehi taksiran apik apa pamindhahan sabanjuré paling, malah yen kahanan diganti (yen mungsuh njupuk tindakan kanggo ngganggu pamuter).

Ora ana crita babagan ngrancang game sing bakal rampung tanpa Perencanaan Tindakan Berorientasi Tujuan utawa GOAP (perencanaan tumindak berorientasi tujuan). Iki minangka cara sing akeh digunakake lan dibahas, nanging liyane saka sawetara rincian sing mbedakake, iku ateges cara chaining mundur sing wis dirembug sadurunge. Yen tujuane "ngrusak pemain" lan pemain kasebut ana ing mburi, rencana kasebut bisa: ngrusak nganggo granat → njaluk → mbuwang.

Biasane ana sawetara gol, saben duwe prioritas dhewe. Yen tujuan prioritas paling dhuwur ora bisa rampung (ora ana kombinasi tumindak sing nggawe rencana "mateni pemain" amarga pemain ora katon), AI bakal bali menyang target prioritas sing luwih murah.

Latihan lan adaptasi

Kita wis ujar manawa game AI biasane ora nggunakake pembelajaran mesin amarga ora cocog kanggo ngatur agen ing wektu nyata. Nanging iki ora ateges sampeyan ora bisa nyilih soko saka wilayah iki. Kita pengin mungsuh ing penembake sing bisa sinau soko. Contone, goleki babagan posisi paling apik ing peta. Utawa mungsuh ing game gelut sing bakal ngalangi gerakan combo pemain sing asring digunakake, menehi motivasi kanggo nggunakake wong liya. Dadi sinau mesin bisa migunani banget ing kahanan kaya ngono.

Statistik lan Probabilitas

Sadurunge njupuk conto sing rumit, ayo ndeleng sepira jarak sing bisa ditindakake kanthi njupuk sawetara pangukuran sing gampang lan digunakake kanggo nggawe keputusan. Contone, strategi nyata-wektu - carane kita nemtokake manawa pemain bisa miwiti serangan ing sawetara menit pisanan game lan pertahanan apa kanggo nyiyapake iki? Kita bisa nyinaoni pengalaman kepungkur pemain kanggo mangerteni apa reaksi ing mangsa ngarep. Kanggo miwiti, kita ora duwe data mentah kaya ngono, nanging bisa ngumpulake - saben AI muter nglawan manungsa, bisa ngrekam wektu serangan pisanan. Sawise sawetara sesi, kita bakal entuk rata-rata wektu sing bakal ditindakake pemain kanggo nyerang ing mangsa ngarep.

Ana uga masalah karo nilai rata-rata: yen pemain kesusu 20 kaping lan muter alon-alon 20 kaping, nilai sing dibutuhake bakal nang endi wae ing tengah, lan iki ora bakal menehi kita apa-apa migunani. Siji solusi yaiku mbatesi data input - 20 potongan pungkasan bisa dianggep.

A pendekatan padha digunakake nalika ngira kamungkinan saka tumindak tartamtu dening assuming sing pilihan kepungkur pamuter bakal padha ing mangsa. Yen pemain nyerang kita kaping lima nganggo bola api, kaping pindho nganggo kilat, lan sapisan nganggo gegeran, jelas dheweke luwih seneng bola api. Ayo extrapolate lan ndeleng kemungkinan nggunakake senjata beda: fireball = 62,5%, kilat = 25% lan gegeran = 12,5%. AI game kita kudu nyiapake kanggo nglindhungi dhewe saka geni.

Cara liyane sing menarik yaiku nggunakake Klasifikasi Naive Bayes kanggo nyinaoni data input sing akeh lan nggolongake kahanan supaya AI bereaksi kanthi cara sing dikarepake. Klasifikasi Bayesian paling misuwur amarga panggunaane ing saringan spam email. Ing kana padha nliti tembung kasebut, mbandhingake karo ngendi tembung kasebut katon sadurunge (ing spam utawa ora), lan nggawe kesimpulan babagan email sing mlebu. Kita bisa nindakake perkara sing padha sanajan kanthi input sing luwih sithik. Adhedhasar kabeh informasi migunani sing dideleng AI (kayata unit mungsuh apa sing digawe, utawa mantra apa sing digunakake, utawa teknologi apa sing diteliti), lan asil pungkasan (perang utawa perdamaian, cepet-cepet utawa defend, lsp.) - kita bakal milih prilaku AI sing dikarepake.

Kabeh cara latihan iki cukup, nanging disaranake nggunakake adhedhasar data tes. AI bakal sinau kanggo adaptasi karo macem-macem strategi sing wis digunakake pemain playtesters sampeyan. AI sing adaptasi karo pemain sawise diluncurake bisa uga bisa diprediksi utawa angel banget dikalahake.

Adaptasi adhedhasar nilai

Amarga isi jagad game lan aturan, kita bisa ngganti set nilai sing mengaruhi pengambilan keputusan, tinimbang mung nggunakake data input. Kita nindakake iki:

  • Ayo AI ngumpulake data babagan kahanan jagad lan acara utama sajrone game kasebut (kaya ing ndhuwur).
  • Ayo ngganti sawetara nilai penting adhedhasar data iki.
  • Kita ngetrapake keputusan adhedhasar proses utawa ngevaluasi nilai kasebut.

Contone, agen duwe sawetara kamar sing bisa dipilih ing peta penembake wong pisanan. Saben kamar duwe nilai dhewe, sing nemtokake manawa sampeyan pengin ngunjungi. AI kanthi acak milih kamar sing arep dituju adhedhasar regane. Agen kasebut banjur ngelingi kamar sing dipateni lan nyuda regane (kemungkinan dheweke bakal bali ing kana). Kajaba iku kanggo kahanan mbalikke - yen agen ngrusak akeh mungsuh, banjur regane kamar mundhak.

Model Markov

Apa yen kita nggunakake data sing diklumpukake kanggo nggawe prediksi? Yen kita ngelingi saben kamar kita ndeleng pemain ing kanggo wektu tartamtu, kita bakal prédhiksi kang kamar pamuter bisa pindhah menyang. Kanthi nelusuri lan ngrekam gerakan pamuter ing kamar (nilai), kita bisa prédhiksi.

Ayo njupuk telung kamar: abang, ijo lan biru. Lan uga pengamatan sing direkam nalika nonton sesi game:

Cara nggawe AI game: pandhuan kanggo pamula

Jumlah pengamatan ing saben kamar meh padha - kita isih ora ngerti ngendi kanggo nggawe panggonan sing apik kanggo ambush. Nglumpukake statistik uga rumit dening respawning pemain, sing katon roto-roto ing peta. Nanging data babagan kamar sabanjure sing dilebokake sawise katon ing peta wis migunani.

Bisa dideleng manawa ruangan ijo cocog karo para pemain - umume wong pindhah saka kamar abang menyang, 50% sing tetep ana. Kamar biru, sebaliknya, ora populer, meh ora ana sing mlebu, lan yen nindakake, dheweke ora bakal suwe.

Nanging data ngandhani bab sing luwih penting - nalika pemain ing kamar biru, kamar sabanjuré kita ndeleng wong ing bakal abang, ora ijo. Sanajan kamar ijo luwih populer tinimbang kamar abang, owah-owahan kahanan yen pemain ana ing kamar biru. Negara sabanjuré (i.e. kamar pamuter bakal pindhah menyang) gumantung ing negara sadurungé (i.e. kamar pamuter lagi ing). Amarga kita njelajah dependensi, kita bakal nggawe prediksi sing luwih akurat tinimbang yen kita mung ngetung pengamatan kanthi mandiri.

Prediksi negara mangsa adhedhasar data saka negara kepungkur diarani model Markov, lan conto kasebut (karo kamar) diarani rantai Markov. Wiwit pola makili kemungkinan owah-owahan antarane negara sukses, padha visual ditampilake minangka FSMs karo kemungkinan watara saben transisi. Sadurunge, kita nggunakake FSM kanggo makili negara tindak tanduk sing agen ing, nanging konsep iki ngluwihi kanggo negara apa wae, apa iku digandhengake karo agen utawa ora. Ing kasus iki, negara makili kamar sing dikuwasani agen:

Cara nggawe AI game: pandhuan kanggo pamula

Iki minangka cara sing gampang kanggo nggambarake kemungkinan owah-owahan negara, menehi AI sawetara kemampuan kanggo prédhiksi negara sabanjure. Sampeyan bisa ngantisipasi sawetara langkah ing ngarep.

Yen pemain ing kamar ijo, ana 50% kasempatan sing bakal tetep ana ing wektu sabanjuré kang diamati. Nanging apa kemungkinan dheweke isih ana sanajan sawise? Ora mung ana kasempatan sing pamuter tetep ing kamar ijo sawise loro pengamatan, nanging ana uga kasempatan sing ninggalake lan bali. Mangkene tabel anyar sing njupuk data anyar:

Cara nggawe AI game: pandhuan kanggo pamula

Iku nuduhake yen kasempatan kanggo ndeleng pemain ing kamar ijo sawise loro pengamatan bakal padha karo 51% - 21% sing bakal saka kamar abang, 5% saka wong-wong mau sing pemain bakal ngunjungi kamar biru antarane wong-wong mau, lan 25% sing pamuter ora bakal ninggalake kamar ijo.

Tabel mung alat visual - prosedur mung mbutuhake multiplying kemungkinan ing saben langkah. Iki tegese sampeyan bisa katon adoh menyang mangsa karo siji caveat: kita nganggep sing kasempatan kanggo ngetik kamar gumantung tanggung ing kamar saiki. Iki diarani Properti Markov - negara mangsa ngarep mung gumantung ing saiki. Nanging iki ora satus persen akurat. Pemain bisa ngganti keputusan gumantung faktor liyane: tingkat kesehatan utawa jumlah amunisi. Amarga kita ora ngrekam nilai kasebut, ramalan kita bakal kurang akurat.

N-Gram

Kepiye conto game gelut lan prédhiksi gerakan kombo pemain? padha! Nanging tinimbang siji negara utawa acara, kita bakal nliti kabeh urutan sing nggawe serangan combo.

Salah siji cara kanggo nindakake iki yaiku kanggo nyimpen saben input (kayata Kick, Punch utawa Block) ing buffer lan nulis kabeh buffer minangka acara. Dadi pemain bola-bali mencet Kick, Kick, Punch kanggo nggunakake serangan SuperDeathFist, sistem AI nyimpen kabeh input ing buffer lan ngelingi telung pungkasan sing digunakake ing saben langkah.

Cara nggawe AI game: pandhuan kanggo pamula
(Garis sing kandel yaiku nalika pemain miwiti serangan SuperDeathFist.)

AI bakal weruh kabeh opsi nalika pamuter milih Kick, ngiring dening Kick liyane, banjur sok dong mirsani sing input sabanjuré tansah Punch. Iki bakal ngidini agen kanggo prédhiksi pamindhahan combo SuperDeathFist lan mblokir yen bisa.

Urutan acara kasebut diarani N-gram, ing ngendi N minangka jumlah unsur sing disimpen. Ing conto sadurunge iku 3-gram (trigram), kang tegese: loro entri pisanan digunakake kanggo prédhiksi katelu. Mulane, ing 5-gram, papat entri pisanan prédhiksi kaping lima lan sateruse.

Desainer kudu milih ukuran N-gram kanthi teliti. N sing luwih cilik mbutuhake memori sing kurang nanging uga nyimpen sejarah sing luwih sithik. Contone, 2-gram (bigram) bakal ngrekam Kick, Kick utawa Kick, Punch, nanging ora bisa nyimpen Kick, Kick, Punch, mula AI ora bakal nanggapi kombo SuperDeathFist.

Ing sisih liya, nomer sing luwih gedhe mbutuhake memori luwih akeh lan AI bakal luwih angel dilatih amarga bakal ana akeh pilihan liyane. Yen sampeyan duwe telung kemungkinan input Kick, Punch utawa Block, lan kita nggunakake 10 gram, sing bakal dadi 60 ewu opsi sing beda.

Model bigram minangka rantai Markov sing prasaja - saben pasangan negara saiki / saiki minangka bigram, lan sampeyan bisa prédhiksi negara liya adhedhasar sing pertama. N-gram 3-gram lan luwih gedhe uga bisa dianggep minangka rantai Markov, ing ngendi kabeh unsur (kajaba sing pungkasan ing N-gram) bebarengan mbentuk negara pisanan lan unsur pungkasan kapindho. Conto game gelut nuduhake kasempatan kanggo transisi saka negara Kick lan Kick menyang negara Kick lan Punch. Kanthi nambani macem-macem entri riwayat input minangka unit siji, kita ateges ngowahi urutan input dadi bagean saka kabeh negara. Iki menehi properti Markov, sing ngidini kita nggunakake rantai Markov kanggo prédhiksi input sabanjuré lan guess apa pamindhahan combo bakal sabanjuré.

kesimpulan

Kita ngomong babagan alat lan pendekatan sing paling umum ing pangembangan intelijen buatan. Kita uga ndeleng kahanan sing kudu digunakake lan ing endi sing migunani.

Iki kudu cukup kanggo ngerti dhasar game AI. Nanging, mesthi, iki ora kabeh cara. Kurang populer, nanging ora kurang efektif kalebu:

  • algoritma optimasi kalebu mendaki bukit, keturunan gradien lan algoritma genetika
  • Algoritma telusuran / penjadwalan adversarial (minimax lan alpha-beta pruning)
  • metode klasifikasi (perceptron, jaringan syaraf lan mesin vektor dhukungan)
  • sistem kanggo ngolah persepsi lan memori agen
  • pendekatan arsitektur kanggo AI (sistem hibrida, arsitektur subset lan cara overlaying sistem AI)
  • alat animasi (perencanaan lan koordinasi gerakan)
  • faktor kinerja (tingkat rincian, kapan wae, lan algoritma timeslicing)

Sumber daya Internet babagan topik:

1. GameDev.net wis bagean karo artikel lan tutorial ing AILan forum.
2. AiGameDev.com ngandhut akeh presentations lan artikel ing sawetara saka sudhut topik related kanggo pangembangan AI game.
3. GDC Vault kalebu topik saka GDC AI Summit, akeh sing kasedhiya gratis.
4. Bahan sing migunani uga bisa ditemokake ing situs web AI Game Programmer Guild.
5. Tommy Thompson, peneliti AI lan pangembang game, nggawe video ing YouTube AI lan Games kanthi panjelasan lan sinau babagan AI ing game komersial.

Buku babagan topik:

1. Buku seri Game AI Pro minangka kumpulan artikel cekak sing nerangake carane ngetrapake fitur tartamtu utawa cara ngatasi masalah tartamtu.

Game AI Pro: Dikumpulake Kawicaksanan Game AI Professionals
Game AI Pro 2: Dikumpulake Kawicaksanan Game AI Professionals
Game AI Pro 3: Dikumpulake Kawicaksanan Game AI Professionals

2. Seri AI Game Programming Wisdom minangka pendahulu seri Game AI Pro. Isine cara sing luwih lawas, nanging meh kabeh relevan nganti saiki.

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

3. Artificial Intelligence: Pendekatan Modern minangka salah sawijining teks dhasar kanggo saben wong sing pengin ngerti bidang umum intelijen buatan. Iki dudu buku babagan pangembangan game - iki mulang babagan dhasar AI.

Source: www.habr.com

Add a comment