Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Oyunlarda süni intellektlə bağlı maraqlı materialla rastlaşdım. Sadə nümunələrdən istifadə edərək AI haqqında əsas şeylərin izahı ilə və içərisində onun rahat inkişafı və dizaynı üçün çoxlu faydalı alətlər və üsullar var. Onları necə, harada və nə vaxt istifadə etmək də oradadır.

Nümunələrin əksəriyyəti psevdokodda yazılmışdır, ona görə də qabaqcıl proqramlaşdırma biliyi tələb olunmur. Kəsimin altında şəkillər və giflər olan 35 vərəq mətn var, buna görə hazır olun.

UPD. Üzr istəyirəm, amma Habré-də bu məqalənin öz tərcüməsini artıq etmişəm PatientZero. Onun versiyasını oxuya bilərsiniz burada, amma nədənsə məqalə yanımdan keçdi (axtarışdan istifadə etdim, amma bir şey səhv oldu). Oyunun inkişafına həsr olunmuş bloqda yazdığım üçün tərcümə versiyamı abunəçilər üçün buraxmaq qərarına gəldim (bəzi məqamlar fərqli formatlaşdırılıb, bəziləri tərtibatçıların məsləhəti ilə qəsdən buraxılıb).

AI nədir?

Oyun AI obyektin yerləşdiyi şərtlərə əsasən hansı hərəkətləri yerinə yetirməli olduğuna diqqət yetirir. Bu adətən "ağıllı agent" idarəçiliyi adlanır, burada agent oyunçu xarakteri, nəqliyyat vasitəsi, bot və ya bəzən daha mücərrəd bir şeydir: bütün qurumlar qrupu və ya hətta bir sivilizasiya. Hər bir halda o, öz mühitini görməli, ona əsasən qərarlar verməli və ona uyğun hərəkət etməli olan bir şeydir. Buna Hiss/Düşün/Hərəkət dövrü deyilir:

  • Hiss: Agent öz mühitində onun davranışına təsir edə biləcək şeylər (yaxınlıqdakı təhlükələr, toplanacaq əşyalar, araşdırmaq üçün maraqlı yerlər) haqqında məlumat tapır və ya alır.
  • Düşünün: Agent necə reaksiya verəcəyinə qərar verir (eşyaları toplamaq üçün kifayət qədər təhlükəsiz olub-olmadığını və ya əvvəlcə döyüşmək/gizlənmək lazım olduğunu düşünür).
  • Akt: agent əvvəlki qərarı həyata keçirmək üçün hərəkətlər edir (düşmən və ya obyektə doğru hərəkət etməyə başlayır).
  • ...indi personajların hərəkətlərinə görə vəziyyət dəyişib, ona görə də dövr yeni məlumatlarla təkrarlanır.

AI, döngənin Sense hissəsinə diqqət yetirməyə meyllidir. Məsələn, avtonom avtomobillər yolun şəkillərini çəkir, onları radar və lidar məlumatları ilə birləşdirir və şərh edir. Bu, adətən, daxil olan məlumatları emal edən və ona məna verən, “sizdən 20 yard irəlidə başqa bir avtomobil var” kimi semantik məlumatları çıxaran maşın öyrənməsi ilə edilir. Bunlar təsnifat problemləri deyilənlərdir.

Oyunların məlumat çıxarmaq üçün mürəkkəb sistemə ehtiyacı yoxdur, çünki məlumatların əksəriyyəti artıq onun ayrılmaz hissəsidir. Qarşıda düşmənin olub-olmadığını müəyyən etmək üçün təsvirin tanınması alqoritmlərini işə salmağa ehtiyac yoxdur — oyun artıq bilir və məlumatı birbaşa qərar qəbul etmə prosesinə daxil edir. Buna görə də, dövrün Hiss hissəsi çox vaxt Düşün və Hərəkət Et hissəsindən daha sadədir.

Oyun AI məhdudiyyətləri

AI müşahidə edilməli olan bir sıra məhdudiyyətlərə malikdir:

  • Süni intellektin əvvəlcədən öyrədilməsinə ehtiyac yoxdur, sanki bu, maşın öyrənməsi alqoritmidir. On minlərlə oyunçunu izləmək və onlara qarşı oynamağın ən yaxşı yolunu öyrənmək üçün inkişaf zamanı neyron şəbəkəsi yazmağın mənası yoxdur. Niyə? Çünki oyun çıxmayıb və oyunçu yoxdur.
  • Oyun əyləncəli və çətin olmalıdır, ona görə də agentlər insanlara qarşı ən yaxşı yanaşmanı tapmamalıdır.
  • Agentlər realist görünməlidirlər ki, oyunçular özlərini real insanlara qarşı oynadıqlarını hiss etsinlər. AlphaGo proqramı insanlardan üstün idi, lakin seçilmiş addımlar oyunun ənənəvi anlayışından çox uzaq idi. Oyun insan rəqibini simulyasiya edirsə, bu hiss mövcud olmamalıdır. Alqoritmi elə dəyişdirmək lazımdır ki, o, ideal deyil, inandırıcı qərarlar qəbul etsin.
  • AI real vaxt rejimində işləməlidir. Bu o deməkdir ki, alqoritm qərar qəbul etmək üçün uzun müddət CPU istifadəsini monopoliyaya ala bilməz. Hətta 10 millisaniyə çox uzundur, çünki əksər oyunlara bütün emalları yerinə yetirmək və növbəti qrafik çərçivəyə keçmək üçün cəmi 16-33 millisaniyə lazımdır.
  • İdeal olaraq, sistemin ən azı bir hissəsi məlumatlara əsaslanmalıdır ki, kodlaşdırıcı olmayanlar dəyişiklik edə bilsin və düzəlişlər daha tez baş verə bilsin.

Bütün Hiss/Düşün/Hərəkət dövrünü əhatə edən AI yanaşmalarına baxaq.

Əsas Qərarların Qəbul edilməsi

Ən sadə oyundan başlayaq - Pong. Məqsəd: avarını elə hərəkət etdirin ki, top onun yanından uçmaq əvəzinə ondan sıçraysın. Bu, tennisə bənzəyir, topu vurmasan uduzduğun yerdə. Burada AI-nin nisbətən asan tapşırığı var - platformanın hansı istiqamətdə hərəkət edəcəyinə qərar vermək.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Şərti ifadələr

Pongdakı AI üçün ən bariz həll həmişə platformanı topun altına qoymağa çalışmaqdır.

Bunun üçün psevdokodla yazılmış sadə bir alqoritm:

oyun işləyərkən hər çərçivə/güncəlləmə:
top avarın solundadırsa:
avar sola sürüşdürün
əgər top avarın sağındadırsa:
avarını sağa hərəkət etdirin

Platforma topun sürəti ilə hərəkət edirsə, bu, Pong-da AI üçün ideal alqoritmdir. Agent üçün çox məlumat və mümkün hərəkətlər yoxdursa, heç bir şeyi çətinləşdirməyə ehtiyac yoxdur.

Bu yanaşma o qədər sadədir ki, bütün Hiss/Düşün/Hərəkət dövrü demək olar ki, nəzərə çarpmır. Ancaq oradadır:

  • Hiss hissəsi iki if ifadəsindən ibarətdir. Oyun topun harada olduğunu və platformanın harada olduğunu bilir, buna görə də AI bu məlumat üçün ona baxır.
  • Düşüncə hissəsi də iki if ifadəsinə daxildir. Onlar bu halda bir-birini istisna edən iki həlli təcəssüm etdirirlər. Nəticədə, üç hərəkətdən biri seçilir - platformanı sola köçürün, sağa köçürün və ya artıq düzgün yerləşdirilibsə, heç bir şey etməyin.
  • Akt hissəsi Paddle Left və Move Paddle Right ifadələrində tapılır. Oyun dizaynından asılı olaraq, onlar platformanı anında və ya müəyyən bir sürətlə hərəkət etdirə bilərlər.

Bu cür yanaşmalar reaktiv adlanır - dünyanın mövcud vəziyyətinə reaksiya verən və hərəkətə keçən sadə qaydalar toplusu (bu halda kodda ifadələr varsa) mövcuddur.

Qərar ağacı

Pong nümunəsi əslində qərar ağacı adlanan rəsmi AI konsepsiyasına bərabərdir. Alqoritm "yarpaq"a çatmaq üçün ondan keçir - hansı hərəkətin ediləcəyi barədə qərar.

Platformamızın alqoritmi üçün qərar ağacının blok diaqramını yaradaq:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Ağacın hər bir hissəsi node adlanır - AI bu cür strukturları təsvir etmək üçün qrafik nəzəriyyəsindən istifadə edir. İki növ düyün var:

  • Qərar qovşaqları: hər bir alternativin ayrıca qovşaq kimi təqdim olunduğu hər hansı bir şərtin sınaqdan keçirilməsi əsasında iki alternativ arasında seçim.
  • Son qovşaqlar: Son qərarı təmsil edən yerinə yetiriləcək hərəkət.

Alqoritm birinci qovşaqdan (ağacın "kökü") başlayır. O, ya hansı uşaq qovşağına getmək barədə qərar qəbul edir, ya da qovşaqda saxlanan hərəkəti yerinə yetirir və çıxış edir.

Qərar ağacının əvvəlki bölmədəki if ifadələri ilə eyni işi görməsinin nə faydası var? Burada hər bir qərarın yalnız bir şərti və iki mümkün nəticəsi olduğu ümumi bir sistem mövcuddur. Bu, tərtibatçıya sərt kodlaşdırmadan ağacdakı qərarları təmsil edən məlumatlardan AI yaratmağa imkan verir. Onu cədvəl şəklində təqdim edək:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Kod tərəfində sətirləri oxumaq üçün bir sistem əldə edəcəksiniz. Onların hər biri üçün bir qovşaq yaradın, ikinci sütun əsasında qərar məntiqini və üçüncü və dördüncü sütunlar əsasında uşaq qovşaqlarını birləşdirin. Siz hələ də şərtləri və hərəkətləri proqramlaşdırmalısınız, lakin indi oyunun strukturu daha mürəkkəb olacaq. Burada siz əlavə qərarlar və hərəkətlər əlavə edirsiniz, sonra sadəcə ağac tərifi mətn faylını redaktə etməklə bütün AI-ni fərdiləşdirirsiniz. Sonra, faylı oyunu yenidən tərtib etmədən və kodu dəyişdirmədən davranışı dəyişə bilən oyun dizaynerinə köçürürsünüz.

Qərar ağacları çoxlu nümunələr toplusundan (məsələn, ID3 alqoritmindən istifadə etməklə) avtomatik qurulduqda çox faydalıdır. Bu, onları əldə edilən məlumatlar əsasında vəziyyətləri təsnif etmək üçün effektiv və yüksək məhsuldar bir vasitə halına gətirir. Bununla belə, biz agentlərin hərəkətləri seçmək üçün sadə bir sistemdən kənara çıxırıq.

Ssenarilər

Əvvəlcədən yaradılmış şərtlər və hərəkətlərdən istifadə edən qərar ağacı sistemini təhlil etdik. Süni intellekt hazırlayan şəxs ağacı istədiyi kimi təşkil edə bilər, lakin o, yenə də bütün bunları proqramlaşdıran kodlayıcıya etibar etməlidir. Dizaynerə öz şərtlərini və ya hərəkətlərini yaratmaq üçün alətlər verə bilsək nə olardı?

Beləliklə, proqramçı Is Ball Left Of Paddle və Is Ball Right Of Paddle şərtləri üçün kod yazmaq məcburiyyətində qalmaması üçün o, dizaynerin bu dəyərləri yoxlamaq üçün şərtlər yazacağı bir sistem yarada bilər. Sonra qərar ağacı məlumatları belə görünəcək:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu, mahiyyətcə birinci cədvəldəki kimidir, lakin həllərin öz kodu var, bir az if ifadəsinin şərti hissəsi kimi. Kod tərəfində, bu, qərar qovşaqları üçün ikinci sütunda oxunacaq, lakin yerinə yetirmək üçün xüsusi şərt axtarmaq əvəzinə (Ball Left Of Paddle), şərti ifadəni qiymətləndirir və müvafiq olaraq doğru və ya yalanı qaytarır. Bu, Lua və ya Angelscript skript dilindən istifadə etməklə edilir. Onlardan istifadə edərək tərtibatçı öz oyununda obyektləri (top və avar) götürə və skriptdə mövcud olacaq dəyişənlər yarada bilər (ball.position). Həmçinin, skript dili C++ ilə müqayisədə daha sadədir. Tam tərtib mərhələsini tələb etmir, buna görə də oyun məntiqini tez tənzimləmək üçün idealdır və "kodlaşdırıcı olmayanlara" lazımi funksiyaları özləri yaratmağa imkan verir.

Yuxarıdakı nümunədə skript dili yalnız şərti ifadəni qiymətləndirmək üçün istifadə olunur, lakin o, hərəkətlər üçün də istifadə edilə bilər. Məsələn, Move Paddle Right məlumatları skript bəyanatına çevrilə bilər (ball.position.x += 10). Belə ki, hərəkət həm də skriptdə müəyyən edilsin, Move Paddle Right proqramına ehtiyac olmadan.

Siz daha da irəli gedə və bütün qərar ağacını skript dilində yaza bilərsiniz. Bu, sərt kodlaşdırılmış şərti ifadələr şəklində kod olacaq, lakin onlar xarici skript fayllarında yerləşəcək, yəni bütün proqramı yenidən tərtib etmədən dəyişdirilə bilər. Müxtəlif AI cavablarını tez sınaqdan keçirmək üçün oyun zamanı skript faylını tez-tez redaktə edə bilərsiniz.

Hadisəyə cavab

Yuxarıdakı nümunələr Pong üçün mükəmməldir. Onlar davamlı olaraq Hiss/Düşün/Hərəkət dövrünü həyata keçirir və dünyanın ən son vəziyyətinə əsaslanaraq hərəkət edirlər. Ancaq daha mürəkkəb oyunlarda fərdi hadisələrə reaksiya vermək lazımdır və hər şeyi bir anda qiymətləndirmək lazım deyil. Bu vəziyyətdə Pong artıq pis bir nümunədir. Gəlin başqa birini seçək.

Təsəvvür edin ki, düşmənlər oyunçunu aşkarlayana qədər hərəkətsizdirlər, bundan sonra “ixtisaslarından” asılı olaraq hərəkət edirlər: kimsə “tələsməyə” qaçacaq, kimsə uzaqdan hücum edəcək. Bu, hələ də əsas reaktiv sistemdir - "əgər oyunçu aşkar edilərsə, bir şey edin" - lakin məntiqi olaraq onu Oyunçu Gördüyü hadisə və Reaksiyaya bölmək olar (cavab seçin və onu yerinə yetirin).

Bu, bizi Hiss/Düşün/Hərəkət dövrünə qaytarır. Süni intellektin oyunçunu görüb-görmədiyini yoxlayacaq Sense hissəsini kodlaya bilərik. Yoxdursa, heç bir şey olmur, amma görürsə, Player Seen hadisəsi yaradılır. Kodda "Oyunçu Gördüyü hadisə baş verdikdə, bunu edin" deyən ayrıca bölmə olacaq, burada Düşün və Hərəkət hissələrinə müraciət etmək lazımdır. Beləliklə, siz Player Seen hadisəsinə reaksiyalar quracaqsınız: "tələskən" xarakter üçün - ChargeAndAttack və snayper üçün - HideAndSnipe. Bu əlaqələr yenidən tərtib etmədən sürətli redaktə üçün məlumat faylında yaradıla bilər. Skript dili burada da istifadə edilə bilər.

Çətin qərarlar qəbul etmək

Sadə reaksiya sistemləri çox güclü olsa da, onların kifayət etmədiyi bir çox vəziyyət var. Bəzən agentin hazırda gördüyü işlərə əsaslanaraq müxtəlif qərarlar qəbul etməlisiniz, lakin bunu bir şərt kimi təsəvvür etmək çətindir. Bəzən onları qərar ağacında və ya skriptdə effektiv şəkildə təmsil etmək üçün çoxlu şərtlər var. Bəzən növbəti addıma qərar verməzdən əvvəl vəziyyətin necə dəyişəcəyini əvvəlcədən qiymətləndirmək lazımdır. Bu problemləri həll etmək üçün daha mürəkkəb yanaşmalara ehtiyac var.

Sonlu dövlət maşını

Sonlu dövlət maşını və ya FSM (sonlu dövlət maşını) agentimizin hazırda bir neçə mümkün vəziyyətdən birində olduğunu və bir vəziyyətdən digərinə keçə biləcəyini söyləmək üsuludur. Müəyyən sayda belə dövlətlər var - buna görə də adı. Həyatdan ən yaxşı nümunə svetofordur. Fərqli yerlərdə işıqların müxtəlif ardıcıllığı var, lakin prinsip eynidir - hər bir vəziyyət bir şeyi (dayan, gəzmək və s.) təmsil edir. Svetofor istənilən vaxt yalnız bir vəziyyətdə olur və sadə qaydalar əsasında birindən digərinə keçir.

Bu, oyunlarda NPC-lərlə oxşar hekayədir. Məsələn, aşağıdakı vəziyyətləri olan bir mühafizəçi götürək:

  • Patrul.
  • Hücum.
  • Qaçmaq.

Və vəziyyətini dəyişdirmək üçün bu şərtlər:

  • Mühafizəçi düşməni görsə, hücuma keçir.
  • Mühafizəçi hücuma keçsə, lakin düşməni daha görmürsə, o, patrula qayıdır.
  • Mühafizəçi hücum etsə, amma ağır yaralansa, qaçır.

Siz həmçinin qəyyum vəziyyəti dəyişəni və müxtəlif yoxlamalarla if-ifadələrini yaza bilərsiniz: yaxınlıqda düşmən varmı, NPC-nin sağlamlıq səviyyəsi nədir və s. Gəlin daha bir neçə vəziyyət əlavə edək:

  • İşsizlik - patrullar arasında.
  • Axtarış - fərq edilən düşmən yox olduqda.
  • Kömək tapmaq - düşmən aşkar edildikdə, lakin təkbaşına döyüşmək üçün çox güclüdür.

Onların hər biri üçün seçim məhduddur - məsələn, mühafizəçi sağlamlığı zəifdirsə, gizli düşmən axtarmayacaq.

Axı, böyük bir "ifs" siyahısı var. , Bu " çox çətin ola bilər, buna görə də dövlətlər və dövlətlər arasında keçidləri yadda saxlamağa imkan verən bir metodu rəsmiləşdirməliyik. Bunun üçün biz bütün ştatları nəzərə alırıq və hər ştatın altında digər dövlətlərə bütün keçidləri, onlar üçün lazım olan şərtlərlə birlikdə siyahıya yazırıq.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu, dövlət keçid cədvəlidir - FSM-i təmsil etməyin hərtərəfli yolu. Gəlin bir diaqram çəkək və NPC davranışının necə dəyişdiyinə dair tam məlumat əldə edək.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Diaqram mövcud vəziyyətə əsaslanaraq bu agent üçün qərarların qəbul edilməsinin mahiyyətini əks etdirir. Bundan əlavə, hər bir ox, yanındakı şərt doğrudursa, vəziyyətlər arasında keçidi göstərir.

Hər yeniləmədə agentin cari vəziyyətini yoxlayırıq, keçidlərin siyahısına baxırıq və keçid şərtləri yerinə yetirilərsə, o, yeni vəziyyəti qəbul edir. Məsələn, hər bir kadr 10 saniyəlik taymerin vaxtının keçib-keçmədiyini yoxlayır və əgər belədirsə, mühafizəçi Boş rejimdən Patrulluğa keçir. Eyni şəkildə, Hücum edən dövlət agentin sağlamlığını yoxlayır - əgər aşağıdırsa, o zaman Qaçma vəziyyətinə keçir.

Bu, dövlətlər arasında keçidləri idarə edir, bəs dövlətlərin özləri ilə əlaqəli davranış haqqında nə demək olar? Müəyyən bir dövlət üçün faktiki davranışın həyata keçirilməsi baxımından, FSM-ə hərəkətlər təyin etdiyimiz adətən iki növ "çəngəl" var:

  • Cari vəziyyət üçün vaxtaşırı yerinə yetirdiyimiz tədbirlər.
  • Bir vəziyyətdən digərinə keçərkən etdiyimiz hərəkətlər.

Birinci növ üçün nümunələr. Patrul dövləti agenti hər kadrda patrul marşrutu boyunca hərəkət etdirəcək. Hücum edən dövlət hər çərçivədə hücuma başlamağa və ya bunun mümkün olduğu vəziyyətə keçid etməyə çalışacaq.

İkinci növ üçün keçidi nəzərdən keçirin "əgər düşmən görünürsə və düşmən çox güclüdürsə, Kömək tapmaq vəziyyətinə keçin. Agent kömək üçün hara müraciət edəcəyini seçməli və bu məlumatı saxlamalıdır ki, Kömək tapmaq vəziyyəti hara getməli olduğunu bilsin. Kömək tapıldıqdan sonra agent Hücum vəziyyətinə qayıdır. Bu anda o, müttəfiqə təhlükə barədə danışmaq istəyəcək, beləliklə, NotifyFriendOfThreat hərəkəti baş verə bilər.

Bir daha bu sistemə Hiss/Düşün/Hərəkət dövrünün obyektivindən baxa bilərik. Hiss keçid məntiqinin istifadə etdiyi verilənlərdə təcəssüm olunur. Düşünün - keçidlər hər bir ştatda mövcuddur. Akt isə dövlət daxilində və ya dövlətlər arasında keçid zamanı vaxtaşırı həyata keçirilən hərəkətlərlə həyata keçirilir.

Bəzən davamlı səsvermə şərtləri baha başa gələ bilər. Məsələn, hər bir agent düşmənləri görüb-görmədiyini müəyyən etmək və Patruldan Hücum vəziyyətinə keçib-keçmədiyini anlamaq üçün hər çərçivədə mürəkkəb hesablamalar apararsa, bu, çox CPU vaxtını alacaq.

Dünyanın vəziyyətində baş verən mühüm dəyişikliklər baş verdikləri kimi işlənəcək hadisələr kimi düşünülə bilər. FSM keçid şərtini yoxlamaq əvəzinə "agentim oyunçunu görə bilərmi?" Hər kadrda, daha az tez-tez yoxlamaq üçün ayrıca sistem konfiqurasiya edilə bilər (məsələn, saniyədə 5 dəfə). Nəticə isə çek keçdikdə Player Seeen buraxılmasıdır.

Bu, FSM-ə ötürülür, o, indi Player Seen hadisəsinin qəbul edilməsi şərtinə keçməli və müvafiq olaraq cavab verməlidir. Cavab vermədən əvvəl demək olar ki, görünməz bir gecikmə istisna olmaqla, nəticədə davranış eynidir. Amma Sense hissəsinin proqramın ayrıca hissəsinə ayrılması nəticəsində performans yaxşılaşıb.

İerarxik sonlu vəziyyət maşını

Bununla belə, böyük FSM-lərlə işləmək həmişə əlverişli deyil. MeleeAttacking və Ranged Attacking-i ayırmaq üçün hücum vəziyyətini genişləndirmək istəyiriksə, Hücum vəziyyətinə (cari və gələcək) gətirib çıxaran bütün digər dövlətlərdən keçidləri dəyişdirməli olacağıq.

Yəqin ki, nümunəmizdə çoxlu dublikat keçidlərin olduğunu görmüsünüz. Boş vəziyyətdə olan keçidlərin əksəriyyəti Patrul vəziyyətindəki keçidlərlə eynidir. Özümüzü təkrarlamasaq, xüsusən də oxşar vəziyyətləri əlavə etsək yaxşı olardı. Döyüş vəziyyətlərinə keçidlərin yalnız bir ümumi dəstinin mövcud olduğu "döyüşdən kənar" ümumi etiketi altında Idling və Patrolling qruplaşdırılması məntiqlidir. Əgər bu etiketi bir dövlət kimi düşünsək, o zaman Idling və Patrolling substate çevrilir. Yeni qeyri-döyüş alt dövləti üçün ayrıca keçid cədvəlindən istifadə nümunəsi:

Əsas dövlətlər:
Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Döyüşdən kənar status:
Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Və diaqram şəklində:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu, eyni sistemdir, lakin Idling və Patrolling daxil olmaqla yeni qeyri-döyüş vəziyyəti ilə. Tərkibində alt dövlətlər olan bir FSM (və bu substatlar, öz növbəsində, öz FSM-lərini ehtiva edir - və s. sizə lazım olan müddətə) olan hər bir vəziyyətlə, biz İerarxik Sonlu Dövlət Maşını və ya HFSM (ierarxik sonlu dövlət maşını) alırıq. Qeyri-döyüş vəziyyətini qruplaşdırmaqla bir dəstə lazımsız keçidi kəsdik. Biz eyni şeyi ümumi keçidləri olan istənilən yeni dövlətlər üçün edə bilərik. Məsələn, əgər gələcəkdə Hücum vəziyyətini Qarşıdurma Hücum və Raket Hücum vəziyyətlərinə genişləndirsək, onlar düşmənə olan məsafəyə və döyüş sursatı mövcudluğuna əsasən bir-biri arasında keçid edən substatlar olacaqlar. Nəticədə, kompleks davranışlar və alt davranışlar minimum təkrarlanan keçidlərlə təmsil oluna bilər.

Davranış ağacı

HFSM ilə davranışların mürəkkəb birləşmələri sadə şəkildə yaradılır. Ancaq bir az çətinlik var ki, keçid qaydaları şəklində qərar qəbulu mövcud vəziyyətlə sıx bağlıdır. Və bir çox oyunlarda məhz bu lazım olan şeydir. Və dövlət iyerarxiyasının diqqətli istifadəsi keçid təkrarlarının sayını azalda bilər. Amma bəzən hansı ştatda olmağınızdan asılı olmayaraq işləyən və ya demək olar ki, istənilən ştatda tətbiq olunan qaydalara ehtiyacınız olur. Məsələn, agentin sağlamlığı 25%-ə düşərsə, onun döyüşdə, boş və ya danışmasından asılı olmayaraq qaçmasını istəyəcəksiniz - bu şərti hər ştata əlavə etməli olacaqsınız. Dizayneriniz daha sonra aşağı sağlamlıq həddini 25% -dən 10% -ə dəyişdirmək istəsə, bu yenidən edilməli olacaq.

İdeal olaraq, bu vəziyyət yalnız bir yerdə dəyişiklik etmək və keçid şərtlərinə toxunmamaq üçün "hansı vəziyyətdə olmaq" barədə qərarların dövlətlərdən kənarda olduğu bir sistem tələb edir. Davranış ağacları burada görünür.

Onları həyata keçirməyin bir neçə yolu var, lakin mahiyyəti təxminən hamı üçün eynidir və qərar ağacına bənzəyir: alqoritm “kök” qovşağından başlayır və ağacda qərarlar və ya hərəkətləri təmsil edən qovşaqlar var. Baxmayaraq ki, bir neçə əsas fərq var:

  • Qovşaqlar indi üç dəyərdən birini qaytarır: Uğurlu (iş tamamlanıbsa), Uğursuz (başlamaq mümkün deyilsə) və ya Çalışır (hələ də işləyirsə və yekun nəticə yoxdursa).
  • İki alternativ arasında seçim etmək üçün artıq qərar qovşaqları yoxdur. Bunun əvəzinə, onlar bir uşaq qovşağı olan Dekorator qovşaqlarıdır. Uğur qazansalar, yeganə uşaq qovşağını icra edirlər.
  • Fəaliyyətləri yerinə yetirən qovşaqlar yerinə yetirilən hərəkətləri təmsil etmək üçün Running dəyəri qaytarır.

Bu kiçik qovşaqlar dəsti çoxlu sayda mürəkkəb davranışlar yaratmaq üçün birləşdirilə bilər. Əvvəlki nümunədəki HFSM qoruyucusunu davranış ağacı kimi təsəvvür edək:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu strukturla Boş/Patrul vəziyyətindən Hücum edən və ya hər hansı digər dövlətlərə açıq-aşkar keçid olmamalıdır. Əgər düşmən görünürsə və personajın sağlamlığı aşağıdırsa, əvvəllər hansı qovşaqdan - Patrul, Boş-boş, Hücum və ya hər hansı digərini yerinə yetirməsindən asılı olmayaraq, icra qaçan qovşaqda dayandırılacaq.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Davranış ağacları mürəkkəbdir - onları tərtib etməyin bir çox yolu var və dekoratorların və mürəkkəb qovşaqların düzgün birləşməsini tapmaq çətin ola bilər. Ağacın nə qədər tez-tez yoxlanılması ilə bağlı suallar da var - biz onun hər bir hissəsindən keçmək istəyirik, yoxsa yalnız şərtlərdən biri dəyişdikdə? Biz qovşaqlara aid vəziyyəti necə saxlayırıq - 10 saniyə ərzində Boş qaldığımızı necə bilirik və ya ardıcıllığı düzgün emal etmək üçün sonuncu dəfə hansı qovşaqların icra edildiyini necə bilirik?

Buna görə də bir çox tətbiqlər var. Məsələn, bəzi sistemlər dekorator qovşaqlarını daxili dekoratorlarla əvəz etmişdir. Dekorator şərtləri dəyişdikdə ağacı yenidən qiymətləndirir, qovşaqlara qoşulmağa kömək edir və dövri yeniləmələri təmin edir.

Kommunal əsaslı sistem

Bəzi oyunlar çox fərqli mexanikaya malikdir. Sadə və ümumi keçid qaydalarının bütün üstünlüklərini almaları arzu edilir, lakin tam davranış ağacı şəklində deyil. Aydın seçimlər toplusuna və ya mümkün hərəkətlər ağacına sahib olmaq əvəzinə, bütün hərəkətləri araşdırmaq və hazırda ən uyğununu seçmək daha asandır.

Utility əsaslı sistem bu işdə kömək edəcəkdir. Bu, agentin müxtəlif hərəkətlərə malik olduğu və hər birinin nisbi faydasına əsasən hansının yerinə yetiriləcəyini seçdiyi bir sistemdir. Faydalılıq agentin bu hərəkəti yerinə yetirməsinin nə qədər vacib və ya arzuolunan olduğunu göstərən ixtiyari ölçüdür.

Mövcud vəziyyətə və mühitə əsaslanan fəaliyyətin hesablanmış faydası, agent istənilən vaxt yoxlaya və ən uyğun digər vəziyyəti seçə bilər. Keçidlərin cari vəziyyət də daxil olmaqla hər bir potensial vəziyyət üçün qiymətləndirmə ilə müəyyən edildiyi hallar istisna olmaqla, bu, FSM-ə bənzəyir. Nəzərə alın ki, biz davam etmək üçün ən faydalı əməliyyatı seçirik (ya da artıq tamamlamışıqsa, qalırıq). Daha çox müxtəliflik üçün bu, kiçik bir siyahıdan balanslaşdırılmış, lakin təsadüfi seçim ola bilər.

Sistem ixtiyari bir sıra kommunal dəyərlər təyin edir - məsələn, 0-dan (tamamilə arzuolunmaz) 100-ə qədər (tamamilə arzu olunan). Hər bir hərəkət bu dəyərin hesablanmasına təsir edən bir sıra parametrlərə malikdir. Qəyyum nümunəmizə qayıdaq:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Fəaliyyətlər arasında keçidlər birmənalı deyil - hər hansı bir dövlət hər hansı digərini izləyə bilər. Fəaliyyət prioritetləri qaytarılmış yardım dəyərlərində tapılır. Əgər düşmən görünürsə və o düşmən güclüdürsə və personajın sağlamlığı aşağıdırsa, həm Fleeing, həm də FindingHelp yüksək sıfırdan fərqli dəyərləri qaytaracaq. Bu halda, FindingHelp həmişə daha yüksək olacaq. Eynilə, qeyri-döyüş fəaliyyətləri heç vaxt 50-dən çox qayıtmır, buna görə də onlar həmişə döyüşdən daha aşağı olacaqlar. Hərəkətlər yaratarkən və onların faydalılığını hesablayarkən bunu nəzərə almalısınız.

Bizim nümunəmizdə hərəkətlər ya sabit sabit dəyər, ya da iki sabit dəyərdən birini qaytarır. Daha real sistem, davamlı dəyərlər aralığından bir təxmin qaytaracaq. Məsələn, Fleeing hərəkəti agentin sağlamlığı aşağı olarsa, daha yüksək faydalılıq dəyərlərini qaytarır və düşmən çox güclüdürsə, Hücum hərəkəti daha aşağı faydalılıq dəyərlərini qaytarır. Bu səbəbdən, agentin düşməni məğlub etmək üçün kifayət qədər sağlamlığının olmadığını hiss etdiyi istənilən vəziyyətdə Qaçma hərəkəti Hücumdan üstün olur. Bu, hərəkətlərin istənilən sayda meyar əsasında prioritetləşdirilməsinə imkan verir və bu yanaşmanı davranış ağacı və ya FSM ilə müqayisədə daha çevik və dəyişkən edir.

Hər bir hərəkətin proqram hesablanması üçün bir çox şərtləri var. Onlar skript dilində və ya bir sıra riyazi düsturlar kimi yazıla bilər. Bir personajın gündəlik işini təqlid edən Sims əlavə hesablama qatını əlavə edir - agent kommunal xidmət reytinqlərinə təsir edən bir sıra "motivasiyalar" alır. Bir personaj acdırsa, zaman keçdikcə daha da ac olacaq və personaj bunu yerinə yetirənə qədər EatFood hərəkətinin faydalı dəyəri artacaq, aclıq səviyyəsini azaldacaq və EatFood dəyərini sıfıra qaytaracaq.

Reytinq sisteminə əsaslanan hərəkətlərin seçilməsi ideyası olduqca sadədir, ona görə də Utility əsaslı sistem, onların tam əvəzi kimi deyil, AI qərar qəbuletmə proseslərinin bir hissəsi kimi istifadə edilə bilər. Qərar ağacı iki uşaq qovşağının faydalılıq reytinqini tələb edə və daha yüksək olanı seçə bilər. Eynilə, davranış ağacında hansı uşağın icra ediləcəyinə qərar vermək üçün hərəkətlərin faydalılığını qiymətləndirmək üçün kompozit Utility node ola bilər.

Hərəkət və naviqasiya

Əvvəlki nümunələrdə sola və ya sağa hərəkət etdiyimiz platformamız və patrul edən və ya hücum edən mühafizəçimiz var idi. Bəs biz bir müddət ərzində agent hərəkətini necə dəqiq idarə edirik? Təyinat yerinə çatmaq düz bir xəttlə hərəkət etməkdən daha çətin olanda sürəti necə təyin edirik, maneələrdən necə qaçırıq və marşrutu necə planlaşdırırıq? Gəlin buna baxaq.

İdarəetmə

İlkin mərhələdə hər bir agentin nə qədər sürətlə və hansı istiqamətdə hərəkət etdiyini özündə əks etdirən bir sürət dəyəri olduğunu güman edəcəyik. O, saniyədə metr, saatda kilometr, saniyədə piksel və s. ilə ölçülə bilər. Hiss/Düşün/Hərəkət dövrəsini xatırladaraq təsəvvür edə bilərik ki, Düşünün hissəsi sürəti seçir və Akt hissəsi həmin sürəti agentə tətbiq edir. Tipik olaraq oyunlarda bu tapşırığı sizin üçün yerinə yetirən, hər bir obyektin sürət dəyərini öyrənən və onu tənzimləyən fizika sistemi var. Buna görə də, AI-ni bir vəzifə ilə tərk edə bilərsiniz - agentin hansı sürətə sahib olacağına qərar vermək. Əgər agentin harada olması lazım olduğunu bilirsinizsə, o zaman onu müəyyən edilmiş sürətlə düzgün istiqamətdə hərəkət etdirməlisiniz. Çox mənasız bir tənlik:

arzu olunan_səyahət = təyinat_mövqəti – agent_mövqe

2D dünyanı təsəvvür edin. Agent (-2,-2) nöqtəsindədir, təyinat yeri şimal-şərqdə (30, 20) nöqtəsindədir və agentin ora çatması üçün tələb olunan yol (32, 22). Tutaq ki, bu mövqelər metrlə ölçülür - əgər agentin sürətini saniyədə 5 metr götürsək, onda yerdəyişmə vektorumuzu miqyaslayacağıq və təxminən (4.12, 2.83) sürət alacağıq. Bu parametrlərlə agent təyinat yerinə demək olar ki, 8 saniyəyə çatacaqdı.

İstənilən vaxt dəyərləri yenidən hesablaya bilərsiniz. Agent hədəfin yarısına çatsaydı, hərəkət yarısı uzunluğunda olardı, lakin agentin maksimum sürəti 5 m/s olduğundan (bunu yuxarıda qərar verdik), sürət eyni olacaq. Bu, hərəkət edən hədəflər üçün də işləyir və agentə hərəkət edərkən kiçik dəyişikliklər etməyə imkan verir.

Ancaq biz daha çox variasiya istəyirik - məsələn, dayanmaqdan qaçmağa gedən bir personajı simulyasiya etmək üçün sürəti yavaş-yavaş artırmaq. Eyni şey, dayanmadan əvvəl sonunda edilə bilər. Bu xüsusiyyətlər sükan davranışları kimi tanınır və hər birinin özünəməxsus adları var: Axtarmaq, Qaçmaq, Gəlmək və s. İdeya ondan ibarətdir ki, agentin mövqeyini və cari sürətini təyinat nöqtəsi ilə müqayisə etmək əsasında agentin sürətinə sürətləndirici qüvvələr tətbiq oluna bilər. məqsədə doğru hərəkət etmək üçün müxtəlif üsullardan istifadə etmək.

Hər davranışın bir az fərqli məqsədi var. Axtarış və Gəliş agenti təyinat yerinə köçürməyin yollarıdır. Maneələrdən Qaçma və Ayırma, məqsədə gedən yolda maneələrdən qaçmaq üçün agentin hərəkətini tənzimləyir. Alignment və Cohesion agentləri birlikdə hərəkət edir. Bütün amilləri nəzərə alaraq tək yol vektoru yaratmaq üçün istənilən sayda müxtəlif sükan davranışı cəmlənə bilər. Divarlardan və digər agentlərdən uzaq durmaq üçün Gəliş, Ayrılma və Maneələrdən Qaçma davranışlarından istifadə edən agent. Bu yanaşma lazımsız detallar olmadan açıq yerlərdə yaxşı işləyir.

Daha çətin şərtlərdə, müxtəlif davranışların əlavə edilməsi daha pis işləyir - məsələn, agent Gəliş və Maneələrdən Qaçma arasında münaqişə səbəbindən divara ilişib qala bilər. Buna görə də, sadəcə bütün dəyərləri əlavə etməkdən daha mürəkkəb variantları nəzərdən keçirməlisiniz. Yol belədir: hər bir davranışın nəticələrini əlavə etmək əvəzinə, müxtəlif istiqamətlərdə hərəkəti nəzərdən keçirə və ən yaxşı variantı seçə bilərsiniz.

Bununla belə, çıxılmaz nöqtələr və hansı yolla getmək barədə seçimlər olan mürəkkəb bir mühitdə bizə daha təkmil bir şey lazımdır.

Bir yol tapmaq

Sükan davranışları açıq sahədə (futbol meydançası və ya arena) sadə hərəkət üçün əladır, burada A-dan B-yə düz yoldur, maneələr ətrafında yalnız kiçik dönmələrlə. Mürəkkəb marşrutlar üçün bizə dünyanı araşdırmağın və ondan keçən marşruta qərar vermənin bir yolu olan yol axtarışına ehtiyacımız var.

Ən sadəsi agentin yanındakı hər kvadrata bir grid tətbiq etmək və onlardan hansının hərəkətinə icazə verildiyini qiymətləndirməkdir. Əgər onlardan biri təyinatdırsa, başlanğıca çatana qədər hər kvadratdan əvvəlki birinə gedən marşrutu izləyin. Bu marşrutdur. Əks halda, təyinatınızı tapana və ya kvadratlar tükənənə qədər (mümkün marşrut yoxdur deməkdir) yaxınlıqdakı digər kvadratlarla prosesi təkrarlayın. Bu, rəsmi olaraq Genişlik-Birinci Axtarış və ya BFS (en-ilk axtarış alqoritmi) kimi tanınır. Hər addımda hər tərəfə baxır (deməli, genişlik, "en"). Axtarış sahəsi istənilən yerə çatana qədər hərəkət edən dalğa cəbhəsi kimidir - axtarış məkanı son nöqtə daxil edilənə qədər hər addımda genişlənir, bundan sonra onu başlanğıca qədər izləmək olar.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Nəticədə, istədiyiniz marşrutun tərtib olunduğu kvadratların siyahısını alacaqsınız. Bu yoldur (deməli, yol tapma) - agentin təyinatı izləyərkən ziyarət edəcəyi yerlərin siyahısı.

Dünyadakı hər kvadratın mövqeyini bildiyimizi nəzərə alsaq, yol boyu hərəkət etmək üçün sükan davranışlarından istifadə edə bilərik - 1-ci qovşaqdan 2-ci qovşaq, sonra 2-ci qovşaqdan 3-cü qovşaq və s. Ən sadə seçim növbəti kvadratın mərkəzinə doğru getməkdir, lakin daha yaxşı seçim, cari kvadratla növbəti kvadrat arasındakı kənarın ortasında dayanmaqdır. Bu səbəbdən agent kəskin dönüşlərdə küncləri kəsə biləcək.

BFS alqoritminin çatışmazlıqları da var - o, "düzgün" istiqamətdə olduğu kimi "yanlış" istiqamətdə də bir çox kvadratı araşdırır. Burada A* (A ulduz) adlı daha mürəkkəb alqoritm işə düşür. O, eyni şəkildə işləyir, lakin qonşu kvadratları kor-koranə araşdırmaq əvəzinə (sonra qonşuların qonşuları, sonra qonşuların qonşularının qonşuları və s.) qovşaqları siyahıya toplayır və onları sıralayır ki, növbəti tədqiq edilən düyün həmişə ən qısa yola aparan biri. Qovşaqlar iki şeyi nəzərə alan evristikaya əsasən sıralanır - istədiyiniz kvadrata hipotetik marşrutun "qiyməti" (hər hansı səyahət xərcləri daxil olmaqla) və bu kvadratın təyinat yerindən nə qədər uzaq olduğunun təxmini (axtarışda qərəzli yanaşma) düzgün istiqamət).

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu nümunə göstərir ki, agent hər dəfə bir kvadratı araşdırır, hər dəfə ən perspektivli olan qonşunu seçir. Yaranan yol BFS ilə eynidir, lakin prosesdə daha az kvadrat nəzərə alınıb - bu, oyun performansına böyük təsir göstərir.

Şəbəkəsiz hərəkət

Lakin oyunların əksəriyyəti bir şəbəkə üzərində qurulmayıb və realizmi qurban vermədən bunu etmək çox vaxt mümkün deyil. Kompromislər lazımdır. Kvadratların ölçüsü nə olmalıdır? Çox böyükdür və onlar kiçik dəhlizləri və ya döngələri düzgün təmsil edə bilməyəcəklər, çox kiçik və axtarmaq üçün çoxlu kvadratlar olacaq, bu da sonda çox vaxt aparacaq.

Anlamaq lazım olan ilk şey odur ki, mesh bizə bağlı qovşaqların qrafikini verir. A* və BFS alqoritmləri əslində qrafiklər üzərində işləyir və şəbəkəmizə heç əhəmiyyət vermir. Biz qovşaqları oyun dünyasının istənilən yerinə qoya bilərdik: hər hansı iki bağlı qovşaq arasında, həmçinin başlanğıc və son nöqtələr və ən azı qovşaqlardan biri arasında əlaqə olduğu müddətcə, alqoritm əvvəlki kimi işləyəcək. Buna tez-tez yol nöqtəsi sistemi deyilir, çünki hər bir qovşaq dünyada istənilən sayda hipotetik yolun bir hissəsi ola biləcək əhəmiyyətli bir mövqeni təmsil edir.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi
Misal 1: hər kvadratda bir düyün. Axtarış agentin yerləşdiyi qovşaqdan başlayır və istədiyiniz kvadratın qovşağında bitir.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi
Misal 2: Daha kiçik qovşaqlar dəsti (yol nöqtələri). Axtarış agentin meydanından başlayır, lazımi sayda qovşaqlardan keçir və sonra təyinat yerinə qədər davam edir.

Bu, tamamilə çevik və güclü bir sistemdir. Lakin keçid nöqtəsini hara və necə yerləşdirməyə qərar verərkən müəyyən diqqət tələb olunur, əks halda agentlər sadəcə olaraq ən yaxın nöqtəni görməyə və yola başlaya bilməyəcəklər. Dünyanın həndəsəsinə əsaslanaraq avtomatik olaraq yol nöqtələrini yerləşdirə bilsək, daha asan olardı.

Naviqasiya mesh və ya navmesh (naviqasiya mesh) burada görünür. Bu, adətən dünyanın həndəsəsi üzərində örtülmüş üçbucaqların 2D şəbəkəsidir - agentin gəzməsinə icazə verilən hər yerdə. Meshdəki üçbucaqların hər biri qrafikdə bir qovşaq olur və qrafikdə bitişik qovşaqlara çevrilən üçə qədər bitişik üçbucağa malikdir.

Bu şəkil Unity mühərrikindən bir nümunədir - o, dünyadakı həndəsəni təhlil etdi və navmesh yaratdı (açıq mavi ekran görüntüsündə). Navmeshdəki hər bir çoxbucaqlı bir agentin dayana və ya bir çoxbucaqdan digərinə keçə biləcəyi bir sahədir. Bu nümunədə çoxbucaqlılar yerləşdikləri mərtəbələrdən daha kiçikdir - bu, nominal mövqeyindən kənara çıxacaq agentin ölçüsünü nəzərə almaq üçün edilir.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Biz yenidən A* alqoritmindən istifadə edərək bu şəbəkə vasitəsilə marşrutu axtara bilərik. Bu, bizə bütün həndəsələri nəzərə alan və lazımsız qovşaqların və keçid nöqtələrinin yaradılmasını tələb etməyən dünyada demək olar ki, mükəmməl bir marşrut verəcəkdir.

Yol tapmaq məqalənin bir bölməsinin kifayət etmədiyi çox geniş bir mövzudur. Əgər onu daha ətraflı öyrənmək istəyirsinizsə, bu kömək edəcəkdir Amit Patel veb saytı.

Planlaşdırma

Yol tapmaqla öyrəndik ki, bəzən sadəcə bir istiqamət seçmək və hərəkət etmək kifayət etmir - istədiyimiz yerə çatmaq üçün marşrut seçib bir neçə döngə etməliyik. Bu fikri ümumiləşdirə bilərik: məqsədə çatmaq yalnız növbəti addım deyil, bəzən birincinin nə olduğunu tapmaq üçün bir neçə addım irəli baxmaq lazım olan bütöv bir ardıcıllıqdır. Buna planlaşdırma deyilir. Pathfinding planlaşdırmanın bir neçə uzantısından biri kimi düşünülə bilər. Hiss/Düşün/Hərəkət dövrümüz baxımından bu, Düşüncə hissəsinin gələcək üçün çoxlu Akt hissələrini planlaşdırdığı yerdir.

Magic: The Gathering stolüstü oyununun nümunəsinə baxaq. Əvvəlcə əlimizdə aşağıdakı kartlar dəsti ilə gedirik:

  • Bataqlıq - 1 qara mana (torpaq kartı) verir.
  • Meşə - 1 yaşıl mana (torpaq kartı) verir.
  • Qaçaq Sehrbaz - Çağırmaq üçün 1 mavi mana tələb olunur.
  • Elvish Mystic - Çağırmaq üçün 1 yaşıl mana tələb olunur.

Daha asanlaşdırmaq üçün qalan üç karta məhəl qoymuruq. Qaydalara görə, oyunçuya hər növbədə 1 torpaq kartı oynamağa icazə verilir, o, bu karta "toxunaraq" ondan mana çıxara və sonra mana miqdarına uyğun sehrlər (o cümlədən məxluq çağıra bilər) edə bilər. Bu vəziyyətdə, insan oyunçu Forest oynamağı, 1 yaşıl manaya toxunmağı və sonra Elvish Mystic'i çağırmağı bilir. Bəs oyun AI bunu necə anlaya bilər?

Asan planlaşdırma

Önəmsiz yanaşma, uyğun olanlar qalmayana qədər hər bir hərəkəti növbə ilə sınamaqdır. Kartlara baxaraq, AI Swampın nə oynaya biləcəyini görür. Və o oynayır. Bu növbəsində başqa hərəkətlər qalıbmı? O, nə Elviş Mistik, nə də Qaçaq Sehrbazı çağıra bilməz, çünki onları çağırmaq üçün müvafiq olaraq yaşıl və mavi mana tələb olunur, Swamp isə yalnız qara mana verir. Və o, artıq Forest oynaya bilməyəcək, çünki o, artıq Swamp oynayıb. Beləliklə, oyun AI qaydalara əməl etdi, lakin bunu zəif etdi. Təkmilləşdirmək olar.

Planlaşdırma oyunu istədiyiniz vəziyyətə gətirən hərəkətlərin siyahısını tapa bilər. Yoldakı hər kvadratın qonşuları (yol tapmaqda) olduğu kimi, plandakı hər bir hərəkətin də qonşuları və ya davamçıları var. İstədiyimiz vəziyyətə çatana qədər bu hərəkətləri və sonrakı hərəkətləri axtara bilərik.

Nümunəmizdə istənilən nəticə “mümkünsə bir məxluqu çağırmaqdır”. Döngənin əvvəlində oyun qaydaları ilə icazə verilən yalnız iki mümkün hərəkəti görürük:

1. Swamp oynayın (nəticə: oyunda bataqlıq)
2. Meşə oynayın (nəticə: oyunda meşə)

Görülən hər bir hərəkət oyun qaydalarından asılı olaraq növbəti hərəkətlərə gətirib çıxara və digərlərini bağlaya bilər. Təsəvvür edin ki, biz Swamp oynadıq - bu, növbəti addım kimi Swamp'ı siləcək (biz onu artıq oynadıq) və bu, həm də Meşəni siləcək (çünki qaydalara görə hər növbədə bir torpaq kartı oynaya bilərsiniz). Bundan sonra, AI növbəti addım olaraq 1 qara mana əldə edir, çünki başqa seçim yoxdur. O, irəli getsə və Tap the Swamp seçsə, o, 1 vahid qara mana alacaq və bununla heç nə edə bilməyəcək.

1. Swamp oynayın (nəticə: oyunda bataqlıq)
1.1 “Tap” Bataqlığı (nəticə: Bataqlıq “tapıldı”, +1 vahid qara mana)
Heç bir əməliyyat yoxdur - END
2. Meşə oynayın (nəticə: oyunda meşə)

Hərəkətlərin siyahısı qısa idi, biz çıxılmaz vəziyyətə düşdük. Növbəti addım üçün prosesi təkrar edirik. Meşə oynayırıq, "1 yaşıl mana əldə et" aksiyasını açırıq, bu da öz növbəsində üçüncü aksiyanı açacaq - Elvish Mistikini çağırın.

1. Swamp oynayın (nəticə: oyunda bataqlıq)
1.1 “Tap” Bataqlığı (nəticə: Bataqlıq “tapıldı”, +1 vahid qara mana)
Heç bir əməliyyat yoxdur - END
2. Meşə oynayın (nəticə: oyunda meşə)
2.1 "Tap" Meşəsi (nəticə: Meşə "vuruldu", +1 vahid yaşıl mana)
2.1.1 Elvish Mistikini çağırın (nəticə: Elvish Mistik oyunda, -1 yaşıl mana)
Heç bir əməliyyat yoxdur - END

Nəhayət, bütün mümkün hərəkətləri araşdırdıq və bir məxluqu çağıran bir plan tapdıq.

Bu çox sadələşdirilmiş bir nümunədir. Bəzi meyarlara cavab verən hər hansı plandan daha çox, mümkün olan ən yaxşı planı seçmək məsləhətdir. Potensial planları onların həyata keçirilməsinin nəticəsi və ya ümumi faydası əsasında qiymətləndirmək ümumiyyətlə mümkündür. Torpaq kartı oynadığınız üçün özünüzə 1 xal və məxluqu çağırdığınız üçün 3 xal toplaya bilərsiniz. Swamp oynamaq 1 ballıq plan olardı. Və Meşə → Meşəyə vurun → Elvish Mistikini çağırmaq dərhal 4 xal verəcəkdir.

Magic: The Gathering-də planlaşdırma belə işləyir, lakin eyni məntiq digər vəziyyətlərdə də tətbiq olunur. Məsələn, şahmatda yepiskopun hərəkət etməsi üçün yer açmaq üçün piyadanın hərəkət etdirilməsi. Və ya belə XCOM-da təhlükəsiz şəkildə çəkmək üçün divarın arxasına keçin. Ümumiyyətlə, fikri başa düşürsən.

Təkmilləşdirilmiş planlaşdırma

Bəzən hər bir mümkün variantı nəzərdən keçirmək üçün çoxlu potensial fəaliyyətlər var. Magic: The Gathering nümunəsinə qayıdaq: tutaq ki, oyunda və əlinizdə bir neçə torpaq və məxluq kartı var - mümkün hərəkət birləşmələrinin sayı onlarla ola bilər. Problemin bir neçə həlli var.

Birinci üsul geriyə zəncirləmədir. Bütün kombinasiyaları sınamaq əvəzinə, yekun nəticə ilə başlamaq və birbaşa marşrut tapmağa çalışmaq daha yaxşıdır. Ağacın kökündən müəyyən bir yarpağa keçmək əvəzinə, əks istiqamətdə - yarpaqdan kökə doğru hərəkət edirik. Bu üsul daha asan və sürətlidir.

Düşmənin 1 sağlamlığı varsa, "1 və ya daha çox ziyan vurma" planını tapa bilərsiniz. Buna nail olmaq üçün bir sıra şərtlər yerinə yetirilməlidir:

1. Zərər sehrlə ola bilər - əlində olmalıdır.
2. Cadu etmək üçün mana lazımdır.
3. Mana qazanmaq üçün torpaq kartı oynamaq lazımdır.
4. Torpaq kartını oynamaq üçün əlinizdə olmalıdır.

Başqa bir yol ən yaxşı ilk axtarışdır. Bütün yolları sınamaq əvəzinə, ən uyğununu seçirik. Çox vaxt bu üsul lazımsız axtarış xərcləri olmadan optimal plan verir. A* ən yaxşı ilk axtarışın formasıdır - ən perspektivli marşrutları əvvəldən araşdıraraq, digər variantları yoxlamadan artıq ən yaxşı yolu tapa bilər.

Maraqlı və getdikcə populyarlaşan ən yaxşı ilk axtarış variantı Monte Karlo Ağacında Axtarışdır. Hər bir sonrakı hərəkəti seçərkən hansı planların digərlərindən daha yaxşı olduğunu təxmin etmək əvəzinə, alqoritm sona çatana qədər (planın qələbə və ya məğlubiyyətlə nəticələndiyi zaman) hər addımda təsadüfi varislər seçir. Son nəticə daha sonra əvvəlki variantların çəkisini artırmaq və ya azaltmaq üçün istifadə olunur. Bu prosesi ard-arda bir neçə dəfə təkrarlamaqla, alqoritm vəziyyət dəyişsə belə (düşmən oyunçuya müdaxilə etmək üçün hərəkətə keçsə) ən yaxşı növbəti hərəkətin nə olduğunu yaxşı qiymətləndirir.

Oyunlarda planlaşdırma ilə bağlı heç bir hekayə Məqsəd Yönlü Fəaliyyət Planlaması və ya GOAP (məqsəd yönümlü fəaliyyət planlaması) olmadan tamamlana bilməz. Bu, geniş istifadə olunan və müzakirə edilən bir üsuldur, lakin bir neçə fərqləndirici detaldan başqa, əslində əvvəllər haqqında danışdığımız geriyə zəncirləmə üsuludur. Məqsəd "oyunçunu məhv etmək" idisə və oyunçu örtünün arxasındadırsa, plan belə ola bilər: qumbara ilə məhv et → onu əldə et → at.

Adətən hər birinin öz prioriteti olan bir neçə məqsəd var. Ən yüksək prioritet məqsəd tamamlana bilmirsə (heç bir hərəkət kombinasiyası oyunçu görünmədiyi üçün "oyunçu öldürmək" planı yaratmır), AI daha aşağı prioritet məqsədlərə qayıdacaq.

Təlim və uyğunlaşma

Artıq demişdik ki, AI oyunu adətən maşın öyrənməsindən istifadə etmir, çünki o, real vaxtda agentləri idarə etmək üçün uyğun deyil. Amma bu o demək deyil ki, siz bu sahədən nəsə borc ala bilməzsiniz. Biz atıcıda nəsə öyrənəcəyimiz rəqib istəyirik. Məsələn, xəritədə ən yaxşı mövqelər haqqında məlumat əldə edin. Və ya döyüş oyununda oyunçunun tez-tez istifadə etdiyi kombinasiya hərəkətlərinə mane olan və onu başqalarından istifadə etməyə həvəsləndirən rəqib. Beləliklə, maşın öyrənməsi belə vəziyyətlərdə olduqca faydalı ola bilər.

Statistika və Ehtimallar

Mürəkkəb nümunələrə keçməzdən əvvəl gəlin bir neçə sadə ölçmə apararaq və onlardan qərar qəbul etmək üçün istifadə etməklə nə qədər irəli gedə biləcəyimizi görək. Məsələn, real vaxt strategiyası - oyunçunun oyunun ilk dəqiqələrində hücuma keçə biləcəyini və buna qarşı hansı müdafiəni hazırlayacağını necə müəyyənləşdirə bilərik? Gələcək reaksiyaların nə ola biləcəyini anlamaq üçün oyunçunun keçmiş təcrübələrini öyrənə bilərik. Başlamaq üçün, bizdə belə xam məlumat yoxdur, lakin biz onları toplaya bilərik - süni intellekt hər dəfə insana qarşı oynayanda ilk hücumun vaxtını qeyd edə bilər. Bir neçə seansdan sonra oyunçunun gələcəkdə hücuma keçməsi üçün lazım olan vaxtın ortalamasını alacağıq.

Orta dəyərlərlə bağlı bir problem də var: əgər oyunçu 20 dəfə tələssə və 20 dəfə yavaş-yavaş oynasa, tələb olunan dəyərlər ortada bir yerdə olacaq və bu, bizə faydalı bir şey verməyəcək. Bir həll giriş məlumatlarını məhdudlaşdırmaqdır - son 20 ədəd nəzərə alına bilər.

Oxşar yanaşma, oyunçunun keçmiş üstünlüklərinin gələcəkdə də eyni olacağını fərz etməklə müəyyən hərəkətlərin ehtimalını qiymətləndirərkən istifadə olunur. Əgər oyunçu bizə beş dəfə odlu topla, iki dəfə ildırımla, bir dəfə də döyüşlə hücum edirsə, o, atəş topuna üstünlük verdiyi açıq-aydın görünür. Gəlin ekstrapolyasiya edək və müxtəlif silahlardan istifadə ehtimalını görək: atəş topu=62,5%, ildırım=25% və döyüş=12,5%. Oyunumuz AI özünü yanğından qorumağa hazırlaşmalıdır.

Başqa bir maraqlı üsul, böyük miqdarda giriş məlumatlarını öyrənmək və AI-nin istədiyiniz şəkildə reaksiya verməsi üçün vəziyyəti təsnif etmək üçün Naive Bayes Təsnifatından istifadə etməkdir. Bayes klassifikatorları ən yaxşı e-poçt spam filtrlərində istifadəsi ilə tanınır. Orada onlar sözləri araşdırır, həmin sözlərin əvvəllər göründüyü yerlə (spamda və ya yox) müqayisə edir və daxil olan e-poçtlar haqqında nəticə çıxarırlar. Eyni şeyi hətta daha az girişlə də edə bilərik. Süni intellektin gördüyü bütün faydalı məlumatlara (məsələn, düşmən bölmələrinin yaradıldığı və ya hansı sehrlərdən istifadə etdikləri və ya hansı texnologiyaları araşdırdıqları) və yekun nəticəyə (müharibə və ya sülh, tələskənlik və ya müdafiə və s.) - istədiyiniz AI davranışını seçəcəyik.

Bütün bu təlim üsulları kifayətdir, lakin onlardan test məlumatlarına əsaslanaraq istifadə etmək məsləhətdir. Süni intellekt oyunçularınızın istifadə etdiyi müxtəlif strategiyalara uyğunlaşmağı öyrənəcək. Buraxıldıqdan sonra oyunçuya uyğunlaşan AI çox proqnozlaşdırıla bilər və ya məğlub etmək çox çətin ola bilər.

Dəyər əsaslı uyğunlaşma

Oyun dünyamızın məzmununu və qaydaları nəzərə alaraq, biz sadəcə daxil edilmiş məlumatlardan istifadə etmək əvəzinə, qərar qəbul etməyə təsir edən dəyərlər toplusunu dəyişə bilərik. Bunu edirik:

  • Qoy AI dünyanın vəziyyəti və oyun zamanı əsas hadisələr haqqında məlumat toplasın (yuxarıda olduğu kimi).
  • Bu məlumatlara əsaslanaraq bir neçə vacib dəyəri dəyişdirək.
  • Biz qərarlarımızı bu dəyərlərin işlənməsi və ya qiymətləndirilməsi əsasında həyata keçiririk.

Məsələn, agentin birinci şəxs atıcı xəritəsində seçmək üçün bir neçə otağı var. Hər otağın özünəməxsus dəyəri var ki, bu da ziyarət etməyin nə qədər arzuolunan olduğunu müəyyən edir. Süni intellekt, dəyər əsasında hansı otağa getməyi təsadüfi seçir. Daha sonra agent hansı otaqda öldürüldüyünü xatırlayır və onun dəyərini azaldır (ora qayıtma ehtimalı). Eyni şəkildə tərs vəziyyət üçün - agent bir çox rəqibi məhv edərsə, o zaman otağın dəyəri artır.

Markov modeli

Toplanmış məlumatlardan proqnoz vermək üçün istifadə etsək nə olacaq? Müəyyən bir müddət ərzində bir oyunçu gördüyümüz hər otağı xatırlasaq, oyunçunun hansı otağa gedə biləcəyini proqnozlaşdıracağıq. Otaqlar (dəyərlər) üzrə oyunçunun hərəkətlərini izləmək və qeyd etməklə biz onları proqnozlaşdıra bilərik.

Üç otağı götürək: qırmızı, yaşıl və mavi. Həm də oyun seansını izləyərkən qeyd etdiyimiz müşahidələr:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Hər otaqdakı müşahidələrin sayı demək olar ki, bərabərdir - biz hələ də pusqu üçün harada yaxşı yer düzəltəcəyimizi bilmirik. Statistikanın toplanması həm də xəritədə bərabər şəkildə görünən oyunçuların yenidən doğulması ilə çətinləşir. Ancaq xəritədə göründükdən sonra daxil olduqları növbəti otaq haqqında məlumatlar artıq faydalıdır.

Görünür ki, yaşıl otaq oyunçulara uyğun gəlir - insanların çoxu qırmızı otaqdan ora köçür, onların 50%-i orada daha da qalır. Mavi otaq, əksinə, populyar deyil, demək olar ki, heç kim ona getmir və getsələr, çox qalmırlar.

Lakin məlumatlar bizə daha vacib bir şeyi deyir - oyunçu mavi otaqda olduqda, onu gördüyümüz növbəti otaq yaşıl deyil, qırmızı olacaq. Yaşıl otaq qırmızı otaqdan daha populyar olsa da, oyunçu mavi otaqda olarsa vəziyyət dəyişir. Növbəti vəziyyət (yəni oyunçunun gedəcəyi otaq) əvvəlki vəziyyətdən (yəni, oyunçunun hazırda olduğu otaqdan) asılıdır. Asılılıqları tədqiq etdiyimiz üçün müşahidələri müstəqil saymaqdansa, daha dəqiq proqnozlar verəcəyik.

Keçmiş vəziyyətdən alınan məlumatlar əsasında gələcək vəziyyəti proqnozlaşdırmaq Markov modeli adlanır və belə nümunələr (otaqlarla) Markov zəncirləri adlanır. Nümunələr ardıcıl vəziyyətlər arasında dəyişiklik ehtimalını təmsil etdiyindən, onlar vizual olaraq hər keçid ətrafında bir ehtimalla FSM kimi göstərilir. Əvvəllər biz agentin olduğu davranış vəziyyətini təmsil etmək üçün FSM-dən istifadə edirdik, lakin bu anlayış agentlə əlaqəli olub-olmamasından asılı olmayaraq istənilən vəziyyətə şamil edilir. Bu halda, dövlətlər agentin yerləşdiyi otağı təmsil edir:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu, AI-yə növbəti vəziyyəti proqnozlaşdırmaq üçün bəzi qabiliyyətlər verən vəziyyət dəyişikliklərinin nisbi ehtimalını təmsil etməyin sadə bir yoludur. Bir neçə addımı qabaqcadan təxmin edə bilərsiniz.

Əgər oyunçu yaşıl otaqdadırsa, növbəti dəfə müşahidə olunanda onun orada qalma ehtimalı 50% olur. Bəs ondan sonra onun hələ də orada qalması şansı nə qədərdir? Oyunçunun iki müşahidədən sonra yaşıl otaqda qalma şansı nəinki, həm də onun çıxıb geri qayıtması şansı var. Yeni məlumatları nəzərə alaraq yeni cədvəl:

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi

Bu göstərir ki, oyunçunu iki müşahidədən sonra yaşıl otaqda görmək şansı 51% - 21% -ə bərabər olacaq ki, o, qırmızı otaqdan olacaq, 5% -i oyunçu onların arasındakı mavi otağa baş çəkəcək və 25% oyunçu yaşıl otağı tərk etməyəcək.

Cədvəl sadəcə vizual bir vasitədir - prosedur yalnız hər addımda ehtimalları çoxaltmağı tələb edir. Bu o deməkdir ki, bir xəbərdarlıqla gələcəyə uzaqdan baxa bilərsiniz: biz hesab edirik ki, otağa daxil olmaq şansı bütünlüklə indiki otaqdan asılıdır. Buna Markov Mülkiyyəti deyilir - gələcək vəziyyət yalnız indiki zamandan asılıdır. Amma bu yüz faiz dəqiq deyil. Oyunçular qərarlarını digər amillərdən asılı olaraq dəyişə bilər: sağlamlıq səviyyəsi və ya sursat miqdarı. Bu dəyərləri qeyd etmədiyimiz üçün proqnozlarımız daha az dəqiq olacaq.

N-qram

Döyüş oyunu nümunəsi və oyunçunun kombo hərəkətlərini proqnozlaşdırmaq haqqında nə demək olar? Eyni! Ancaq bir vəziyyət və ya hadisə yerinə, birləşmiş zərbəni təşkil edən bütün ardıcıllığı araşdıracağıq.

Bunun bir yolu hər bir girişi (məsələn, Kick, Punch və ya Blok kimi) buferdə saxlamaq və bütün buferi hadisə kimi yazmaqdır. Beləliklə, oyunçu SuperDeathFist hücumundan istifadə etmək üçün dəfələrlə Kick, Kick, Punch düyməsini sıxır, AI sistemi bütün girişləri buferdə saxlayır və hər addımda istifadə olunan son üçü xatırlayır.

Oyun süni intellektini necə yaratmaq olar: yeni başlayanlar üçün bələdçi
(Qalın yazılmış sətirlər oyunçu SuperDeathFist hücumuna başladığı zamandır.)

Oyunçu vuruşu, ardınca başqa bir vuruşu seçdikdə süni intellekt bütün variantları görəcək və sonra növbəti girişin həmişə Punch olduğunu görəcək. Bu, agentə SuperDeathFist-in kombo hərəkətini proqnozlaşdırmağa və mümkünsə onu bloklamağa imkan verəcək.

Bu hadisələr ardıcıllığı N-qramlar adlanır, burada N saxlanılan elementlərin sayıdır. Əvvəlki nümunədə bu, 3 qramlıq (triqram) idi, yəni: ilk iki giriş üçüncüyü proqnozlaşdırmaq üçün istifadə olunur. Müvafiq olaraq, 5 qramda ilk dörd giriş beşinci və s. proqnozlaşdırır.

Dizayner N-qram ölçüsünü diqqətlə seçməlidir. Daha kiçik N daha az yaddaş tələb edir, həm də daha az tarix saxlayır. Məsələn, 2 qramlıq (biqram) Kick, Kick və ya Kick, Punch qeyd edəcək, lakin Kick, Kick, Punch-u saxlaya bilməyəcək, beləliklə, AI SuperDeathFist kombinasiyasına cavab verməyəcək.

Digər tərəfdən, daha böyük rəqəmlər daha çox yaddaş tələb edir və AI-ni öyrətmək daha çətin olacaq, çünki daha çox mümkün variant olacaq. Kick, Punch və ya Block üçün üç mümkün girişiniz olsaydı və biz 10 qramdan istifadə etdiksə, bu, təxminən 60 min fərqli seçim olardı.

Biqram modeli sadə Markov zənciridir - hər bir keçmiş vəziyyət/cari vəziyyət cütü biqramdır və siz birinciyə əsasən ikinci vəziyyəti proqnozlaşdıra bilərsiniz. 3 qram və daha böyük N-qramları Markov zəncirləri kimi də düşünmək olar, burada bütün elementlər (N-qramda sonuncudan başqa) birlikdə birinci vəziyyəti, sonuncu element isə ikincini təşkil edir. Döyüş oyunu nümunəsi Kick and Punch vəziyyətindən Kick and Punch vəziyyətinə keçid şansını göstərir. Çoxsaylı giriş tarixçəsi qeydlərini vahid vahid kimi nəzərdən keçirməklə, biz mahiyyətcə daxiletmə ardıcıllığını bütün dövlətin bir hissəsinə çeviririk. Bu bizə Markov xassəsini verir ki, bu da bizə Markov zəncirlərindən istifadə edərək növbəti girişi proqnozlaşdırmaq və bundan sonra hansı kombinasiya hərəkətinin olacağını təxmin etmək imkanı verir.

Nəticə

Biz süni intellektin inkişafında ən çox yayılmış vasitələr və yanaşmalar haqqında danışdıq. Onların istifadə edilməli olduğu və xüsusilə faydalı olduğu vəziyyətlərə də baxdıq.

Bu, AI oyununun əsaslarını başa düşmək üçün kifayət olmalıdır. Ancaq təbii ki, bunlar bütün üsullar deyil. Daha az populyar, lakin daha az təsirli olmayanlara aşağıdakılar daxildir:

  • təpəyə qalxma, gradient eniş və genetik alqoritmlər daxil olmaqla optimallaşdırma alqoritmləri
  • rəqib axtarış/planlaşdırma alqoritmləri (minimax və alfa-beta budama)
  • təsnifat üsulları (perseptronlar, neyron şəbəkələri və dəstək vektor maşınları)
  • agentlərin qavrayışını və yaddaşını emal edən sistemlər
  • AI-yə memarlıq yanaşmaları (hibrid sistemlər, alt çoxluq arxitekturaları və AI sistemlərinin üst-üstə düşməsinin digər yolları)
  • animasiya vasitələri (planlaşdırma və hərəkət koordinasiyası)
  • performans amilləri (təfərrüat səviyyəsi, istənilən vaxt və vaxt bölgüsü alqoritmləri)

Mövzu ilə bağlı onlayn resurslar:

1. GameDev.net var AI üzrə məqalələr və dərsliklər olan bölməфорум.
2. AiGameDev.com oyunun süni intellektinin inkişafı ilə bağlı geniş mövzularda çoxlu təqdimatlar və məqalələr ehtiva edir.
3. GDC Vault GDC AI Sammitindən mövzular daxildir, onların çoxu pulsuzdur.
4. Faydalı materiallara da saytda rast gəlmək olar AI Oyun Proqramçıları Gildiyası.
5. AI tədqiqatçısı və oyun tərtibatçısı Tommy Thompson YouTube-da videolar hazırlayır AI və Oyunlar kommersiya oyunlarında AI-nin izahı və öyrənilməsi ilə.

Mövzuya aid kitablar:

1. Game AI Pro kitab seriyası spesifik xüsusiyyətlərin necə həyata keçiriləcəyini və ya konkret problemlərin necə həll olunacağını izah edən qısa məqalələr toplusudur.

Game AI Pro: Oyun AI Peşəkarlarının Toplanmış Hikməti
Game AI Pro 2: Oyun AI Peşəkarlarının Toplanmış Hikməti
Game AI Pro 3: Oyun AI Peşəkarlarının Toplanmış Hikməti

2. AI Game Programming Wisdom seriyası Game AI Pro seriyasının sələfidir. O, köhnə üsulları ehtiva edir, lakin demək olar ki, hamısı bu gün də aktualdır.

AI Oyun Proqramlaşdırma Hikməti 1
AI Oyun Proqramlaşdırma Hikməti 2
AI Oyun Proqramlaşdırma Hikməti 3
AI Oyun Proqramlaşdırma Hikməti 4

3. Süni intellekt: Müasir yanaşma süni intellektin ümumi sahəsini anlamaq istəyən hər kəs üçün əsas mətnlərdən biridir. Bu, oyun inkişafı haqqında kitab deyil - o, AI-nin əsaslarını öyrədir.

Mənbə: www.habr.com

Добавить комментарий