Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Kuring datang di sakuliah sababaraha bahan metot ngeunaan kecerdasan jieunan dina kaulinan. Kalayan penjelasan ngeunaan hal-hal dasar ngeunaan AI nganggo conto saderhana, sareng di jero aya seueur alat sareng metode anu mangpaat pikeun pangwangunan sareng desain anu merenah. Kumaha, dimana sareng iraha nganggo aranjeunna ogé aya.

Kalolobaan conto ditulis dina pseudocode, jadi euweuh pangaweruh programming canggih diperlukeun. Di handapeun potongan aya 35 lembar téks sareng gambar sareng gif, janten siap-siap.

UPD. Hapunten, tapi kuring parantos narjamahkeun sorangan tina tulisan ieu ngeunaan Habré PatientZero. Anjeun tiasa maca versi na di dieu, Tapi pikeun sababaraha alesan artikel diliwatan kuring ku (I dipaké pilarian, tapi aya nu salah). Sarta saprak Kuring keur nulis dina blog dedicated ka ngembangkeun kaulinan, Kuring mutuskeun ninggalkeun versi abdi tina tarjamah pikeun palanggan (sababaraha titik nu formatna béda, sababaraha anu ngahaja disingkahkeun dina nasehat ti pamekar).

Naon AI?

Game AI museurkeun kana tindakan naon anu kedah dilakukeun ku objék dumasar kana kaayaan tempatna. Ieu ilaharna disebut "agén calakan" manajemén, dimana agén mangrupakeun karakter pamuter, wahana, bot, atawa kadang hal nu leuwih abstrak: sakabéh grup éntitas atawa malah peradaban. Dina unggal hal, éta mangrupikeun hal anu kedah ningali lingkunganana, nyandak kaputusan dumasar kana éta, sareng ngalaksanakeun saluyu sareng aranjeunna. Ieu disebut siklus Sense/Think/Act:

  • Rasa: Agén mendakan atanapi nampi inpormasi ngeunaan hal-hal di lingkunganana anu tiasa mangaruhan paripolahna (ancaman caket dieu, barang pikeun dikumpulkeun, tempat anu pikaresepeun pikeun dijelajah).
  • Pikirkeun: Agén mutuskeun kumaha réaksina (nganggap naha éta cukup aman pikeun ngumpulkeun barang atanapi naha anjeunna kedah ngalawan / nyumput heula).
  • Act: agén ngalakukeun tindakan pikeun ngalaksanakeun kaputusan saméméhna (mimiti pindah ka arah musuh atawa objék).
  • ...ayeuna kaayaan geus robah alatan lampah karakter, jadi siklus repeats kalawan data anyar.

AI condong difokuskeun bagian Sense tina loop anu. Salaku conto, mobil otonom nyandak gambar jalan, ngagabungkeun sareng data radar sareng lidar, sareng napsirkeunana. Ieu ilaharna dilakukeun ku mesin learning, nu ngolah data asup jeung mere eta hartina, extracting informasi semantis kawas "aya mobil sejen 20 yard payun ti anjeun." Ieu nu disebut masalah klasifikasi.

Kaulinan henteu peryogi sistem anu kompleks pikeun ngekstrak inpormasi sabab kalolobaan datana parantos janten bagian anu integral. Teu perlu ngajalankeun algoritma pangakuan gambar pikeun nangtukeun lamun aya musuh di hareup-kaulinan geus nyaho tur eupan informasi langsung kana prosés-nyieun kaputusan. Ku alatan éta, bagian Sense tina siklus mindeng loba basajan batan bagian Think and Act.

Watesan Game AI

AI ngagaduhan sababaraha watesan anu kedah diperhatoskeun:

  • AI henteu kedah dilatih sateuacanna, saolah-olah éta algoritma pembelajaran mesin. Teu aya rasa nulis jaringan saraf nalika pangwangunan pikeun ngawas puluhan rébu pamaén sareng diajar cara anu pangsaéna pikeun maén ngalawan aranjeunna. Naha? Kusabab kaulinan teu acan dileupaskeun sarta euweuh pamaén.
  • Kaulinan kudu senang jeung nangtang, jadi agén teu kudu manggihan pendekatan pangalusna ngalawan jalma.
  • Agén kedah katingali réalistis supados pamaén karasaeun maén ngalawan jalma nyata. Program AlphaGo outperformed manusa, tapi léngkah dipilih éta pisan tebih ti pamahaman tradisional kaulinan. Lamun kaulinan simulates lawan manusa, perasaan ieu teu kudu aya. Algoritma kedah dirobih supados nyandak kaputusan anu masuk akal tibatan anu idéal.
  • AI kedah dianggo sacara real waktos. Ieu ngandung harti yén algoritma teu bisa monopolize pamakéan CPU pikeun période lila pikeun nyieun kaputusan. Malah 10 milliseconds panjang teuing, sabab paling kaulinan ngan butuh 16 ka 33 milliseconds pikeun ngalakukeun sagala processing jeung ngaléngkah ka pigura grafik salajengna.
  • Ideally, sahenteuna bagian tina sistem kudu data-disetir, ku kituna non-coders bisa nyieun parobahan sarta pangaluyuan bisa lumangsung leuwih gancang.

Hayu urang tingali pendekatan AI anu nutupan sakabéh siklus Sense/Think/Act.

Nyieun Kaputusan Dasar

Hayu urang mimitian ku kaulinan pangbasajanna - Pong. Tujuan: pindahkeun dayung supados balna mumbul ti batan ngapung. Ieu kawas ténis, dimana anjeun leungit lamun teu pencét bal. Di dieu AI ngagaduhan tugas anu kawilang gampang - mutuskeun arah mana pikeun mindahkeun platform.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Pernyataan kondisional

Pikeun AI dina Pong, solusi anu paling atra nyaéta pikeun nyobaan nempatkeun platform handapeun bal.

Algoritma saderhana pikeun ieu, ditulis dina pseudocode:

unggal pigura / update nalika kaulinan dijalankeun:
lamun balna ka kénca ti dayeuh:
pindah ngawelah kénca
lain lamun balna ka katuhu tina dayung:
pindah ngawelah katuhu

Upami platform gerak dina laju bal, maka ieu mangrupikeun algoritma idéal pikeun AI di Pong. Teu kedah ngahesekeun nanaon upami teu aya seueur data sareng tindakan anu mungkin pikeun agén.

Pendekatan ieu saderhana pisan sahingga sadaya siklus Rasa / Pikir / Act bieu katingali. Tapi éta aya:

  • Bagian Rasa aya dina dua pernyataan upami. Kaulinan terang dimana balna sareng dimana platformna, janten AI milarian inpormasi éta.
  • Bagian Think ogé kaasup kana dua pernyataan lamun. Aranjeunna embody dua solusi, nu dina hal ieu saling ekslusif. Hasilna, salah sahiji tina tilu tindakan dipilih - mindahkeun platform ka kénca, pindah ka katuhu, atawa ngalakukeun nanaon lamun eta geus bener diposisikan.
  • Bagian Act aya dina pernyataan Pindahkeun Paddle Kénca sareng Pindahkeun Paddle Katuhu. Gumantung kana desain kaulinan, aranjeunna tiasa mindahkeun platform instan atanapi dina laju husus.

Pendekatan sapertos kitu disebut réaktif - aya sakumpulan aturan anu saderhana (dina hal ieu upami pernyataan dina kode) anu ngaréaksikeun kaayaan dunya ayeuna sareng nyandak tindakan.

Tangkal kaputusan

Conto Pong saleresna sami sareng konsép AI formal anu disebut tangkal kaputusan. Algoritma ngaliwat éta pikeun ngahontal "daun" - kaputusan ngeunaan tindakan anu kedah dilakukeun.

Hayu urang ngadamel diagram blok tina tangkal kaputusan pikeun algoritma platform kami:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Unggal bagian tangkal disebut titik - AI ngagunakeun téori grafik pikeun ngajelaskeun struktur sapertos. Aya dua jinis node:

  • Titik kaputusan: milih antara dua alternatif dumasar kana nguji sababaraha kaayaan, dimana unggal alternatif digambarkeun salaku titik anu misah.
  • Titik tungtung: Peta pikeun ngalakukeun anu ngagambarkeun kaputusan ahir.

Algoritma dimimitian ti titik kahiji ("akar" tangkal). Éta boh nyandak kaputusan ngeunaan mana titik anak anu badé angkat, atanapi ngalaksanakeun tindakan anu disimpen dina titik sareng kaluar.

Naon mangpaatna gaduh tangkal kaputusan ngalakukeun padamelan anu sami sareng pernyataan upami dina bagian sateuacana? Aya sistem umum di dieu dimana unggal kaputusan ngan ukur aya hiji kaayaan sareng dua kamungkinan hasil. Hal ieu ngamungkinkeun pamekar nyieun AI tina data ngagambarkeun kaputusan dina tangkal tanpa kudu hard-kode eta. Hayu urang dibere dina bentuk tabel:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Di sisi kode anjeun bakal nampi sistem pikeun maca senar. Jieun titik pikeun tiap sahijina, sambungkeun logika kaputusan dumasar kana kolom kadua, sarta titik anak dumasar kana kolom katilu jeung kaopat. Anjeun masih kudu program kaayaan jeung lampah, tapi ayeuna struktur game bakal leuwih kompleks. Di dieu anjeun nambihan kaputusan sareng tindakan tambahan, teras ngarobih sadayana AI ku ngan saukur ngédit file téks definisi tangkal. Salajengna, Anjeun mindahkeun file ka desainer kaulinan, anu bisa ngarobah kabiasaan tanpa recompiling kaulinan atawa ngarobah kodeu.

Tangkal kaputusan pohara kapaké nalika aranjeunna diwangun sacara otomatis tina sakumpulan conto anu ageung (contona, nganggo algoritma ID3). Hal ieu ngajadikeun eta alat éféktif jeung-kinerja tinggi pikeun mengklasifikasikan kaayaan dumasar kana data diala. Nanging, urang ngalangkungan sistem anu sederhana pikeun agén milih tindakan.

Naskah

Kami nganalisis sistem tangkal kaputusan anu ngagunakeun kaayaan sareng tindakan anu tos didamel. Jalma anu ngarancang AI tiasa ngatur tangkal kumaha waé anu dipikahoyong, tapi anjeunna tetep kedah ngandelkeun coder anu ngaprogram éta sadayana. Kumaha upami urang tiasa masihan desainer alat pikeun nyiptakeun kaayaan atanapi tindakan sorangan?

Sangkan programmer nu teu kudu nulis kode pikeun kaayaan Dupi Ball Kénca Ngawelah jeung Ball Katuhu Ngawelah, anjeunna bisa nyieun sistem nu désainer bakal nulis kaayaan pikeun pariksa nilai ieu. Lajeng data tangkal kaputusan bakal kasampak kawas kieu:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Ieu dasarna sarua jeung dina tabel kahiji, tapi solusi dina sorangan boga kode sorangan, saeutik kawas bagian kondisional hiji pernyataan lamun. Di sisi kode, ieu bakal maca dina kolom kadua pikeun titik kaputusan, tapi tinimbang néangan hiji kaayaan spésifik pikeun ngaéksekusi (Dupi Ball Kénca Ngawelah), ngaevaluasi ekspresi kondisional sarta mulih leres atanapi palsu sasuai. Hal ieu dilakukeun nganggo basa skrip Lua atanapi Angelscript. Ngagunakeun éta, pamekar a tiasa nyandak objék dina kaulinan na (bal jeung ngawelah) jeung nyieun variabel nu bakal sadia dina naskah (ball.position). Ogé, basa skrip langkung sederhana tibatan C ++. Teu merlukeun tahap kompilasi pinuh, jadi éta idéal pikeun gancang nyaluyukeun logika kaulinan sarta ngidinan "non-coders" nyieun fungsi perlu sorangan.

Dina conto di luhur, basa scripting dipaké ukur keur evaluate ekspresi kondisional, tapi ogé bisa dipaké pikeun lampah. Contona, data Move Paddle Right bisa jadi pernyataan naskah (ball.position.x += 10). Sangkan aksi ogé dihartikeun dina naskah, tanpa perlu program Pindahkeun ngawelah Katuhu.

Anjeun tiasa langkung jauh sareng nyerat sadayana tangkal kaputusan dina basa skrip. Ieu bakal kode dina bentuk pernyataan kondisional hardcoded, tapi maranéhna bakal lokasina di file Aksara éksternal, nyaeta, aranjeunna bisa dirobah tanpa recompiling sakabéh program. Anjeun sering tiasa ngédit file skrip salami midangkeun pikeun nguji gancang réaksi AI anu béda.

Tanggapan Acara

Conto di luhur sampurna pikeun Pong. Aranjeunna terus-terusan ngajalankeun siklus Rasa / Pikir / Act sareng tindakan dumasar kana kaayaan dunya pang anyarna. Tapi dina kaulinan anu langkung kompleks anjeun kedah ngaréspon kana acara individu, sareng henteu ngevaluasi sadayana sakaligus. Pong dina hal ieu geus jadi conto goréng. Hayu urang milih hiji deui.

Bayangkeun hiji jelema nu nembak teu brukbrak mana musuh teu gerak dugi aranjeunna ngadeteksi pamaén, nu satutasna maranéhna meta gumantung kana "spésialisasi" maranéhna: batur bakal lumpat ka "buru", batur bakal narajang ti kajauhan. Ieu masih sistem réaktif dasar - "lamun pamaén geus nempo, ngalakukeun hiji hal" - tapi bisa logis direcah jadi hiji acara Player Ditempo sarta Réaksi a (pilih respon sarta ngaéksekusi eta).

Ieu brings kami balik kana siklus Rasa / Pikir / Act. Urang tiasa kode bagian Sense anu bakal pariksa unggal pigura naha AI ningali pamuter. Upami henteu, teu aya anu kajantenan, tapi upami ningali, maka acara Player Seen didamel. Kodeu bakal ngagaduhan bagian anu misah anu nyarios "nalika kajadian Pamuter Seen lumangsung, lakukeun" dimana réspon anu anjeun peryogikeun pikeun ngémutan bagian Think and Act. Janten, anjeun bakal nyetél réaksi kana acara Player Seen: pikeun karakter "buru-buru" - ChargeAndAttack, sareng pikeun sniper - HideAndSnipe. Hubungan ieu bisa dijieun dina file data pikeun ngedit gancang tanpa kudu recompile. Basa skrip ogé tiasa dianggo di dieu.

Nyieun kaputusan hésé

Sanajan sistem réaksi basajan pisan kuat, aya loba kaayaan dimana aranjeunna teu cukup. Kadang-kadang anjeun kedah nyandak kaputusan anu béda dumasar kana naon anu ayeuna dilakukeun ku agén, tapi sesah ngabayangkeun ieu salaku kaayaan. Kadang-kadang aya seueur teuing kaayaan pikeun ngagambarkeun sacara efektif dina tangkal kaputusan atanapi naskah. Kadang-kadang anjeun kedah meunteun sateuacanna kumaha kaayaan bakal robih sateuacan mutuskeun léngkah salajengna. Pendekatan anu langkung canggih diperyogikeun pikeun ngabéréskeun masalah ieu.

mesin kaayaan wates

mesin kaayaan terhingga atawa FSM (mesin kaayaan terhingga) mangrupakeun cara nyebutkeun yén agén kami ayeuna di salah sahiji sababaraha nagara bagian mungkin, sarta yén éta bisa transisi tina hiji kaayaan ka sejen. Aya sababaraha nagara bagian sapertos kitu-ku kituna nami. Conto anu pangsaéna tina kahirupan nyaéta lampu lalu lintas. Aya runtuyan lampu béda di tempat béda, tapi prinsipna sarua - unggal kaayaan ngagambarkeun hal (eureun, leumpang, jsb). Hiji lampu lalulintas aya dina ngan hiji kaayaan iraha wae, sarta ngalir ti hiji ka nu sejen dumasar kana aturan basajan.

Éta carita anu sami sareng NPC dina kaulinan. Salaku conto, hayu urang jaga kalayan kaayaan di handap ieu:

  • Patroli.
  • Narajang.
  • Kabur.

Jeung kaayaan ieu pikeun ngarobah kaayaan na:

  • Lamun hansip nilik musuh, manéhna nyerang.
  • Lamun hansip narajang tapi euweuh ningali musuh, manéhna balik ka patroli.
  • Lamun hansip nyerang tapi tatu parah, anjeunna kabur.

Anjeun oge bisa nulis lamun-pernyataan kalawan variabel kaayaan wali sarta sagala rupa cék: aya musuh caket dieu, naon tingkat kaséhatan NPC, jsb Hayu urang tambahkeun sababaraha nagara bagian deui:

  • Idleness - antara patroli.
  • Pilarian - nalika musuh noticed geus ngiles.
  • Milarian Pitulung - nalika musuh katingali, tapi kuat teuing pikeun ngalawan nyalira.

Pilihan pikeun masing-masingna terbatas - contona, penjaga moal milarian musuh anu disumputkeun upami anjeunna ngagaduhan kaséhatan anu rendah.

Barina ogé, aya daptar badag "lamun" , Anu "Tiasa janten pajeujeut teuing, janten urang kedah ngarumuskeun metodeu anu ngamungkinkeun urang tetep dina pikiran nagara sareng transisi antara nagara. Jang ngalampahkeun ieu, urang tumut kana akun sagala nagara bagian, sarta dina unggal kaayaan urang nulis handap dina daptar sagala transisi ka nagara sejen, babarengan jeung kaayaan dipikabutuh pikeun aranjeunna.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Ieu tabel transisi kaayaan - cara komprehensif pikeun ngagambarkeun FSM. Hayu urang ngagambar diagram sareng kéngingkeun gambaran lengkep ngeunaan kumaha parobihan paripolah NPC.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Diagram ngagambarkeun hakekat pembuatan kaputusan pikeun agén ieu dumasar kana kaayaan ayeuna. Leuwih ti éta, unggal panah nembongkeun transisi antara nagara lamun kaayaan gigireun eta bener.

Unggal update urang pariksa kaayaan kiwari agén, kasampak ngaliwatan daptar transisi, sarta lamun kaayaan transisi nu patepung, éta narima kaayaan anyar. Contona, unggal pigura mariksa naha timer 10 detik geus kadaluwarsa, sarta lamun kitu, hansip balik ti kaayaan Idling ka Patrolling. Dina cara anu sami, kaayaan Attacking mariksa kasehatan agén - upami éta rendah, maka éta asup kana kaayaan Kabur.

Ieu nanganan transisi antara nagara bagian, tapi kumaha ngeunaan kabiasaan pakait sareng nagara sorangan? Dina hal ngalaksanakeun paripolah saleresna pikeun kaayaan anu tangtu, biasana aya dua jinis "kait" dimana urang napelkeun tindakan ka FSM:

  • Laku lampah anu périodik urang laksanakeun pikeun kaayaan ayeuna.
  • Tindakan anu urang laksanakeun nalika transisi tina hiji kaayaan ka kaayaan anu sanés.

Conto pikeun jenis munggaran. Kaayaan Patroling bakal mindahkeun agén sapanjang jalur patroli unggal pigura. Kaayaan narajang bakal nyobian ngamimitian serangan unggal pigura atanapi transisi ka kaayaan dimana ieu mungkin.

Pikeun jinis kadua, pertimbangkeun transisi "upami musuh katingali sareng musuhna kuat teuing, teras angkat ka kaayaan Pananjung Pitulung. Agén kedah milih ka mana milarian bantosan sareng nyimpen inpormasi ieu supados nagara Pananjung Pitulung terang ka mana angkat. Sakali pitulung kapanggih, agén balik deui ka kaayaan narajang. Dina titik ieu, anjeunna bakal hoyong ngabejaan babaturan deukeut ngeunaan anceman, jadi aksi NotifyFriendOfThreat bisa lumangsung.

Sakali deui, urang tiasa ningali sistem ieu ngaliwatan lensa tina siklus Rasa / Pikir / Act. Rasa ieu embodied dina data dipaké ku logika transisi. Pikir - transisi sadia di unggal kaayaan. Jeung Act dilumangsungkeun ku lampah dipigawé périodik dina kaayaan atawa dina transisi antara nagara bagian.

Kadang-kadang kaayaan transisi polling terus-terusan tiasa mahal. Contona, upami unggal agén ngalakukeun itungan kompléks unggal pigura pikeun nangtukeun naha éta bisa ningali musuh jeung ngarti naha éta bisa transisi tina Patrolling ka kaayaan narajang, ieu bakal butuh loba waktu CPU.

Parobahan penting dina kaayaan dunya bisa dianggap salaku kajadian anu bakal diolah sakumaha aranjeunna lumangsung. Gantina FSM mariksa kaayaan transisi "tiasa agén kuring ningali pamuter nu?" unggal pigura, sistem misah bisa ngonpigurasi pikeun dipariksa kirang sering (misalna 5 kali per detik). Sarta hasilna mangrupa ngaluarkeun Player Ditempo nalika dipariksa pas.

Ieu disalurkeun ka FSM, anu ayeuna kedah angkat ka acara Player Seen nampi kaayaan sareng ngabales sasuai. Paripolah anu dihasilkeun téh sarua iwal ti reureuh ampir imperceptible saméméh ngarespon. Tapi kinerja geus ningkat salaku hasil tina misahkeun bagian Rasa kana bagian misah tina program.

mesin kaayaan terhingga hirarki

Sanajan kitu, gawé bareng FSMs badag teu salawasna merenah. Upami urang hoyong ngalegaan kaayaan serangan pikeun misahkeun MeleeAttacking sareng RangedAttacking, urang kedah ngarobih transisi tina sadaya nagara bagian anu nuju ka kaayaan Attacking (ayeuna sareng anu bakal datang).

Anjeun panginten perhatikeun yén dina conto urang aya seueur transisi duplikat. Paling transisi dina kaayaan Idling idéntik jeung transisi dina kaayaan Patrolling. Éta langkung saé henteu ngulang deui, khususna upami urang nambihan langkung seueur nagara anu sami. Masuk akal pikeun ngagolongkeun Idling sareng Patrolling dina labél umum "non-tempur", dimana ngan aya hiji set transisi umum pikeun merangan nagara. Upami urang nganggap labél ieu salaku kaayaan, maka Idling sareng Patrolling janten substates. Conto ngagunakeun tabel transisi misah pikeun substate non-tempur anyar:

Nagara utama:
Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Kaluar tina status tempur:
Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Sareng dina bentuk diagram:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Éta sistem anu sami, tapi kalayan kaayaan non-tempur énggal anu kalebet Idling sareng Patrolling. Kalawan unggal kaayaan ngandung hiji FSM kalawan substates (jeung substates ieu, kahareupna ngandung FSMs sorangan - jeung saterusna pikeun salami anjeun peryogi), urang meunang Hierarchical mesin kaayaan terhingga atawa HFSM (hirarkis mesin kaayaan terhingga). Ku ngagolongkeun kaayaan non-tempur, urang motong kaluar kebat transisi kaleuleuwihan. Urang tiasa ngalakukeun hal anu sami pikeun nagara-nagara énggal kalayan transisi umum. Contona, upami dina mangsa nu bakal datang urang dilegakeun kaayaan narajang ka MeleeAttacking na MissileAttacking nagara bagian, aranjeunna bakal substates nu transisi antara silih dumasar kana jarak ka musuh jeung kasadiaan ammo. Hasilna, paripolah kompleks sareng sub-paripolah tiasa diwakilan ku minimal transisi duplikat.

Tangkal paripolah

Kalawan HFSM, kombinasi kompléks paripolah dijieun ku cara basajan. Sanajan kitu, aya hiji kasusah slight nu nyieun kaputusan dina bentuk aturan transisi raket patalina jeung kaayaan ayeuna. Sarta dina loba kaulinan ieu téh kahayang diperlukeun. Jeung pamakéan ati hirarki kaayaan bisa ngurangan jumlah pengulangan transisi. Tapi kadang anjeun peryogi aturan anu tiasa dianggo henteu paduli kaayaan anjeun, atanapi anu berlaku di ampir nagara mana waé. Salaku conto, upami kaséhatan agén turun ka 25%, anjeun bakal hoyong anjeunna kabur henteu paduli naha anjeunna nuju tempur, dianggurkeun, atanapi ngobrol - anjeun kedah nambihan kaayaan ieu ka unggal nagara. Sareng upami desainer anjeun engké hoyong ngarobih ambang kaséhatan rendah tina 25% ka 10%, maka ieu kedah dilakukeun deui.

Ideally, kaayaan ieu merlukeun sistem dimana kaputusan ngeunaan "naon kaayaan keur di" aya di luar nagara sorangan, dina urutan nyieun parobahan ngan dina hiji tempat jeung teu noél kaayaan transisi. Tangkal kabiasaan némbongan di dieu.

Aya sababaraha cara pikeun nerapkeun éta, tapi hakekatna kasarna sami pikeun sadayana sareng sami sareng tangkal kaputusan: algoritma dimimitian ku titik "akar", sareng tangkal ngandung titik anu ngagambarkeun kaputusan atanapi tindakan. Aya sababaraha bédana konci sanajan:

  • Node ayeuna ngabalikeun salah sahiji tina tilu nilai: Sukses (upami padamelan parantos réngsé), Gagal (upami teu tiasa ngamimitian), atanapi Ngajalankeun (upami masih jalan sareng teu aya hasil ahir).
  • Teu aya deui titik kaputusan pikeun milih antara dua alternatif. Gantina, aranjeunna titik Decorator, nu boga hiji titik anak. Upami aranjeunna Sukses, aranjeunna ngalaksanakeun hiji-hijina titik anakna.
  • Titik anu ngalakukeun tindakan ngabalikeun nilai Running pikeun ngagambarkeun tindakan anu dilakukeun.

set leutik titik ieu bisa digabungkeun pikeun nyieun sajumlah badag paripolah kompléks. Hayu urang ngabayangkeun hansip HFSM tina conto saméméhna salaku tangkal kabiasaan:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Kalayan struktur ieu teu kedah aya transisi anu écés ti nagara Idling / Patrolling ka Attacking atanapi nagara-nagara sanés. Upami musuh katingali sareng kaséhatan karakterna rendah, palaksanaan bakal eureun di titik Fleeing, henteu paduli titik mana anu dieksekusi sateuacana - Patrolling, Idling, Attacking, atanapi anu sanésna.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Tangkal paripolah rumit-aya seueur cara pikeun nyusun aranjeunna, sareng milarian kombinasi anu pas tina dekorator sareng titik sanyawa tiasa janten tantangan. Aya ogé patarosan ngeunaan sabaraha sering mariksa tangkal - naha urang hoyong ngaliwat unggal bagian atawa ngan lamun salah sahiji kaayaan geus robah? Kumaha urang nyimpen kaayaan anu aya hubunganana sareng node - kumaha urang terang nalika urang Idling salami 10 detik, atanapi kumaha urang terang titik mana anu dieksekusi kapungkur supados urang tiasa ngolah urutan anu leres?

Ieu naha aya loba palaksanaan. Contona, sababaraha sistem geus ngaganti titik decorator kalawan decorators inline. Aranjeunna ngevaluasi deui tangkal nalika kaayaan dekorator robih, ngabantosan ngahijikeun titik, sareng nyayogikeun apdet périodik.

Sistim dumasar-Utiliti

Sababaraha kaulinan boga loba mékanika béda. Éta desirable yén maranéhna nampi sagala kauntungan tina aturan transisi basajan tur umum, tapi teu merta dina bentuk tangkal lengkep kabiasaan. Gantina gaduh pilihan anu jelas atanapi tangkal tindakan anu mungkin, langkung gampang pikeun mariksa sadaya tindakan sareng milih anu paling pas dina waktos ayeuna.

Sistim basis Utiliti bakal mantuan kalawan ngan ieu. Ieu mangrupikeun sistem dimana agén ngagaduhan rupa-rupa tindakan sareng milih mana anu kedah dilakukeun dumasar kana utilitas relatif masing-masing. Dimana utilitas mangrupikeun ukuran sawenang-wenang ngeunaan kumaha pentingna atanapi dipikahoyong pikeun agén pikeun ngalakukeun tindakan ieu.

Utiliti diitung tina hiji aksi dumasar kana kaayaan ayeuna jeung lingkungan, agén bisa pariksa tur pilih kaayaan séjén paling luyu iraha wae. Ieu sarupa FSM, iwal transisi ditangtukeun ku estimasi pikeun tiap kaayaan poténsial, kaasup nu ayeuna. Punten dicatet yén kami milih tindakan anu paling mangpaat pikeun ngaléngkah (atanapi tetep upami urang parantos réngsé). Pikeun leuwih rupa-rupa, ieu bisa jadi pilihan saimbang tapi acak tina daptar leutik.

Sistim nu nangtukeun rentang sawenang tina nilai utiliti-contona, ti 0 (lengkep teu dihoyongkeun) nepi ka 100 (lengkep desirable). Unggal aksi boga sababaraha parameter nu mangaruhan itungan nilai ieu. Balik deui ka conto wali urang:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Transisi antara lampah anu ambigu-sagala kaayaan bisa nuturkeun mana wae. Prioritas tindakan kapanggih dina nilai utiliti anu dipulangkeun. Upami musuh katingali, sareng musuh éta kuat, sareng kaséhatan karakterna rendah, maka duanana Fleeing sareng FindingHelp bakal ngabalikeun nilai non-enol anu luhur. Dina hal ieu, FindingHelp bakal salawasna leuwih luhur. Kitu ogé, kagiatan non-tempur pernah balik leuwih ti 50, jadi maranéhna bakal salawasna jadi leuwih handap tempur. Anjeun kedah tumut kana akun ieu nalika nyiptakeun tindakan sareng ngitung utilitasna.

Dina conto urang, lampah balik boh nilai konstanta tetep atawa salah sahiji dua nilai tetep. Sistem anu langkung realistis bakal ngabalikeun perkiraan tina sajumlah nilai anu terus-terusan. Salaku conto, tindakan Fleeing ngabalikeun nilai utilitas anu langkung luhur upami kasehatan agén rendah, sareng tindakan Attacking ngabalikeun nilai utilitas anu langkung handap upami musuh kuat teuing. Kusabab ieu, tindakan Kabur diutamakeun tina Nyerang dina kaayaan naon waé dimana agén ngarasa yén anjeunna henteu ngagaduhan kaséhatan anu cukup pikeun ngelehkeun musuh. Hal ieu ngamungkinkeun lampah jadi prioritized dumasar kana sagala Jumlah kriteria, sahingga pendekatan ieu leuwih fleksibel jeung variabel ti tangkal kabiasaan atawa FSM.

Unggal aksi boga loba kaayaan keur ngitung program. Éta bisa ditulis dina basa scripting atawa salaku runtuyan rumus matematik. The Sims, nu simulates rutin poean karakter urang, nambahkeun hiji lapisan tambahan itungan - agén narima runtuyan "motivasi" nu pangaruh ratings utiliti. Upami karakter lapar, aranjeunna bakal langkung lapar kana waktosna, sareng nilai utilitas tina aksi EatFood bakal ningkat dugi ka karakter ngalaksanakeunana, ngirangan tingkat lapar sareng ngabalikeun nilai EatFood ka nol.

Gagasan milih tindakan dumasar kana sistem rating cukup saderhana, ku kituna sistem basis Utiliti tiasa dianggo salaku bagian tina prosés pengambilan kaputusan AI, tinimbang salaku gaganti lengkep pikeun aranjeunna. Tangkal kaputusan tiasa naroskeun rating utilitas dua titik anak sareng pilih anu langkung luhur. Nya kitu, tangkal paripolah tiasa gaduh titik Utiliti komposit pikeun ngira-ngira utilitas tindakan pikeun mutuskeun budak mana anu bakal dieksekusi.

Gerakan sareng navigasi

Dina conto saméméhna, urang boga platform nu urang dipindahkeun ka kénca atawa ka katuhu, sarta hansip nu patrolled atawa narajang. Tapi kumaha persisna urang nanganan gerakan agén dina sababaraha waktos? Kumaha urang nyetel speed, kumaha urang ngahindarkeun halangan, sarta kumaha urang ngarencanakeun ruteu lamun nepi ka tujuan leuwih hese tibatan ngan pindah dina garis lempeng? Hayu urang tingali ieu.

manajemén

Dina tahap awal, urang bakal nganggap yén unggal agén boga nilai speed, nu ngawengku sabaraha gancang éta gerak jeung arah naon. Ieu bisa diukur dina méter per detik, kilométer per jam, piksel per detik, jsb Recalling Rasa / Pikir / Act loop, urang tiasa ngabayangkeun yén bagian Think milih speed a, jeung bagian Act lumaku speed nu ka agén. Ilaharna kaulinan boga sistem fisika nu ngalakukeun tugas ieu pikeun anjeun, diajar nilai speed unggal obyék tur nyaluyukeun eta. Janten, anjeun tiasa ngantunkeun AI kalayan hiji tugas - pikeun mutuskeun naon laju agén kedahna. Upami anjeun terang dimana agén kedahna, maka anjeun kedah ngalih ka arah anu leres dina laju anu disetél. Hiji persamaan pisan trivial:

kahayang_travel = destination_position - agent_position

Bayangkeun dunya 2D. Agén aya dina titik (-2, -2), tujuanana nyaéta tempat di kalér-wétan dina titik (30, 20), sareng jalur anu diperyogikeun pikeun agén ka dinya nyaéta (32, 22). Anggap posisi ieu diukur dina méter - lamun urang nyandak speed agén urang jadi 5 méter per detik, lajeng urang bakal skala vektor kapindahan urang jeung meunang laju kira-kira (4.12, 2.83). Kalayan parameter ieu, agén bakal dugi ka tujuanna ampir 8 detik.

Anjeun tiasa ngitung deui nilai iraha waé. Lamun agén éta satengahna ka target, gerakan bakal satengah panjangna, tapi saprak speed maksimum agén urang 5 m / s (urang mutuskeun ieu di luhur), laju bakal sarua. Ieu ogé lumaku pikeun mindahkeun target, sahingga agén nyieun parobahan leutik nalika aranjeunna mindahkeun.

Tapi urang hoyong langkung seueur variasi - contona, laun-laun ningkatkeun kagancangan pikeun simulasi karakter anu pindah tina nangtung ka jalan. Hal anu sami tiasa dilakukeun dina tungtung sateuacan lirén. fitur ieu dipikawanoh salaku paripolah steering, nu masing-masing boga ngaran husus: Neangan, kabur, Kadatangan, jsb Gagasan éta gaya akselerasi bisa dilarapkeun ka speed agén urang, dumasar kana ngabandingkeun posisi agén jeung speed ayeuna jeung tujuan dina ngagunakeun métode béda pindah ka gawang.

Unggal kabiasaan boga tujuan rada béda. Pilarian sareng Kadatangan mangrupikeun cara pikeun mindahkeun agén ka tujuan. Ngahindarkeun Rintangan sareng Pisahkeun nyaluyukeun gerakan agén pikeun ngahindarkeun halangan dina jalan ka gawang. Alignment sareng Kohési ngajaga agén-agén gerak babarengan. Sakur jumlah paripolah setir anu béda-béda tiasa dijumlahkeun pikeun ngahasilkeun véktor jalur tunggal nyandak sadaya faktor. Agén anu ngagunakeun paripolah Kedatangan, Pipisahan, sareng Ngahindarkeun Rintangan pikeun ngajauhan témbok sareng agén sanés. Pendekatan ieu tiasa dianggo saé dina lokasi anu kabuka tanpa detil anu teu perlu.

Dina kaayaan anu langkung hese, tambihan paripolah anu béda langkung parah - contona, agén tiasa macét dina témbok kusabab konflik antara Kedatangan sareng Ngahindarkeun Halangan. Ku alatan éta, anjeun kudu mertimbangkeun pilihan nu leuwih kompleks tinimbang saukur nambahkeun sakabéh nilai. Jalanna nyaéta kieu: tinimbang nambahan hasil unggal kabiasaan, anjeun tiasa mertimbangkeun gerakan dina arah anu béda sareng milih pilihan anu pangsaéna.

Nanging, dina lingkungan anu kompleks sareng jalan buntu sareng pilihan ngeunaan jalan anu mana, urang peryogi anu langkung maju.

Milarian jalan

Paripolah setir anu saé pikeun gerakan saderhana di daérah anu kabuka (sawah atanapi arena) dimana angkat ti A ka B mangrupikeun jalan anu lempeng kalayan ngan ukur jalan-jalan leutik di sekitar halangan. Pikeun rute anu kompleks, urang peryogi panéangan jalur, anu mangrupikeun cara pikeun ngajalajah dunya sareng mutuskeun jalur anu ngalangkunganana.

Pangbasajanna nyaéta nerapkeun grid ka unggal kuadrat gigireun agén jeung evaluate nu di antarana nu diwenangkeun pikeun mindahkeun. Upami salah sahijina mangrupikeun tujuan, teras tuturkeun rute ti unggal alun-alun ka alun-alun saacanna dugi ka awal. Ieu jalur. Upami teu kitu, malikan deui prosésna sareng alun-alun anu caket dieu dugi ka anjeun mendakan tujuan anjeun atanapi anjeun béak kotak (hartosna henteu aya rute anu mungkin). Ieu naon anu sacara resmi katelah Breadth-First Search atanapi BFS (algoritma pilarian lebar-heula). Dina unggal lengkah manéhna kasampak dina sagala arah (ku kituna breadth, "lebar"). Rohangan panéangan téh kawas gelombang hareup anu gerak nepi ka ngahontal lokasi nu dipikahoyong - spasi pilarian expands dina unggal hambalan nepi ka titik tungtung kaasup, sanggeus éta bisa disusud deui ka awal.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Hasilna, anjeun bakal nampi daptar alun-alun dimana rute anu dipikahoyong disusun. Ieu mangrupikeun jalur (ku kituna, milarian jalur) - daptar tempat anu bakal didatangan ku agén nalika nuturkeun tujuan.

Kusabab urang terang posisi unggal alun-alun di dunya, urang tiasa nganggo paripolah setir pikeun ngalih sapanjang jalur - ti titik 1 dugi ka titik 2, teras ti titik 2 dugi ka titik 3, sareng saterasna. Pilihan pangbasajanna nyaéta angkat ka tengah alun-alun salajengna, tapi pilihan anu langkung saé nyaéta eureun di tengah-tengah tepi antara alun-alun ayeuna sareng anu salajengna. Kusabab ieu, agén bakal tiasa motong sudut dina péngkolan seukeut.

Algoritma BFS ogé ngagaduhan kalemahan - éta ngajalajah saloba kuadrat dina arah "salah" sapertos dina arah "leres". Ieu dimana hiji algoritma leuwih kompleks disebut A * (A béntang) asalna kana antrian. Gawéna cara anu sami, tapi tinimbang mariksa sacara buta alun-alun tatangga (teras tatangga tatangga, teras tatangga tatangga tatangga, sareng saterasna), éta ngumpulkeun titik-titik kana daptar sareng nyortir aranjeunna supados titik salajengna anu ditaliti nyaéta salawasna hiji nu nuju ka jalur shortest. Node diurutkeun dumasar kana heuristik anu merhatikeun dua hal- "biaya" tina jalur hipotétis ka alun-alun anu dipikahoyong (kalebet biaya perjalanan) sareng perkiraan sabaraha jauh alun-alun éta ti tujuan (bias milarian dina arah katuhu).

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Conto ieu nunjukkeun yén agén ngajalajah hiji pasagi dina hiji waktos, unggal waktos milih anu padeukeut anu paling ngajangjikeun. jalur hasilna sarua BFS, tapi kirang kuadrat dianggap dina prosés - nu boga dampak badag dina pagelaran kaulinan.

Gerakan tanpa grid

Tapi lolobana kaulinan teu diteundeun kaluar dina grid a, sarta éta mindeng teu mungkin mun ngalakukeun tanpa kurban realisme. Kompromi diperlukeun. Naon ukuranana kuadrat? Gede teuing sareng aranjeunna moal tiasa ngawakilan koridor atanapi belokan anu leres, alit teuing sareng bakal seueur teuing kotak anu kedah dipilarian, anu akhirna bakal nyandak seueur waktos.

Hal kahiji anu kudu dipikaharti nyaéta yén bolong masihan kami grafik titik-titik anu disambungkeun. Algoritma A* sareng BFS saleresna tiasa dianggo dina grafik sareng henteu paduli kana bolong urang. Urang tiasa nempatkeun titik di mana waé di dunya kaulinan: salami aya sambungan antara dua titik anu disambungkeun, ogé antara titik awal sareng tungtung sareng sahenteuna salah sahiji titik, algoritma bakal tiasa dianggo sareng sateuacana. Ieu sering disebut sistem waypoint, sabab unggal titik ngagambarkeun posisi signifikan di dunya nu bisa jadi bagian tina sagala Jumlah jalur hypothetical.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula
Conto 1: cangreud dina unggal kotak. Pilarian dimimitian ti titik dimana agén lokasina sareng ditungtungan dina titik kuadrat anu dipikahoyong.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula
Conto 2: Hiji set leutik titik (titik arah). Pilarian dimimitian dina alun-alun agén, ngalangkungan jumlah titik anu diperyogikeun, teras diteruskeun ka tujuan.

Ieu sistem lengkep fléksibel tur kuat. Tapi sababaraha perawatan anu diperlukeun dina mutuskeun dimana jeung kumaha carana nempatkeun waypoint a, disebutkeun agén bisa saukur teu ningali titik pangcaketna tur moal bisa ngamimitian jalur. Éta langkung gampil upami urang tiasa sacara otomatis nempatkeun titik jalan dumasar kana géométri dunya.

Ieu tempat bolong navigasi atanapi navmesh (bolong navigasi) némbongan. Ieu biasana bolong 2D tina segitiga anu dilapis dina géométri dunya - dimana waé agén diidinan leumpang. Unggal segitiga dina bolong janten titik dina grafik, sareng gaduh dugi ka tilu segitiga padeukeut anu janten titik padeukeut dina grafik.

Gambar ieu mangrupikeun conto tina mesin Unity - éta nganalisa géométri di dunya sareng nyiptakeun navmesh (dina layar dina bulao lampu). Unggal polygon dina navmesh mangrupakeun wewengkon dimana agén bisa nangtung atawa mindahkeun tina hiji polygon ka polygon sejen. Dina conto ieu, polygons leuwih leutik batan lanté nu aranjeunna lokasina - ieu dipigawé dina urutan tumut kana akun ukuran agén, nu bakal manjangkeun saluareun posisi nominal na.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Urang tiasa milarian rute anu ngalangkungan bolong ieu, deui nganggo algoritma A *. Ieu bakal masihan urang jalur anu ampir sampurna di dunya, anu tumut kana sadaya géométri sareng henteu meryogikeun titik anu teu perlu sareng nyiptakeun titik jalan.

Pathfinding mangrupikeun topik anu lega teuing dimana hiji bagian tina hiji tulisan henteu cekap. Upami anjeun hoyong diajar langkung rinci, maka ieu bakal ngabantosan ramatloka Amit Patel.

Perencanaan

Urang parantos diajar kalayan milarian jalur yén kadang henteu cekap ngan ukur milih arah sareng ngalih - urang kedah milih jalur sareng ngadamel sababaraha péngkolan pikeun dugi ka tujuan anu dipikahoyong. Urang tiasa ngageneralisasikeun ide ieu: ngahontal tujuan sanés ngan ukur léngkah salajengna, tapi sacara gembleng sekuen dimana sakapeung anjeun kedah ningali payun sababaraha léngkah pikeun milari naon anu kedah dilakukeun. Ieu disebut perencanaan. Pathfinding tiasa dianggap salaku salah sahiji sababaraha ekstensi pikeun perencanaan. Dina watesan Sense / Think / Act siklus urang, ieu téh dimana bagian Think ngarencanakeun sababaraha bagian Act pikeun mangsa nu bakal datang.

Hayu urang nempo conto dewan game Magic: The Gathering. Urang angkat heula sareng set kartu di handap ieu dina panangan urang:

  • Rawa - Méré 1 mana hideung (kartu darat).
  • Leuweung - méré 1 mana héjo (kartu darat).
  • Fugitive Wizard - Merlukeun 1 mana biru pikeun nelepon.
  • Elvish Mystic - Merlukeun 1 mana héjo pikeun manggil.

Urang malire tilu kartu sésana pikeun nyieun leuwih gampang. Numutkeun aturan, pamaén diidinan maén 1 kartu darat per péngkolan, anjeunna tiasa "ngetok" kartu ieu pikeun nimba mana ti dinya, lajeng tuang mantra (kaasup manggil mahluk a) nurutkeun jumlah mana. Dina kaayaan ieu, pamuter manusa terang maén Leuweung, ketok 1 mana héjo, lajeng manggil Elvish Mystic. Tapi kumaha kaulinan AI tiasa terang ieu?

tata gampang

Pendekatan trivial nyaéta pikeun nyobaan unggal tindakan dina gilirannana nepi ka teu aya anu cocog deui. Ku ningali kartu, AI ningali naon anu tiasa dicoo ku Swamp. Sarta anjeunna muterkeunana. Naha aya tindakan sanés anu tinggaleun péngkolan ieu? Eta teu bisa manggil boh Elvish Mystic atanapi buronan Wizard, sabab merlukeun mana héjo sarta biru masing-masing pikeun manggil aranjeunna, bari Rawa ngan nyadiakeun mana hideung. Sarta anjeunna moal deui bisa maénkeun Leuweung, sabab anjeunna geus maénkeun Rawa. Ku kituna, kaulinan AI nuturkeun aturan, tapi ngalakukeun eta kirang. Bisa ningkat.

Perencanaan tiasa mendakan daptar lampah anu mawa kaulinan ka kaayaan anu dipikahoyong. Sapertos unggal alun-alun dina hiji jalan ngagaduhan tatangga (dina milarian jalan), unggal tindakan dina rencana ogé gaduh tatangga atanapi panerusna. Urang tiasa milarian lampah ieu sareng lampah saterasna dugi ka ngahontal kaayaan anu dipikahoyong.

Dina conto urang, hasil anu dipikahoyong nyaéta "ngagero mahluk upami mungkin." Dina awal péngkolan, urang ngan ukur ningali dua tindakan anu diidinan ku aturan kaulinan:

1. Maén Rawa (hasil: Rawa di buruan)
2. Maén Leuweung (hasil: Leuweung di buruan)

Unggal tindakan anu dilakukeun tiasa nyababkeun tindakan salajengna sareng nutup anu sanés, deui gumantung kana aturan kaulinan. Bayangkeun urang maénkeun Rawa - ieu bakal ngahapus Rawa salaku léngkah salajengna (urang parantos maén), sareng ieu ogé bakal ngaleungitkeun Leuweung (sabab nurutkeun aturan anjeun tiasa maénkeun hiji kartu darat per péngkolan). Saatos ieu, AI nambihan kéngingkeun 1 mana hideung salaku léngkah salajengna sabab teu aya pilihan sanés. Upami anjeunna maju sareng milih Ketok Rawa, anjeunna bakal nampi 1 unit mana hideung sareng moal tiasa ngalakukeun nanaon.

1. Maén Rawa (hasil: Rawa di buruan)
1.1 Rawa "Tap" (hasil: Rawa "tapped", +1 unit mana hideung)
Taya lampah sadia - TAMAT
2. Maén Leuweung (hasil: Leuweung di buruan)

Daptar lampah éta pondok, urang ngahontal jalan buntu. Urang ngulang prosés pikeun lengkah saterusna. Urang maén Leuweung, buka aksi "meunang 1 mana héjo", anu dina gilirannana bakal muka aksi katilu - manggil Elvish Mystic.

1. Maén Rawa (hasil: Rawa di buruan)
1.1 Rawa "Tap" (hasil: Rawa "tapped", +1 unit mana hideung)
Taya lampah sadia - TAMAT
2. Maén Leuweung (hasil: Leuweung di buruan)
2.1 Leuweung "Tap" (hasil: Leuweung "disedap", +1 unit mana héjo)
2.1.1 Manggil Elvish Mystic (hasil: Elvish Mystic dina kaulinan, -1 mana héjo)
Taya lampah sadia - TAMAT

Tungtungna, urang ngajajah sadaya tindakan anu mungkin sareng mendakan rencana anu nyauran mahluk.

Ieu conto pisan saderhana. Disarankeun milih rencana anu pangsaéna, sanés ngan ukur rencana anu nyumponan sababaraha kriteria. Ieu umumna mungkin mun evaluate rencana poténsi dumasar kana hasil atawa kauntungan sakabéh palaksanaan maranéhanana. Anjeun tiasa nyitak diri 1 titik pikeun maén kartu darat jeung 3 titik pikeun manggil mahluk. Maén Rawa bakal rencana 1 titik. Sareng maén Leuweung → Ketok Leuweung → manggil Elvish Mystic bakal langsung masihan 4 poin.

Ieu kumaha tata jalan dina Magic: The Gathering, tapi logika sarua lumaku dina situasi séjén. Contona, mindahkeun pion pikeun masihan rohangan pikeun uskup pikeun gerak dina catur. Atawa nutupan tukangeun témbok pikeun némbak aman di XCOM kawas kieu. Sacara umum, anjeun meunang ide.

Ngaronjatkeun tata

Kadang-kadang aya loba teuing lampah poténsi mertimbangkeun unggal pilihan mungkin. Balik deui ka conto sareng Magic: The Gathering: hayu urang nyarios yén dina kaulinan sareng dina panangan anjeun aya sababaraha kartu darat sareng mahluk - jumlah kamungkinan kombinasi gerakan tiasa aya dina puluhan. Aya sababaraha solusi pikeun masalah.

Metodeu kahiji nyaéta mundur chaining. Gantina nyobian sagala kombinasi, eta leuwih hade mimitian ku hasil ahir jeung cobaan pikeun manggihan jalur langsung. Gantina angkat tina akar tangkal ka daun anu khusus, urang ngalih ka arah anu sabalikna - tina daun ka akar. Metoda ieu leuwih gampang jeung gancang.

Lamun musuh boga 1 kaséhatan, anjeun tiasa manggihan rencana "deal 1 atawa leuwih karuksakan". Pikeun ngahontal ieu, sababaraha syarat kedah dicumponan:

1. Ruksakna bisa disababkeun ku mantra - eta kudu di leungeun.
2. Pikeun mantra, anjeun peryogi mana.
3. Pikeun meunang mana, Anjeun kudu maén kartu darat.
4. Maén kartu darat, anjeun kudu boga eta dina leungeun anjeun.

Cara anu sanés nyaéta milarian anu pangsaéna. Gantina nyobian sagala jalur, urang milih hiji paling merenah. Paling sering, metoda ieu méré rencana optimal tanpa waragad pilarian perlu. A* mangrupakeun wangun pilarian munggaran pangalusna - ku examining ruteu paling ngajangjikeun ti mimiti, eta geus bisa manggihan jalur pangalusna tanpa mariksa pilihan séjén.

Hiji pilihan pilarian pangalusna-mimiti metot sarta beuki populér nyaéta Monte Carlo Tree Search. Gantina nebak rencana mana anu langkung saé tibatan anu sanés nalika milih unggal tindakan anu salajengna, algoritma milih panerus acak dina unggal léngkah dugi ka tungtungna (nalika rencana éta ngahasilkeun kameunangan atanapi eleh). Hasil ahir lajeng dipaké pikeun nambahan atawa ngurangan beurat pilihan saméméhna. Ku ngulang prosés ieu sababaraha kali dina urutan, algoritma méré estimasi hade naon move salajengna pangalusna, sanajan kaayaan robah (lamun musuh nyokot tindakan pikeun ngaganggu pamaén).

Henteu aya carita ngeunaan perencanaan dina kaulinan anu bakal lengkep tanpa Perencanaan Aksi Berorientasi Tujuan atanapi GOAP (rencana aksi berorientasi tujuan). Ieu mangrupikeun metode anu seueur dianggo sareng dibahas, tapi lian ti sababaraha detil anu ngabédakeun, éta dasarna mangrupikeun metode ranté mundur anu urang bahas sateuacana. Upami tujuanna nyaéta "ngancurkeun pamuter" sareng pamaén aya di tukangeun panutup, rencanana tiasa: ngancurkeun nganggo granat → kéngingkeun → maledog.

Biasana aya sababaraha tujuan, masing-masing gaduh prioritas sorangan. Upami tujuan prioritas pangluhurna teu tiasa réngsé (henteu aya kombinasi tindakan anu nyiptakeun rencana "maéhan pamuter" sabab pamaén henteu katingali), AI bakal turun deui ka tujuan prioritas anu langkung handap.

Latihan jeung adaptasi

Kami parantos nyarios yén kaulinan AI biasana henteu nganggo pembelajaran mesin sabab henteu cocog pikeun ngatur agén sacara real waktos. Tapi ieu lain hartosna yén anjeun teu bisa nginjeum hal ti wewengkon ieu. Kami hoyong lawan dina penembak anu urang tiasa diajar. Contona, manggihan ngeunaan posisi pangalusna dina peta. Atanapi lawan dina pertandingan tarung anu bakal meungpeuk gerakan kombo anu sering dianggo pamaén, ngadorong anjeunna ngagunakeun batur. Janten pembelajaran mesin tiasa janten mangpaat dina kaayaan sapertos kitu.

Statistik jeung Probabilitas

Sateuacan urang asup kana conto anu rumit, hayu urang tingali sabaraha jauh urang tiasa nyandak sababaraha pangukuran saderhana sareng ngagunakeunana pikeun nyandak kaputusan. Salaku conto, strategi real-time - kumaha urang nangtukeun naha pamaén tiasa ngaluncurkeun serangan dina sababaraha menit mimiti pertandingan sareng pertahanan naon anu kedah disiapkeun ngalawan ieu? Urang tiasa ngulik pangalaman katukang pamaén pikeun ngartos kumaha réaksi ka hareup. Pikeun mimitian, urang henteu gaduh data atah sapertos kitu, tapi urang tiasa ngumpulkeun éta - unggal waktos AI maén ngalawan manusa, éta tiasa ngarékam waktos serangan munggaran. Saatos sababaraha sesi, urang bakal nampi rata-rata waktos anu diperyogikeun pikeun pamaén nyerang ka hareup.

Aya ogé masalah sareng nilai rata-rata: upami pamaén bergegas 20 kali sareng maén lalaunan 20 kali, maka nilai anu diperyogikeun bakal aya di tengah, sareng ieu moal masihan naon waé anu mangpaat. Salah sahiji solusi nyaéta ngawates data input - 20 potongan terakhir tiasa dipertimbangkeun.

Pendekatan anu sami dianggo nalika ngira-ngira kamungkinan tindakan anu tangtu ku nganggap yén kahoyong tukang pamuter bakal sami di hareup. Lamun pamaén nyerang urang lima kali kalawan fireball, dua kali kalawan kilat, sarta sakali kalawan melee, éta écés yén anjeunna prefers fireball. Hayu urang extrapolate tur tingal kamungkinan ngagunakeun pakarang béda: fireball = 62,5%, kilat = 25% jeung melee = 12,5%. AI kaulinan urang kudu nyiapkeun ngajaga diri tina seuneu.

Métode anu pikaresepeun sanésna nyaéta ngagunakeun Naive Bayes Classifier pikeun ngulik jumlah data input anu ageung sareng mengklasifikasikan kaayaan supados AI meta dina cara anu dipikahoyong. Klasifikasi Bayesian paling dipikanyaho pikeun dianggo dina saringan spam email. Di dinya aranjeunna nalungtik kecap-kecap, ngabandingkeunana sareng dimana kecap-kecap éta parantos muncul sateuacanna (dina spam atanapi henteu), sareng ngadamel kacindekan ngeunaan email anu asup. Urang tiasa ngalakukeun hal anu sami sanaos langkung sakedik input. Dumasar kana sadaya inpormasi anu kapaké anu katingali ku AI (sapertos unit musuh naon anu diciptakeun, atanapi mantra naon anu dianggo, atanapi téknologi naon anu ditalungtik), sareng hasil ahir (perang atanapi perdamaian, rurusuhan atanapi ngabela, jsb.) - urang bakal milih paripolah AI nu dipikahoyong.

Sadaya metode latihan ieu cekap, tapi disarankeun pikeun dianggo dumasar kana data tés. AI bakal diajar adaptasi kana strategi anu béda-béda anu dianggo ku playtesters anjeun. AI nu adaptasi jeung pamuter sanggeus release bisa jadi teuing bisa diprediksi atawa hésé teuing eleh.

Adaptasi dumasar nilai

Dibikeun eusi dunya kaulinan urang sareng aturan, urang tiasa ngarobih set nilai anu mangaruhan kaputusan kaputusan, tinimbang ngan ukur nganggo data input. Urang ngalakukeun ieu:

  • Hayu AI ngumpulkeun data ngeunaan kaayaan dunya sarta acara konci salila kaulinan (sakumaha di luhur).
  • Hayu urang robih sababaraha nilai penting dumasar kana data ieu.
  • Kami ngalaksanakeun kaputusan kami dumasar kana ngolah atanapi ngevaluasi nilai-nilai ieu.

Contona, hiji agén boga sababaraha kamar pikeun milih ti dina peta penembak jalma kahiji. Tiap kamar boga nilai sorangan, nu nangtukeun sabaraha desirable éta nganjang. AI sacara acak milih kamar mana anu badé dituju dumasar kana nilaina. Agén teras émut kamar mana anjeunna ditelasan sareng ngirangan nilaina (kamungkinan anjeunna bakal uih deui ka dinya). Nya kitu pikeun kaayaan sabalikna - lamun agén ngancurkeun loba lawan, mangka nilai kamar naek.

Modél Markov

Kumaha upami urang ngagunakeun data anu dikumpulkeun pikeun ngaramalkeun? Upami urang émut unggal kamar anu urang tingali pamaén dina waktos anu tangtu, urang bakal ngaduga kamar mana pamaén éta tiasa angkat. Ku nyukcruk tur ngarékam gerakan pamuter urang sakuliah kamar (nilai), urang bisa ngaduga aranjeunna.

Hayu urang nyandak tilu kamar: beureum, héjo jeung biru. Sareng ogé observasi anu urang rekam nalika ningali sési kaulinan:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Jumlah pangamatan di unggal kamar ampir sarua - urang masih teu nyaho dimana nyieun hiji tempat alus keur serangan hendap. Ngumpulkeun statistik ogé nyusahkeun ku respawning pamaén, anu muncul merata sapanjang peta. Tapi data ngeunaan kamar hareup aranjeunna asupkeun sanggeus muncul dina peta geus mangpaat.

Ieu bisa ditempo yén kamar héjo cocog pamaén - lolobana jalma pindah ti kamar beureum ka dinya, 50% tina saha tetep aya salajengna. Kamar biru, sabalikna, henteu populer; ampir teu aya anu angkat ka dinya, sareng upami aranjeunna, aranjeunna henteu cicing lami.

Tapi datana nyarioskeun hal anu langkung penting - nalika pamaén aya di kamar biru, kamar hareup anu urang tingali anjeunna bakal beureum, sanés héjo. Sanajan kamar héjo leuwih populér ti kamar beureum, kaayaan robah lamun pamaén dina kamar biru. Kaayaan salajengna (nyaéta kamar pamuter bakal angkat ka) gumantung kana kaayaan saméméhna (nyaéta kamar pamuter ayeuna). Kusabab urang neuleuman kagumantungan, urang bakal nyieun prediksi leuwih akurat ti lamun urang ngan saukur diitung observasi bebas.

Ngaramal kaayaan hareup dumasar kana data ti kaayaan kaliwat disebut model Markov, sarta conto misalna (kalawan kamar) disebut ranté Markov. Kusabab pola ngagambarkeun probabiliti parobahan antara nagara pafolgende, aranjeunna visually ditampilkeun salaku FSMs kalawan probabiliti sabudeureun unggal transisi. Saméméhna, kami dipaké FSM ngagambarkeun kaayaan behavioral yén agén éta, tapi konsep ieu ngalegaan ka kaayaan mana wae, naha éta pakait sareng agén atanapi henteu. Dina hal ieu, nagara ngawakilan kamar anu ditempatan ku agén:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Ieu mangrupikeun cara saderhana pikeun ngagambarkeun kamungkinan rélatif parobahan kaayaan, masihan AI sababaraha kamampuan pikeun ngaduga kaayaan salajengna. Anjeun tiasa ngantisipasi sababaraha léngkah ka hareup.

Lamun pamaén aya di kamar héjo, aya 50% kasempetan yén anjeunna bakal tetep aya dina waktos salajengna anjeunna observasi. Tapi naon Chances yén anjeunna masih bakal aya malah sanggeus? Henteu ngan aya kasempetan yén pamaén tetep di kamar héjo sanggeus dua observasi, tapi aya ogé kasempetan yén anjeunna ninggalkeun sarta balik. Ieu tabel énggal kalayan ngitung data énggal:

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula

Ieu nunjukeun yen kasempetan ningali pamuter di kamar héjo sanggeus dua observasi bakal sarua jeung 51% - 21% yén anjeunna bakal ti kamar beureum, 5% di antarana yén pamuter bakal nganjang ka kamar biru antara aranjeunna, jeung 25% yén pamaén moal bakal ninggalkeun kamar héjo.

tabél téh saukur alat visual - prosedur ngan merlukeun ngalikeun probabiliti di unggal hambalan. Ieu ngandung harti yén anjeun tiasa ningali jauh ka hareup kalayan hiji caveat: urang nganggap yén kasempetan pikeun asup ka kamar gumantung sagemblengna kana kamar ayeuna. Ieu disebut Markov Harta - kaayaan hareup gumantung ngan dina kiwari. Tapi ieu teu saratus persen akurat. Pamaén bisa ngarobah kaputusan gumantung kana faktor séjén: tingkat kaséhatan atawa jumlah amunisi. Kusabab kami henteu ngarékam niléy ieu, ramalan kami bakal kurang akurat.

N-Gram

Kumaha upami conto kaulinan tarung sareng ngaramalkeun gerakan kombo pamaén? Sami! Tapi tinimbang hiji kaayaan atawa acara, urang bakal nalungtik sakabéh runtuyan nu nyieun hiji mogok combo.

Salah sahiji cara pikeun ngalakukeun ieu nyaéta pikeun nyimpen unggal input (sapertos Kick, Punch atanapi Block) dina panyangga sareng nyerat sadayana panyangga salaku acara. Janten pamuter sababaraha kali mencét Kick, Kick, Punch pikeun ngagunakeun serangan SuperDeathFist, sistem AI nyimpen sadaya input dina panyangga sareng émut tilu anu terakhir anu dianggo dina unggal léngkah.

Kumaha cara nyiptakeun AI kaulinan: pituduh pikeun pamula
(Garis anu kandel nyaéta nalika pamuter ngaluncurkeun serangan SuperDeathFist.)

AI bakal ningali sadaya pilihan nalika pamuter milih Kick, dituturkeun ku Kick anu sanés, teras perhatikeun yén input salajengna sok Punch. Ieu bakal ngamungkinkeun agén pikeun ngaduga gerakan kombo SuperDeathFist sareng meungpeuk upami mungkin.

Runtuyan kajadian ieu disebut N-gram, dimana N nyaéta jumlah unsur nu disimpen. Dina conto saméméhna éta 3-gram (trigram), nu hartina: dua éntri munggaran dipaké pikeun ngaduga katilu. Sasuai, dina 5-gram, opat éntri munggaran ngaduga kalima jeung saterusna.

Désainer kedah milih ukuran N-gram sacara saksama. A N leutik merlukeun memori kirang tapi ogé nyimpen kirang sajarah. Salaku conto, 2-gram (bigram) bakal ngarékam Kick, Kick or Kick, Punch, tapi moal tiasa nyimpen Kick, Kick, Punch, janten AI moal ngabales combo SuperDeathFist.

Di sisi anu sanés, angka anu langkung ageung peryogi langkung seueur memori sareng AI bakal langkung sesah dilatih sabab bakal aya seueur pilihan anu langkung seueur. Upami Anjeun gaduh tilu inputs mungkin tina Kick, Punch atanapi Blok, sarta kami dipaké 10-gram, éta bakal jadi ngeunaan 60 sarébu pilihan béda.

Modél bigram mangrupakeun ranté Markov basajan - unggal kaayaan kaliwat / pasangan kaayaan ayeuna bigram a, tur anjeun bisa ngaduga kaayaan kadua dumasar kana kahiji. 3-gram jeung N-gram nu leuwih gede ogé bisa dianggap salaku ranté Markov, dimana sakabeh elemen (iwal nu panungtungan dina N-gram) babarengan ngawangun kaayaan kahiji jeung unsur panungtungan kadua. Conto kaulinan tarung nembongkeun kasempetan transisi tina tajongan jeung tajongan kaayaan ka tajongan jeung Punch kaayaan. Ku ngarawat sababaraha éntri sajarah input salaku unit tunggal, kami dasarna ngarobih sekuen input kana bagian tina sakabeh nagara. Hal ieu méré urang sipat Markov, anu ngamungkinkeun urang ngagunakeun ranté Markov keur prediksi input salajengna jeung nebak naon combo move bakal salajengna.

kacindekan

Urang ngobrol ngeunaan alat anu paling umum sareng pendekatan dina pamekaran intelijen buatan. Kami ogé ningali kaayaan dimana aranjeunna kedah dianggo sareng dimana aranjeunna mangpaat.

Ieu kedah cekap ngartos dasar-dasar kaulinan AI. Tapi, tangtosna, ieu sanés sadayana metode. Kurang populér, tapi teu kurang éféktif ngawengku:

  • algoritma optimasi kaasup climbing pasir, turunan gradién jeung algoritma genetik
  • Algoritma pilarian / penjadwalan musuh (minimax sareng alfa-béta pruning)
  • métode klasifikasi (perceptrons, jaringan saraf jeung rojongan mesin vektor)
  • sistem pikeun ngolah persepsi jeung memori agén
  • pendekatan arsitéktur ka AI (sistem hibrid, arsitéktur subset sareng cara séjén pikeun overlaying sistem AI)
  • alat animasi (perencanaan sareng koordinasi gerak)
  • faktor kinerja (tingkat detil, iraha waé, sareng algoritma timeslicing)

Sumber online ngeunaan topik:

1. GameDev.net boga bagian kalawan artikel na tutorials on AIjeung dina forum.
2. AiGameDev.com ngandung loba presentasi sarta artikel dina rupa-rupa jejer nu patali jeung ngembangkeun AI kaulinan.
3. Kolong GDC ngawengku jejer ti GDC AI Summit, loba nu sadia haratis.
4. bahan mangpaat ogé bisa kapanggih dina website AI Game Programmer Guild.
5. Tommy Thompson, panalungtik AI sarta pamekar kaulinan, ngajadikeun video dina YouTube AI jeung Kaulinan kalawan katerangan jeung ulikan ngeunaan AI dina kaulinan komérsial.

Buku ngeunaan topik:

1. Runtuyan buku Game AI Pro mangrupakeun kumpulan artikel pondok anu ngajelaskeun kumaha carana nerapkeun fitur husus atawa kumaha carana ngajawab masalah husus.

Game AI Pro: Dikumpulkeun Hikmah tina Game AI Profesional
Game AI Pro 2: Dikumpulkeun Hikmah tina Game AI Profesional
Game AI Pro 3: Dikumpulkeun Hikmah tina Game AI Profesional

2. AI Game Programming Wisdom runtuyan nyaéta miheulaan runtuyan Game AI Pro. Ieu ngandung métode heubeul, tapi ampir kabéh relevan malah kiwari.

Hikmah Pemrograman Game AI 1
Hikmah Pemrograman Game AI 2
Hikmah Pemrograman Game AI 3
Hikmah Pemrograman Game AI 4

3. Kecerdasan Buatan: Pendekatan Modern mangrupa salah sahiji téks dasar pikeun dulur anu hoyong ngartos widang umum tina kecerdasan jieunan. Ieu sanés buku ngeunaan pamekaran kaulinan - éta ngajarkeun dasar-dasar AI.

sumber: www.habr.com

Tambahkeun komentar