játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5448
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2520

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Játékok és a mesterséges intelligencia 2009.05.11 14:04


Mi a mesterséges intelligencia?

A mesterséges intelligencia (MI), vagy angolul az artificial intelligence (AI) meghatározása nem egyszerű kérdés. Maga a kifejezés először 1956-ban jelent meg, John McCarthy számítógépes kutató használta az elnevezést a dartmouthi konferencián.

A szakirodalomban többféle megközelítéssel találkozhatunk, amelyek messze nem egységesek. Nézzünk meg néhány lehetséges definíciót!

Az Oxford számítástechnikai értelmező szótár szerint a mesterséges intelligencia:

A számítástudománynak az a területe, amely emberi intelligenciát igénylő feladatokat megoldó számítógépes programok készítésével foglalkozik.

A Futó Iván által szerkesztett Mesterséges intelligencia című könyvben több különböző meghatározást is olvashatunk. A megfogalmazás módja attól függ, hogy mely területen dolgozó kutató próbálta meg leírni az MI fogalmát:

Haugenland, 1985: Az MI egy izgalmas erőfeszítés a számítógépek gondolkodóvá tételére, értelemmel bíró gépek létrehozására a szó szoros értelmében.

Bellman, 1978: Az MI az emberi gondolkodáshoz asszociált tevékenységek, mint a döntéshozatal, problémamegoldás, tanulás automatizálása vizsgálata.

Charniak, 1985: Az MI a mentális képességek tanulmányozása számítógépes modellek segítségével.

Winston, 1992: Az MI az érzékelést, gondolkodást és cselekvést lehetővé tevő számítások (computation) tanulmányozása.

Kurzweil, 1990: Az MI olyan funkciók megvalósítására alkalmas gépek tudománya, mely funkciókhoz intelligenciára van szükség, amennyiben azokat emberek valósítják meg.

Rich, 1991: Az MI annak tanulmányozása, hogyan lehet számítógéppel olyan dolgokat tenni, melyeket jelenleg az emberek jobban tudnak.

Schalkoff, 1990: Az MI olyan tanulmányterület, amely számítási eljárásokkal próbálja magyarázni és utánozni az intelligens viselkedést.

Luger, 1993: Az MI a számítástudomány azon ága, mely az intelligens viselkedés automatizálásával foglalkozik.

A magyar Wikipedia az alábbi módon határozza meg az MI-t:

Mesterséges intelligenciának (MI vagy AI – az angol Artificial Intelligence-ből) egy gép, program vagy mesterségesen létrehozott tudat által megnyilvánuló intelligenciát nevezzük. A fogalmat legtöbbször a számítógépekkel társítjuk.

A leírtakból látható, hogy nehéz pontos definíciót adni az MI-re, az MI általánosan elfogadott, egyértelmű definíciója mind a mai napig hiányzik. Maga a tudományág sok különböző területet érint, pl. kereső algoritmusok, gépi tanulás, robotika, kétszemélyes játékok, alakfelismerés, beszédfelismerés, intelligens ágensek stb.


Játékok és mesterséges intelligencia

A számítógépes játékok esetén a tudományos megközelítéstől eltérően szokás értelmezni az MI-t (már ha egy játékban egyáltalán található MI). Az előző pontban megadott definíciók közül talán Kurzweil meghatározása áll a legközelebb a valósághoz:

Az MI olyan funkciók megvalósítására alkalmas gépek tudománya, mely funkciókhoz intelligenciára van szükség, amennyiben azokat emberek valósítják meg.

A játékosok elvárásainak akkor felel meg leginkább egy program, ha:

- a gépi ellenfelek nem buták; például a gép katonái nem álldogálnak egykedvűen, miközben a játékos éppen lövi őket
- a gépi ellenfelek nem legyőzhetetlenek; egy teljesíthetetlen feladat gyorsan elveheti a kedvet az egész játéktól
- az előző két ponthoz kapcsolódóan több különféle nehézségi fokozat közül lehet választani, hogy mind a gyengébb, mind az erősebb játékosoknak megfelelő kihívást biztosítson a program
- a gépi ellenfelek viszonylag hihetően viselkednek, úgy, ahogyan azt egy élő játékos is tenné, és megfelelő reakciókat adnak a játékos cselekedeteire
- jó játékélményt, szórakoztató időtöltést nyújt a játékosoknak

A játékprogramok nem a klasszikus, tudományos értelemben vett mesterséges intelligenciát valósítják meg, hanem különböző technikák, eszközök felhasználásával az intelligens viselkedés látszatát igyekeznek kelteni. Ebbe természetesen beleférnek a tudományos MI-ben használt módszerek is, de egyéb dolgok, például ügyesen megtervezett pályák vagy akár „csalások” is szóba jöhetnek. A végső cél mindenféleképpen a megfelelő játékélmény biztosítása a játékos számára.

A játékok történetének kezdetén a rendelkezésre álló számítógépek teljesítménye még annyira gyenge volt, hogy a fejlesztők többsége nem is foglalkozott azzal, hogy a gépi ellenfelek valamennyire is „okosak” legyenek. 1985-ben ezt írta az 1001 játék és a Graphics Basic Commodore 64-en című könyv:

...az olyan játékokban, amikor a játékos a géppel, mint ellenféllel kerül szembe, ismét két végletes eset különböztethető meg. Az egyik - egyszerű - típusnál a számítógép véletlen döntéseket hoz, össze-vissza szaladgál, míg a másiknál alaposan átgondolt stratégiát követ, amely mindig a pillanatnyi helyzet elemzésével indul, és határozott célok elérésére törekszik. Mondani sem kell, hogy az utóbbival való játék általában élvezetesebb, és a játékos nem, vagy nem olyan hamar unja meg. Az utóbbi tipikus példái a sakkprogramok, az előbbi sajnos a játékok 80%-a.

Ettől függetlenül már az akkoriban elterjedt mikroszámítógépeken (Magyarországon ez többnyire Commodore és Sinclair gépeket jelentett) is léteztek olyan programok, amelyek használtak bizonyos szintű MI-t. Példa erre a Pacman illetve az Archon című program és a sakkprogramok. A Commodore VC=20-on is létezett olyan sakkprogram (a Sargon Schack cartridge), amely egészen jól játszott. A stratégiai játékok egyik korai és sikeres példája volt a Defender of the crown, amelyet 1986-ban adtak ki Commodore Amigára, és később több géptípusra is elkészült.

A hardvereszközök teljesítményének fejlődésével lehetővé vált, hogy a fejlesztők komolyabb figyelmet fordítsanak arra, hogy a játékok viszonylag intelligensen, hihetően viselkedjenek. A korai programokban gyakran előfordultak kisebb-nagyobb hibák, például az útkereső algoritmus gyengesége, melynek következtében a nagyobb távolságra elindított egységek rendszeresen elakadtak. A mai fejlesztők már jóval komolyabban veszik az MI kérdését, így biztosítva számunkra egyre jobb játékélményt.

Az egyre fejlődő algoritmusok, módszerek ellenére a játékok többsége gyorsan kiismerhető. Általában van néhány olyan pont, gyengeség a programban, amelyet kihasználva az emberi játékos komoly előnyre tehet szert a géppel szemben.


A számítógépes játékok osztályozása az MI szempontjából

A számítógépes játékokat számos szempont alapján lehet osztályozni. A következőkben egy játék-MI szempontokat figyelembe vevő osztályozást adok meg.

1.Nincs a játékban MI. Ebben az esetben nincs szükség arra, hogy intelligens viselkedést állítsunk elő. Sok ilyen játék létezik, pl. a Windows játékai közül az Aknakereső vagy a Pasziánsz. Példaként hozhatjuk még a Mahjongg című programot vagy a logikai és az ügyességi játékok jelentős részét. Ezekben a programokban a számítógép csak kiinduló állapotokat állít elő, ellenőrzi, hogy a játékos helyesen, a szabályoknak megfelelő módon cselekedett-e, és adminisztrálja a játék menetét. A történeti részben említett, régebben fejlesztett programok többsége sem tartalmazott említésre méltó MI-t. A jelenleg népszerű játéktípusok közül megemlíteném a multiplayer böngészős stratégiai játékokat (pl. a magyar fejlesztésű Lords of Fantasyt), illetve az online pókert.

2.Kétszemélyes, teljes információjú játékok. Ezt a kategóriát azért emeltem ki, mert a tudományos MI is vizsgálja ezt a játéktípust. Többnyire táblás játékok esetén találkozunk számítógépes megvalósítással, de nem csak táblás a játékok tartoznak ebbe a csoportba. Az egyes feladatok megvalósításának nehézsége jelentősen különbözik egymástól. Könnyű feladatra példa a Tic-Tac-Toe, amelyet akár egy kezdő programozó is képes elkészíteni, közepes (szakdolgozati) szintet képvisel az Othello vagy Reversi, nehéz feladatként említhetjük a sakkot.

3.Egyéb játékok. Ebbe a nagy kategóriába tartozik a többi számítógépes játék. Persze ez egy elég nagy, alapvetően különböző programot tartalmazó csoport, ezért további részletezés is szükséges. Ezt a részletezést elvégezhetjük a játék típusa szerint: más-más viselkedést kell mutatnia ugyanis egy RTS játéknak, mint egy FPS-nek vagy egy RPG-nek, vagy esetleg egy sportjátéknak.

Ha működik valamilyen MI egy adott programban, akkor annak két alapvető megjelenési formája lehet:

1.Virtuális játékos. Ebben az esetben a játékos nem látja ellenfelét, de a jelenléte érzékelhető, olyan, mintha egy másik játékos állna vele szemben, aki a megtett lépésekre válaszol. Példa lehet erre egy sakkprogram, vagy az RTS játékok vezérlő stratégiája.

2.Egységek intelligenciája. Ebben az esetben a játék egységeinek is van valamennyi önálló intelligenciája. Például egy RTS vagy egy FPS játékban az ellenséges egységek önállóan reagálnak a játékos megmozdulásaira, vagy egy RTS gyűjtögető egységei képesek egy kitermelésre adott parancsot megfelelően végrehajtani.

Egy adott programon belül a két típus vegyesen is megjelenhet. Egy RTS játékban általában találhatunk egy magasabb szintű vezérlő programágat, amely a fő tevékenységeket koordinálja, de az egyes egységek (pl. katonák, tankok stb.) is rendelkeznek intelligenciával, és önállóan reagálnak a bekövetkező eseményekre.

Értékelés: 8.80

Új hozzászólás
Carlos          2009.06.06 13:58
Láttam a videót, de valóban nem jött le, hogy egy körökre osztott stratégiáról van szó - mivel mai napig nem vagyok tisztában ezzel a játékfajtával (az első - és egyben utolsó - ilyen játék, amit feltelepítettem anno, az az UFO volt).

Ettől függetlenül egy normális állapotgépet érdemes megfontolni, a többihez pedig - a játék jellegéből adódóan - nem tudok hozzászólni. :-(
Kuz          2009.06.06 10:16
Öhmm...asszem akkor a videoból nem jött le, hogy ez milyen játék is lenne. Ez egy körökre osztott harcolós játék. Itt nincs útvonalkeresés, nincs közös stratégia, nincs real-time döntéshozatal. Itt minden körben 1x cselekedhetsz 1 valamit.
Carlos          2009.06.06 09:55
Az "egyszerű if-ek" elsőre jó ötletnek tűnhet, de amint bővül a kód, már vakarhatod is a fejed, és egy rakás "ha ez, és az, vagy amaz" részlet díszíti hamarosan a forrást, amit még te sem fogsz átlátni, ha mondjuk hetekkel később fel kell venni egy újabb feltételt.

Nem véletlen, hogy a felsorolásomban szerepel az állapot tervezési minta.

Más. Az egységeid többsége nem állhat, mint a faszent. Végezhetnek látszólag tudatos, véletlen mozgást (wander, seek), esetleg egy előre megszabott pálya mentén őrjáratozhatnak (path following). Az ellent meglátva, az előbb említett belső állapotuk alapján támadhatnak (target following), vagy menekülhetnek, esetleg megróbálhatnak elbújni (evade, hide, flee). Ezek mint az autonóm ágens és az egyéni mozgás és csoportdinamika témakörbe tartoznak. Nem nagy ügy, mindössze némi vektoralgebra és newtoni fizika.

Üzenetküldés: hogyan kommunikálnak az egységeid? Megteheted, hogy az összes egység egy emberként a megtámadott segítségére siet (ekkor sem úszod meg legalább a mediator mintát, hacsak nem akarod, hogy minden példány hivatkozzon az összes többire), közben a bázisodat - már ha van ilyen - szétrúgja egy szál droid.

Egység memória: nem túl szerencsés az sem, hogy a támadó lerázhatatlan. Akár a valós életben, elvárható, hogy egy hosszasabb, sikertelen üldözés után "leszálljon" rólad.

Szóval szerintem egy ilyen játékhoz szinte mindez jól jön. Ami pedig az esélyek latolgatását illeti, oda nem árt a fuzzy logika, de első körben talán nem feltétlenül szükséges (megoldható "egyszerű if"-ekkel ).
Kuz          2009.06.05 14:36
Azért a Skynet-et nem akarom megírni. Valami egyszerűen használható, egyszerűen konfigurálható m.i. kellene, ami nem akarja utánozni az emberi játékstílust, viszont többé-kevésbé értelmes dolgokat csinál (szóval, ha lövik a bázist, akkor nem kezd el a legtávolabbi hajójával világot látni, hanem megpróbál védekezni).
Már arra is gondoltam, hogy én magam definiálok helyzeteket, és ezeket priorizálom, majd ezekre mindre csinálok egy valamilyen cselekvést. Pl.:
1. lövik a bázist.
2. lövik az egyik hajót.
2.a. ezekből azzal foglalkozok, amelyik a legsérültebb
2.b. ezekből azzal foglalkozok, amelyiket a legtöbben lövik
3. ha senkit nem lőnek
3.a akkor veszem azt a hajómat, amelyik a legközelebb van az egyik ellenfélhez, és azzal lövök
3.b akkor, ha a bűzisom közel van valakihez, akkor megpróbálok távolabbra kerülni
...

Szóval valami ilyesmi, és ezeket "egyszerű" if-ekkel is meg lehetne csinálni.
Carlos          2009.06.05 12:37
kuzanth
Érdekelne, hogy a játékomhoz (Galactic Warfare) milyen típusú m.i.-t javasolnátok?

Szerintem neked az összes pontra szükséged lenne az előző hozzászólásomból.
Szepi          2009.06.04 17:21
http://www.spectrum.ieee.org/computing/software/bots-get-smart

csak egy kis kotekedeskent
mint ebben a cikkben is latszik azert a kutatok se csak 2.Kétszemélyes, teljes információjú játékokkal foglalkoznak. sot! az itteni egyetemen az AI nagyon nagy vagyis igazabol a machine learning.. szoval itt az egyik fo projekt a poker ami nem ketszemelyes es nem teljes informacios
de persze a dama meg a go meg ezek is vannak amik mind azok..
Kuz          2009.05.24 03:00
Demo még nincs, de ebből sztem mindent ki lehet találni :
Jótyúb múvííí
Kapitany          2009.05.23 14:25
Galactic Warfare demót lehet-e valahol találni? Úgy egyszerűbb lenne az ötletelés.
Kuz          2009.05.22 19:01
Érdekelne, hogy a játékomhoz (Galactic Warfare) milyen típusú m.i.-t javasolnátok? Soha nem foglalkoztam még ilyen dologgal, de lassan jó lenne valamiféle gépi ellenfelet beüzemelni.. Életem egyetlen m.i.-s feladata egy kő-papír-olló webes játék volt, amire kellett valamiféle webservice-t írni, de ide ez nem releváns tapasztalat.
Carlos          2009.05.22 08:30
Jó kis összefoglaló, akár egy cikksorozat kezdete is lehetne. A téma persze szinte kimeríthetetlen, hiszen gyakorlatilag mozgó célpontról van szó, de kétségkívül nagyon érdekes.

Csak néhány kapcsolódó témakör, ami eszembe jutott hirtelen:


    1 az egység felvértezése (ideiglenes) memóriával, (korlátozott) látókörrel,
    2 üzenetküldés - fogadás, egységek / objektumok közötti kommunikáció (Mediator és Observer minták)
    3 állapotok kezelése (State minta)
    4 autonóm ágensek és mozgásformák (Reynolds-féle)
    5 útvonal kereső algoritmusok (Dijkstra, A*, stb.)
    6 fuzzy logika
Bitsculptor          2009.05.19 12:53
feladom..nemtok linkelni
Bitsculptor          2009.05.19 12:52
Ok, majd összeszedem ami kellhet neked prototipusból.
Ami a linkeket illeti:

[url= locking]AI">http://gpwiki.org/index.php/VB:Tutorialslocking]AI tömegek kezelésére[/url]
eeking_and_Fleeing">AI üldözésre/menekülésre

Ezek Visual Basic alapú tutorial-ok, ha gondolod lefordítom neked a lényeget DBP-re.
Prototipust meg ezt is (amennyiben kell) msn-en
Adatlapomon megtalálod a címet.
Szidi_Rezegh          2009.05.19 12:14
Bitsculptor

A MOHAA-ban csalásnak számít hogy egy ellenséges katona anélkül, hogy elvileg tudná hogy ottvagyok simán kiszúr fehér ruhában a téli erdőben lopakodás közben pedig mégcsak nemis arra nézett, és persze egyből el is talál minden célzás nélkül easy-n?


Hát én is ilyenfajta csalásokra gondoltam. Pl: Empire Earth-ben teleépíti a pálya felderítetlen sarkát repterekkel és szórja rám az atomot, pedig elvileg semmi pénze nincsen már. Eléggé más lesz a játékélmény.
Az RTS prototípusod érdekelne, megdobhatnál egy linkkel.
Bitsculptor          2009.05.19 06:04
Szidi_Rezegh
Jómagam a cikk utolsó részéből, RTS,FPS játékokbeli konkrét megoldásokról olvasnék el egy újabb teljes cikket, hogy fejlesztőként milyen módszereket érdemes kipróbálni.


Ha érdekel a téma, egyrészt van pár link erről a témáról, illetve van 1 régi RTS prototipusom valahol, ha gondolod előkeresem és megnézheted az AI-t benne.
Bitsculptor          2009.05.19 05:59
A MOHAA-ban csalásnak számít hogy egy ellenséges katona anélkül, hogy elvileg tudná hogy ottvagyok simán kiszúr fehér ruhában a téli erdőben lopakodás közben pedig mégcsak nemis arra nézett, és persze egyből el is talál minden célzás nélkül easy-n?
Kuz          2009.05.15 07:16
Ott inkább az volt a gáz, ha nehéz fokozaton ki volt kapcsolva a 'catch-up'. Feltételezem ez volt benne az a bizonyos csalás, amit a cikk is említ, és amire én is céloztam (gondolom ezzel tették izgalmasabbá a játékot...legalábbis ezzel akarták azzá tenni ).
Asylum          2009.05.15 05:19
hát az underground 1-ben nehéz szinten az életbe nem lehetett behozni hacsak el nem rontotta...
Kuz          2009.05.14 16:59
Nem csak negatív csalást csinál a gép, hanem pozitívat is, ha már az nfs jött szóba. Gyakorlatilag bárhonnan behoz, de ha leelőz, akkor egy idő után te is be tudod hozni őt. Mondjuk az újabbakban már ezt kevésbé lehet észrevenni.
Kapitany          2009.05.14 11:33
Szerintem a csalás megengedhető, ha nem megy a játékélmény rovására, nem teljesen nyilvánvaló és nem válik bosszantóvá.
Asylum          2009.05.14 07:27
Hát gondold el mi lenne ha pl. a nfs-ben nem csalna a gép: elsö körben lehagynád 200000 km-re és akkor ki ellen versenyzel? (egyébként az undercoverben ez tipikus).
Szidi_Rezegh          2009.05.13 15:05
Érdekes kis áttekintő cikk, nekem úgy tűnt inkább felhasználói oldalról közelíti meg a témát, mint fejlesztőiről. Jómagam a cikk utolsó részéből, RTS,FPS játékokbeli konkrét megoldásokról olvasnék el egy újabb teljes cikket, hogy fejlesztőként milyen módszereket érdemes kipróbálni.

Kérdés: szerinted mennyire etikus, ha egy játék csal? Érdemes kerülni, mert a játékos becsapva érzezheti magát, vagy megengedhető, ha ettől izgalmasabb lesz a játék?