{"id":2393,"date":"2022-12-15T11:37:30","date_gmt":"2022-12-15T11:37:30","guid":{"rendered":"http:\/\/architeles.pl\/ethics\/?p=2393"},"modified":"2023-03-01T14:30:57","modified_gmt":"2023-03-01T14:30:57","slug":"gaming-i-sztuczna-inteligencja-czy-wirtualne-boty-wzbogacaja-czy-zabijaja-rozgrywke","status":"publish","type":"post","link":"https:\/\/architeles.eu\/ethics\/index.php\/2022\/12\/15\/gaming-i-sztuczna-inteligencja-czy-wirtualne-boty-wzbogacaja-czy-zabijaja-rozgrywke\/","title":{"rendered":"Gaming i sztuczna inteligencja &#8211; czy wirtualne boty wzbogacaj\u0105 czy zabijaj\u0105 rozgrywk\u0119?"},"content":{"rendered":"<figure id=\"attachment_2474\" aria-describedby=\"caption-attachment-2474\" style=\"width: 769px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2474\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay-300x169.jpg\" alt=\"\" width=\"769\" height=\"433\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay-300x169.jpg 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay-1024x576.jpg 1024w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay-768x432.jpg 768w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay-1536x864.jpg 1536w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_gameplay.jpg 1920w\" sizes=\"auto, (max-width: 769px) 100vw, 769px\" \/><figcaption id=\"caption-attachment-2474\" class=\"wp-caption-text\">Halo 2 (2004), \u017ar\u00f3d\u0142o: https:\/\/www.gamespot.com\/images\/1300-2679009<\/figcaption><\/figure>\n<p><strong>Sztuczna inteligencja jest coraz powszechniej stosowana w grach komputerowych, dostarczaj\u0105c graczom coraz bardziej realistycznych i wci\u0105gaj\u0105cych do\u015bwiadcze\u0144. Dzi\u0119ki zaawansowanym algorytmom i uczeniu maszynowemu, SI pozwala na tworzenie niezwykle z\u0142o\u017conych i inteligentnych postaci niezale\u017cnych, kt\u00f3re mog\u0105 reagowa\u0107 na r\u00f3\u017cne sytuacje i dzia\u0142ania graczy.<\/strong><!--more--><\/p>\n<p>Istnieje wiele r\u00f3\u017cnych metod modelowania sztucznej inteligencji i opisanie ich wszystkich w jednym artykule by\u0142oby niemo\u017cliwie. Dlatego zamiast kr\u00f3tkiego i prozaicznego przegl\u0105du wszystkich mo\u017cliwych metod, w tym artykule skupimy si\u0119 na bardziej szczeg\u00f3\u0142owym przedstawieniu kilku z nich, wraz z przedstawieniem przyk\u0142adu ich zastosowania i ich modyfikacji w wybranych grach komputerowych.<\/p>\n<p>Na wst\u0119pie warto r\u00f3wnie\u017c zaznaczy\u0107 specyfik\u0119 sztucznej inteligencji w grach komputerowych. W przeciwie\u0144stwie do wielu innych dziedzin, sztuczna inteligencja w grach komputerowych nie koniecznie powinna by\u0107 jak &#8222;najlepsza&#8221; &#8211; w wielu przypadkach takie gry sta\u0142yby si\u0119 niegrywalne. Mo\u017cemy wyobrazi\u0107 sobie sytuacj\u0119 gry FPS, w kt\u00f3rej komputer zawsze zna po\u0142o\u017cenie gracza i posiada perfekcyjn\u0105 celno\u015b\u0107, dzi\u0119ki czemu jest w stanie natychmiastowo wyeliminowa\u0107 gracza, nie daj\u0105c mu \u017cadnej szansy na wygran\u0105 &#8211; w takim przypadku wra\u017cenia z gry by\u0142by zdecydowanie negatywne. Wi\u0119kszo\u015b\u0107 gier d\u0105\u017cy jednak do tego, aby poziom trudno\u015bci by\u0142 odpowiednio zr\u00f3wnowa\u017cony &#8211; gra stanowi\u0142a dla gracza wyzwanie, ale nie udr\u0119k\u0119. W niekt\u00f3rych grach mo\u017cemy d\u0105\u017cy\u0107 do stworzenia bot\u00f3w, kt\u00f3rych zachowanie jest jak najbardziej zbli\u017cone do zachowania cz\u0142owieka &#8211; jednak r\u00f3wnie\u017c to nie zawsze jest po\u017c\u0105dane. Czasami przeciwnikami w grach s\u0105 np. kosmici albo zwierz\u0119ta, a czasami celowo d\u0105\u017cymy do tego, aby przeciwnik nie zachowywa\u0142 si\u0119 zbyt inteligentnie. W szczeg\u00f3lno\u015bci, nie d\u0105\u017cymy do utworzenia sztucznej inteligencji maj\u0105cej chocia\u017cby pomy\u015blnie przej\u015b\u0107 test Turinga.<\/p>\n<p>Warto r\u00f3wnie\u017c zaznaczy\u0107, \u017ce na odbi\u00f3r przez gracza przeciwnik\u00f3w sterowanych przez komputer zale\u017cy r\u00f3wnie\u017c od wielu innych czynnik\u00f3w, niezwi\u0105zanych bezpo\u015brednio ze sztuczn\u0105 inteligencj\u0105. Nale\u017c\u0105 do nich chocia\u017cby: design przeciwnik\u00f3w, wydawane przez nich d\u017awi\u0119ki, czy system walki zaimplementowany w grze, a w pewnym stopniu r\u00f3wnie\u017c ca\u0142okszta\u0142t ca\u0142ego \u015brodowiska, z kt\u00f3rym gracz wchodzi w interakcje. Artyku\u0142 ten skupia si\u0119 g\u0142\u00f3wnie na samych algorytmach i metodach, a o pozosta\u0142ych czynnikach tylko pobie\u017cnie wspomina.<\/p>\n<h3>Drzewa zachowa\u0144 (Behavior tree)<\/h3>\n<p>Jedn\u0105 z podstawowych technik modelowania sztucznej inteligencji w grach komputerowych s\u0105 drzewa zachowa\u0144 (<em>behavior tree). <\/em>Opieraj\u0105 si\u0119 one o struktur\u0119 informatycznego <em>drzewa (<\/em>zak\u0142adam dalej \u017ce czytelnik zna podstawy dzia\u0142ania tej struktury<em>)<\/em>. Wyr\u00f3\u017cniamy 3 rodzaje w\u0119z\u0142\u00f3w: <em>composite, decorator i<\/em> <em>execution.<\/em> Wykonanie okre\u015blonego dzia\u0142ania zaczyna si\u0119 w korzeniu drzewa, kt\u00f3ry przesy\u0142a \u017c\u0105danie wykonania do jednego z dzieci, a ten nast\u0119pnie przesy\u0142aj\u0105 je dalej. Dziecko odsy\u0142a do rodzica jeden z trzech stan\u00f3w:<em> running<\/em> &#8211; gdy zachowanie wci\u0105\u017c jest wykonywane, <em>success <\/em>je\u017celi zako\u0144czy\u0142o si\u0119 pomy\u015blnie i <em>failure<\/em> je\u015bli zako\u0144czy\u0142o si\u0119 pora\u017ck\u0105.<\/p>\n<p>Zadaniem w\u0119z\u0142a typu\u00a0<em>composite<\/em> jest czuwanie nad poprawnym wykonaniem zada\u0144 przez w\u0119z\u0142y-dzieci. Wyr\u00f3\u017cniamy dwa podstawowe podtypy:<\/p>\n<ul>\n<li><em>Sequence <\/em>&#8211; w\u0119ze\u0142 ten zleca wykonanie zadania wszystkim swoim dzieciom, w ustalonej kolejno\u015bci, od lewej do prawej. W\u0119ze\u0142 zwr\u00f3ci warto\u015b\u0107 <em>failure<\/em> lub <em>running,<\/em> je\u015bli chocia\u017c jedno z jego dzieci zwr\u00f3ci taki status, natomiast zwr\u00f3ci warto\u015b\u0107 s<em>uccess<\/em> tylko je\u015bli ostatnie dziecko zwr\u00f3ci tak\u0105 warto\u015b\u0107. W\u0119ze\u0142 ten mo\u017cna por\u00f3wna\u0107 do logicznego operatora AND, kt\u00f3ry wymaga, aby wszystkie zadania sk\u0142adowe zako\u0144czy\u0142 si\u0119 pomy\u015blnie.<\/li>\n<\/ul>\n<figure id=\"attachment_2406\" aria-describedby=\"caption-attachment-2406\" style=\"width: 412px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2406 \" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/sequence_node-300x67.png\" alt=\"\" width=\"412\" height=\"92\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/sequence_node-300x67.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/sequence_node.png 592w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><figcaption id=\"caption-attachment-2406\" class=\"wp-caption-text\">Przyk\u0142ad wykorzystania w\u0119z\u0142a typu Sequence do akcji przej\u015bcia do innego pomieszczenia.<\/figcaption><\/figure>\n<ul>\n<li><em>Selector &#8211; <\/em>w\u0119ze\u0142 typu selector jest natomiast odpowiednikiem logicznego OR &#8211; zwr\u00f3ci stan <em>success<\/em>, je\u015bli chocia\u017c jedno z dzieci zako\u0144czy swoje zadanie pomy\u015blnie, a w\u0119ze\u0142<em> selector<\/em> nie b\u0119dzie pr\u00f3bowa\u0142 wykonywa\u0107 innych zada\u0144. Podobnie jak w przypadku <em>sequence, <\/em>dzieci-akcje s\u0105 wykonywane w kolejno\u015bci od lewej do prawej.<\/li>\n<\/ul>\n<figure id=\"attachment_2409\" aria-describedby=\"caption-attachment-2409\" style=\"width: 466px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2409 \" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/selector_node-300x146.png\" alt=\"\" width=\"466\" height=\"227\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/selector_node-300x146.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/selector_node.png 525w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><figcaption id=\"caption-attachment-2409\" class=\"wp-caption-text\">Przyk\u0142ad wykorzystania w\u0119z\u0142a typu Selector do akcji przej\u015bcia do innego pomieszczenia &#8211; wybieramy jeden ze spos\u00f3b otworzenia drzwi (zniszczenie\/otwarcie\/w\u0142amanie).<\/figcaption><\/figure>\n<p>Innym typem w\u0119z\u0142\u00f3w s\u0105 w\u0119z\u0142y <em>decorator, <\/em>kt\u00f3re mog\u0105 mie\u0107 tylko jedno dziecko. Ich rola w drzewie r\u00f3\u017cni si\u0119 w zale\u017cno\u015bci od ich rodzaju. Przyk\u0142adem w\u0119z\u0142\u00f3w <em>decorator<\/em> s\u0105:<\/p>\n<ul>\n<li><em>Inverter<\/em> &#8211; analogicznie do bramki logicznej NOT, odwraca warto\u015b\u0107 zwr\u00f3con\u0105 przez dzieko.<\/li>\n<li><em>Succeeder<\/em> &#8211; zawsze zwr\u00f3ci warto\u015b\u0107 <em>success<\/em><\/li>\n<li><em>Repeat Until Fail<\/em> &#8211; wykonuj w\u0119ze\u0142-dziecko, dop\u00f3ki nie zwr\u00f3ci warto\u015bci <em>success<\/em>.<\/li>\n<\/ul>\n<p>Ostatnim rodzajem w\u0119z\u0142\u00f3w, s\u0105 w\u0119z\u0142y <em>execution<\/em>, b\u0119d\u0105ce li\u015b\u0107mi drzewa. Znajduj\u0105 si\u0119 w nich konkretne akcje, zaimplementowane i wykonane przez postacie w grze.<\/p>\n<p>Modelowanie sztucznej inteligencji przy pomocy drzew zachowa\u0144 jest powszechn\u0105 technik\u0105 we wsp\u00f3\u0142czesnych grach komputerowych, a specjalne modu\u0142y u\u0142atwiaj\u0105ce prac\u0119 nad nimi mo\u017cemy znale\u017a\u0107 w popularnych silnikach do tworzenia gier, takich jak Unity czy Unreal Engine, czy chocia\u017cby Java Behavior Trees dla j\u0119zyka Java.<\/p>\n<h3>Case study: Halo 2 (2004)<\/h3>\n<p>Jedn\u0105 z pierwszych gier wykorzystuj\u0105cych <em>behavior trees <\/em>by\u0142a gra Halo 2 z 2004 roku. W grze gracz zmierzy si\u0119 z kilkoma rodzajami przeciwnik\u00f3w, ka\u017cdy z nich r\u00f3\u017cni\u0105cy si\u0119 od siebie budow\u0105 fizyczn\u0105, wykorzystywan\u0105 broni\u0105 i sposobem walki, a co za tym idzie &#8211; zachowaniem wobec gracza. Ka\u017cdy z przeciwnik\u00f3w ma wi\u0119c swoje w\u0142asne drzewo zachowa\u0144, kt\u00f3rego gracz musi si\u0119 nauczy\u0107 i do niego dostosowa\u0107. Przyk\u0142adowy gameplay z gry: <a href=\"https:\/\/www.youtube.com\/watch?v=L8tyOFJ55eQ\">https:\/\/www.youtube.com\/watch?v=L8tyOFJ55eQ<\/a><\/p>\n<figure id=\"attachment_2411\" aria-describedby=\"caption-attachment-2411\" style=\"width: 436px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2411\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/halo2_tree-300x246.webp\" alt=\"\" width=\"436\" height=\"358\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_tree-300x246.webp 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_tree.webp 500w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><figcaption id=\"caption-attachment-2411\" class=\"wp-caption-text\">Przyk\u0142ad behavior tree z gry Halo 2<\/figcaption><\/figure>\n<p>W celu modelowania zaawansowanych zastosowa\u0144, Halo 2 wprowadza kilka modyfikacji do przedstawionych powy\u017cej za\u0142o\u017ce\u0144 drzewa zachowa\u0144. Drzewa zachowa\u0144 potrafi\u0105 by\u0107 bardzo rozbudowane, jednocze\u015bnie ka\u017cdy z bot\u00f3w musi w czasie rzeczywistym podj\u0105\u0107 jak najlepsz\u0105 decyzj\u0119 dotycz\u0105c\u0105 akcji do wykonania. Pierwszym mechanizmem kt\u00f3ry umo\u017cliwia przeciwnikowi podj\u0119cie decyzji jest <em>kontekst<\/em>. W zale\u017cno\u015bci od tego, w jakiej sytuacji znajduje si\u0119 przeciwnik &#8211; czy np. jedzie pojazdem na miejscu pasa\u017cera, czy gracz znajduj\u0119 si\u0119 w pobli\u017cu &#8211; kontekst w jakim znajduje si\u0119 bot, mo\u017ce wy\u0142\u0105czy\u0107 cz\u0119\u015b\u0107 w\u0119z\u0142\u00f3w (a przez to r\u00f3wnie\u017c &#8222;odci\u0105\u0107&#8221; niekt\u00f3re ga\u0142\u0119zi drzewa), w celu zmniejszania liczby potencjalnych akcji do wykonania.<\/p>\n<figure id=\"attachment_2412\" aria-describedby=\"caption-attachment-2412\" style=\"width: 717px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2412\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/halo2_context_tree-300x91.webp\" alt=\"\" width=\"717\" height=\"218\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_context_tree-300x91.webp 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/halo2_context_tree.webp 500w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><figcaption id=\"caption-attachment-2412\" class=\"wp-caption-text\">Behavior tree z Halo 2 zmieniaj\u0105ce si\u0119 wraz z kontekstem<\/figcaption><\/figure>\n<p>Kontekst to jednak nie wszystko. Zadania maj\u0105 r\u00f3wnie\u017c przypisany sw\u00f3j priorytet. Priorytet zadania jest zale\u017cny od aktualnego kontekstu i zmienia si\u0119 wraz z nim. W niekt\u00f3rych sytuacjach przeciwnik powinien priorytetyzowa\u0107 obron\u0119 ponad atak, a w sytuacji w kt\u00f3rej wrogowie maj\u0105 przewag\u0119 liczebn\u0105, a gracz ma ma\u0142o \u017cycia &#8211; mo\u017ce warto raczej atakowa\u0107 &#8211;\u00a0 dzia\u0142ania ofensywne b\u0119d\u0105 mia\u0142y przypisany wi\u0119kszy priorytet i b\u0119d\u0105 wykonywane pierwsze.<\/p>\n<p>Sam kontekst i priorytety jednak nie wystarcz\u0105. W przypadku w kt\u00f3rym gracz do nas strzela, priorytetem powinno by\u0107 odpowiedzenie ogniem, ale kiedy gracz nagle wsiad\u0142 do pojazdu, odpowiedni\u0105 akcj\u0105 by\u0142oby r\u00f3wnie\u017c skorzystanie z najbli\u017cszego pojazdu. Gra wykorzystuje tzw. <em>impulse trigger<\/em> w celu natychmiastowej zmiany priorytet\u00f3w i przeniesienia si\u0119 z jednej ga\u0142\u0119zi drzewa na drug\u0105. Przyk\u0142adem jest sytuacja, w kt\u00f3rej przy zabiciu przez gracza jednego z oficer\u00f3w (tzw. elites), pomniejsi, szeregowi przeciwnicy (<em>grunts)<\/em> przestrasz\u0105 si\u0119 i zaczn\u0105 ucieka\u0107 w pop\u0142ochu.<\/p>\n<h2><span style=\"font-size: 14pt;\">Goal Oriented Action Planning<\/span><\/h2>\n<p>Goal Oriented Action Planning (GOAT) jest architektur\u0105\/systemem projektowania stucznej inteligencji, opart\u0105 na solwerze STRIPS (Stanford Research Institute Problem Solver), stworzon\u0105 z my\u015bl\u0105 o projektowaniu zachowa\u0144 autonomicznych agent\u00f3w, pozwalaj\u0105c\u0105 im na dynamiczne podejmowanie decyzji w z\u0142o\u017conych \u015brodowiskach.<\/p>\n<p>System dzia\u0142a w oparciu o automat sko\u0144czony (dalej zak\u0142adam ze czytelnik zna podstawy ich dzia\u0142ania). W klasycznym modelu GOAT automat ma tylko trzy stany:<\/p>\n<ul>\n<li>Goto &#8211; przemieszczanie si\u0119<\/li>\n<li>Animate &#8211; odegranie animacji<\/li>\n<li>Use Smart Object &#8211; interakcja z jednym z <em>obiekt\u00f3w<\/em> b\u0119d\u0105cych cz\u0119\u015bci\u0105 <em>\u015bwiata<\/em><\/li>\n<\/ul>\n<figure id=\"attachment_2420\" aria-describedby=\"caption-attachment-2420\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2420\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/finite_state_machine-300x254.png\" alt=\"\" width=\"300\" height=\"254\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/finite_state_machine-300x254.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/finite_state_machine.png 618w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-2420\" class=\"wp-caption-text\">Automat sko\u0144czony w systemie GOAT<\/figcaption><\/figure>\n<p>Liczba ta mo\u017ce wyda\u0107 si\u0119 zaskakuj\u0105co ma\u0142a, jednak je\u017celi poddamy ten problem g\u0142\u0119bszej analizie, dojedziemy do wniosku, \u017ce tak naprawd\u0119 wszystkie dzia\u0142ania podejmowane przez wirtualne boty da si\u0119 sprowadzi\u0107 do jednego z tych trzech stan\u00f3w.\u00a0 Zrezygnowanie z tworzenia skomplikowanych automat\u00f3w sko\u0144czonych jest jedn\u0105 z g\u0142\u00f3wnych zalet modelu GOAT.<\/p>\n<p>Agent znajduje si\u0119 w pewnym \u015brodowisku\/\u015bwiecie (<em>world)<\/em>. Pojedyncza informacja na temat \u015brodowiska nazywana jest <em>faktem, <\/em>a zbi\u00f3r wszystkich fakt\u00f3w na temat \u015brodowiska nazywany jest jego <em>stanem (state)<\/em>. W celu zrozumienia dzia\u0142ania modelu GOAT, nale\u017cy wyja\u015bni\u0107 r\u00f3wnie\u017c nast\u0119puj\u0105ce terminy:<\/p>\n<ul>\n<li><em>Goal (Cel) &#8211; <\/em>warunki, do kt\u00f3rych spe\u0142nienia d\u0105\u017cy agent.<\/li>\n<li><em>Plan<\/em> &#8211; sekwencja <em>akcji<\/em>, kt\u00f3re agent musi wykona\u0107, aby zosta\u0142 spe\u0142niony <em>cel<\/em>.<\/li>\n<li><em>Action (akcja)<\/em> &#8211; pojedyncze, atomowe dzia\u0142anie, b\u0119d\u0105ce cz\u0119\u015bci\u0105 sk\u0142adow\u0105 <em>planu.<\/em> Do akcji nale\u017c\u0105 np: otwarcie drzwi, odegranie animacji, podniesienie przedmiotu itp. Akcje wykonywane s\u0105 niezale\u017cnie od siebie. Ka\u017cda akcja posiada r\u00f3wnie\u017c\u00a0<em>preconditions<\/em> (<em>warunki wst\u0119pne<\/em>), kt\u00f3re s\u0105 stanami, w jakich musi by\u0107 \u015brodowisko, aby akcja mog\u0142a zosta\u0107 wykonana, oraz\u00a0<em>effects (efekty),\u00a0<\/em>kt\u00f3re okre\u015blaj\u0105 jak zmieni\u0105 si\u0119 <em>fakty<\/em> b\u0119d\u0105ce cz\u0119\u015bci\u0105 <em>stanu, <\/em>w kt\u00f3rym akcja zosta\u0142a wykonana. Wyr\u00f3\u017cnia si\u0119 r\u00f3wnie\u017c <em>obiekty (objects), <\/em>kt\u00f3re s\u0105 przedmiotami, z kt\u00f3rymi agent musi wej\u015b\u0107 w interakcj\u0119, aby wykona\u0107 dan\u0105 akcj\u0119.<\/li>\n<\/ul>\n<p>Centraln\u0105 cz\u0119\u015bci\u0105 systemu GOAT jest tzw. <em>planner<\/em> <em>(planista), <\/em>b\u0119d\u0105cy fragmentem kodu, odpowiedzialnym za konstruowanie <em>plan\u00f3w<\/em>. Agent dostarcza plani\u015bcie sw\u00f3j <em>cel<\/em>, list\u0119 dost\u0119pnych <em>akcji, <\/em>oraz aktualny <em>stan <\/em>\u015brodowiska. Planista nast\u0119pnie analizuje warunki wst\u0119pne akcji oraz ich efekty (np. przy pomocy algorytmu A*) i w odpowiedzi przesy\u0142a agentowi <em>plan<\/em>, b\u0119d\u0105cy kolejk\u0105 akcji do wykonania, kt\u00f3re najlepiej spe\u0142ni\u0105 dany <em>cel<\/em>. Agent nast\u0119pnie wykonuje dany <em>plan, <\/em>dop\u00f3ki nie uda mu si\u0119 osi\u0105gn\u0105\u0107 celu, wykonanie <em>planu<\/em> stanie si\u0119 niemo\u017cliwe, albo znajdzie inny <em>cel,<\/em> lepiej dostosowany do aktualnej sytuacji &#8211; planista tworzy wtedy nowy <em>plan.<\/em><\/p>\n<h3>Case study: F.E.A.R (2005)<\/h3>\n<p>Gra F.E.A.R, stworzona przez studio Monolith i wydana w 2005 roku by\u0142a pierwsz\u0105 gr\u0105 komputerow\u0105, wykorzystuj\u0105c\u0105 system GOAT. Od dnia premiery gra by\u0142a wielokrotnie chwalona przez graczy i wci\u0105\u017c, ponad 15 lat po premierze, jest przytaczana jako przyk\u0142ad jednej z najlepszych sztucznych inteligencji w grach typu FPS. Cz\u0119\u015b\u0107 kodu zosta\u0142a udost\u0119pniona publicznie, co umo\u017cliwia dok\u0142adne zapoznanie si\u0119 z dzia\u0142aniem bot\u00f3w w tej grze.<\/p>\n<figure id=\"attachment_2425\" aria-describedby=\"caption-attachment-2425\" style=\"width: 413px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2425\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/fear_state-300x224.png\" alt=\"\" width=\"413\" height=\"308\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_state-300x224.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_state-768x573.png 768w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_state.png 792w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><figcaption id=\"caption-attachment-2425\" class=\"wp-caption-text\">Przeci\u0119ty stan, w jakim znajduje si\u0119 \u015bwiat w grze F.E.A.R<\/figcaption><\/figure>\n<p>Wi\u0119ksza cz\u0119\u015bci gry dzieje si\u0119 w dosy\u0107 ciasnych, zamkni\u0119tych pomieszczeniach, posiadaj\u0105cymi nie wi\u0119cej ni\u017c klika mo\u017cliwych \u015bcie\u017cek do poruszania si\u0119 dla gracza i przeciwnik\u00f3w. Naszymi przeciwnikami s\u0105 w du\u017cej mierze grupy ludzkich przeciwnik\u00f3w, kt\u00f3rzy sprawiaj\u0105 wra\u017cenie wsp\u00f3\u0142pracowania ze sob\u0105, wykonuj\u0105 skomplikowane akcje taktyczne np. zachodzenie gracza z flanki. Dodatkowo wszyscy przeciwnicy \u017cywo werbalizuj\u0105 wykonywane akcj\u0119 (np. informuj\u0105 o obecno\u015bci gracza albo o rzuceniu przez gracza granatu). Wszystko to sprawia wra\u017cenie, \u017ce mamy styczno\u015b\u0107 z oddzia\u0142em przeciwnik\u00f3w, kt\u00f3rzy kooperuj\u0105 ze sob\u0105 i zachowuj\u0105 si\u0119 w realistyczny, ludzki spos\u00f3b. Dzia\u0142anie sztucznej inteligencji (i reakcje graczy) mo\u017cna zobaczy\u0107 na tym filmiku: <a href=\"https:\/\/www.youtube.com\/watch?v=KQN3yKYkFmE\">https:\/\/www.youtube.com\/watch?v=KQN3yKYkFmE<\/a><\/p>\n<p>Boty w grze posiadaj\u0105 70 cel\u00f3w. Ka\u017cdemu z cel\u00f3w nadawany jest priorytet, zale\u017cny od aktualnego stanu \u015brodowiska. Przyk\u0142adowo, je\u015bli \u017caden z fakt\u00f3w na temat \u015bwiata nie m\u00f3wi, \u017ce w pobli\u017cu znajduje si\u0119 gracz, cel KillEnemy b\u0119dzie mia\u0142 priorytet 0, a cel Patrol b\u0119dzie priorytetowy. W grze zaimplementowane jest \u0142\u0105cznie 120 akcji, a ka\u017cdy rodzaj przeciwniki posiada ich odpowiedni ich podzbi\u00f3r.<\/p>\n<figure id=\"attachment_2427\" aria-describedby=\"caption-attachment-2427\" style=\"width: 474px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2427\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/fear_akcje-300x176.png\" alt=\"\" width=\"474\" height=\"278\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_akcje-300x176.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_akcje-768x451.png 768w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_akcje.png 983w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><figcaption id=\"caption-attachment-2427\" class=\"wp-caption-text\">Lista akcji w grze F.E.A.R dla r\u00f3\u017cnych rodzaj\u00f3w przeciwnik\u00f3w.<\/figcaption><\/figure>\n<p>Cele i plany musz\u0105 by\u0107 ustalane w czasie rzeczywistym dla ka\u017cdego z agent\u00f3w z osobna. Nie stanowi\u0142o by to a\u017c takiego problemu, gdyby nie fakt, \u017ce stan w jakim znajduje si\u0119 \u015brodowisko r\u00f3wnie\u017c zmienia si\u0119 dynamicznie (w wyniku gracza lub dzia\u0142ania innych agent\u00f3w), co mo\u017ce spowodowa\u0107 ca\u0142kowite uniewa\u017cnienie aktualnego planu. Z tego powodu, gra posiada odpowiedni system walidacji plan\u00f3w. Po pierwsze, ka\u017cdy plan jest od nowa walidowany zaraz po utworzeniu &#8211; planista tworzy kopi\u0119 aktualnego stanu \u015bwiata, a nast\u0119pnie wykonuje plan na utworzonej kopii, aby upewni\u0107 si\u0119 \u017ce zak\u0142adany cel faktycznie zostanie spe\u0142niony. Po drugie, specjalna funkcja ReplanRequired ca\u0142y czas sprawdza, czy aktualny plan powinien zosta\u0107 porzucony i czy nale\u017cy zapyta\u0107 planist\u0119 o utworzenie nowego. Po trzecie, przed wykonaniem ka\u017cdej akcji ponownie sprawdzane jest, czy spe\u0142nione s\u0105 wci\u0105\u017c jej <em>warunki wst\u0119pne<\/em>, a je\u015bli nie &#8211; planista jest proszony o utworzenie nowego planu.<\/p>\n<p>Je\u015bli akcja mo\u017ce by\u0107 wykonana automat sko\u0144czony jest informowany, do jakiego z trzech stan\u00f3w musi si\u0119 przenie\u015b\u0107, oraz przesy\u0142a wszystkie dane potrzebne do wykonania danego stanu. Przyk\u0142adem jest sytuacja, w kt\u00f3rej agent musi prze\u0142adowa\u0107 bro\u0144 &#8211; w takim przypadku zmienia sw\u00f3j stan na <em>Animate<\/em> i przekazuje automatowi parametry animacji. Wi\u0119kszo\u015b\u0107 plan\u00f3w w grze jest dosy\u0107 kr\u00f3tka &#8211; zazwyczaj sk\u0142ada si\u0119 z 1-2 akcji, rzadko przekraczaj\u0105c 4. Umo\u017cliwia to dynamiczn\u0105 zmian\u0119 plan\u00f3w, dzi\u0119ki czemu gracz niecz\u0119sto znajdzie si\u0119 w sytuacji, w kt\u00f3rej przeciwnik bezmy\u015blnie stoi w miejscu, zastanawiaj\u0105c si\u0119 co robi\u0107.<\/p>\n<p>Mimo zaawansowanej sztucznej inteligencji, F.E.A.R ucieka si\u0119 r\u00f3wnie\u017c do kilku &#8222;sztuczek&#8221;, przez kt\u00f3re gracz odbiera sztuczn\u0105 inteligencj\u0119 obecn\u0105 w grze za znacznie lepsz\u0105, ni\u017c jest w rzeczywisto\u015bci. Jak zosta\u0142o wcze\u015bniej wspomniane, jedn\u0105 z pierwszych rzeczy rzucaj\u0105cych si\u0119 w oczy przy obcowaniu z botami w grze, jest ich bogata komunikacja &#8211; gracz jest przekonany, \u017ce poszczeg\u00f3lne komunikaty wymieniane s\u0105 mi\u0119dzy cz\u0142onkami oddzia\u0142u i na ich podstawie zesp\u00f3\u0142 dostosowuje swoj\u0105 taktyk\u0119. W rzeczywisto\u015bci jednak komunikaty s\u0105 wysy\u0142ane &#8222;w pr\u00f3\u017cnie&#8221; &#8211; poszczeg\u00f3lni agenci s\u0105 w pe\u0142ni autonomiczni i nie wiedz\u0105 o istnieniu innych agent\u00f3w. Iluzja wsp\u00f3\u0142pracy bierze si\u0119 st\u0105d, \u017ce ich <em>cele<\/em> maj\u0105 podobne priorytety dla danej sytuacji (s\u0105 ustalane przez ten sam algorytm), a wi\u0119c zazwyczaj po prostu <em>cele<\/em> wi\u0119kszo\u015bci agent\u00f3w zbiegaj\u0105 si\u0119 ze sob\u0105, co z perspektywy gracza sprawia wra\u017cenie wsp\u00f3\u0142pracy.<\/p>\n<figure id=\"attachment_2473\" aria-describedby=\"caption-attachment-2473\" style=\"width: 412px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2473\" src=\"http:\/\/architeles.pl\/ethics\/wp-content\/uploads\/2022\/12\/fear_gameplay-300x177.png\" alt=\"\" width=\"412\" height=\"243\" srcset=\"https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_gameplay-300x177.png 300w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_gameplay-768x454.png 768w, https:\/\/architeles.eu\/ethics\/wp-content\/uploads\/2022\/12\/fear_gameplay.png 977w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><figcaption id=\"caption-attachment-2473\" class=\"wp-caption-text\">Przeciwnicy tak naprawd\u0119 nie reaguj\u0105 na komendy wydawane przez towarzyszy<\/figcaption><\/figure>\n<h2>Podsumowanie<\/h2>\n<p>Przedstawione metody to tylko wierzcho\u0142ek g\u00f3ry lodowej, jak\u0105 jest projektowanie sztucznej inteligencji w grach komputerowych. Przedstawione metody maj\u0105 swoje liczne udoskonalenia i wariacje, z kt\u00f3rymi zainteresowane osoby mog\u0105 si\u0119 zapozna\u0107. Warto r\u00f3wnie\u017c wymieni\u0107 kilka innych metod projektowania SI w grach, kt\u00f3re s\u0105 powszechnie u\u017cywane, a kt\u00f3re nie zosta\u0142y szerzej opisane w tym artykule. Nale\u017c\u0105 do nich m.in: ro\u017cne rodzaje automat\u00f3w sko\u0144czonych, metody heurystyczne, <em>pathfinding,<\/em> czy <em>Monte-Carlo Tree Search<\/em>. Czytelnik\u00f3w kt\u00f3rych zainteresowa\u0142a przedstawiona tematyka, zach\u0119cam do zapoznania si\u0119 z przedstawionymi poni\u017cej \u017ar\u00f3d\u0142ami artyku\u0142u.<\/p>\n<h2>Bibliografia<\/h2>\n<ul>\n<li>https:\/\/www.gamedeveloper.com\/programming\/behavior-trees-for-ai-how-they-work<\/li>\n<li>https:\/\/www.gamedeveloper.com\/programming\/gdc-2005-proceeding-handling-complexity-in-the-i-halo-2-i-ai<\/li>\n<li>Implementation of Behavior Tree in Halo 2 &#8211; Fakhri Nail Wibowo<\/li>\n<li>The Behaviour Tree AI of Halo 2 | AI and Games: https:\/\/youtu.be\/NU717sd8oUc<\/li>\n<li>https:\/\/alumni.media.mit.edu\/~jorkin\/goap.html<\/li>\n<li>https:\/\/medium.com\/@vedantchaudhari\/goal-oriented-action-planning-34035ed40d0b<\/li>\n<li>https:\/\/gamedevelopment.tutsplus.com\/tutorials\/goal-oriented-action-planning-for-a-smarter-ai&#8211;cms-20793<\/li>\n<li>https:\/\/www.bit-tech.net\/reviews\/gaming\/how-ai-in-games-works\/3\/<\/li>\n<li>Building the AI of F.E.A.R. with Goal Oriented Action Planning | AI 101: https:\/\/www.youtube.com\/watch?v=PaOLBOuyswI<\/li>\n<li><span dir=\"ltr\" role=\"presentation\">Jeff Orkin<\/span> &#8211; Three States and a Plan: The A.I. of F.E.A.R. 1 &#8211; Game Developers Conference 2006<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Sztuczna inteligencja jest coraz powszechniej stosowana w grach komputerowych, dostarczaj\u0105c graczom coraz bardziej realistycznych i wci\u0105gaj\u0105cych do\u015bwiadcze\u0144. Dzi\u0119ki zaawansowanym algorytmom i uczeniu maszynowemu, SI pozwala na tworzenie niezwykle z\u0142o\u017conych i inteligentnych postaci niezale\u017cnych, kt\u00f3re mog\u0105 reagowa\u0107 na r\u00f3\u017cne sytuacje i dzia\u0142ania graczy.<\/p>\n","protected":false},"author":93,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[185],"tags":[15,216,215],"class_list":["post-2393","post","type-post","status-publish","format-standard","hentry","category-uj-2022-23","tag-ai","tag-games","tag-gry"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/posts\/2393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/users\/93"}],"replies":[{"embeddable":true,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/comments?post=2393"}],"version-history":[{"count":4,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/posts\/2393\/revisions"}],"predecessor-version":[{"id":2749,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/posts\/2393\/revisions\/2749"}],"wp:attachment":[{"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/media?parent=2393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/categories?post=2393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/architeles.eu\/ethics\/index.php\/wp-json\/wp\/v2\/tags?post=2393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}