Bár a cím azt is sugallhatná, nem az elmebetegekről fogok írni. Nem is tudok annyit róluk, hogy érdemben tudjak a témáról nyilatkozni, de ha tudnék is, akkor sem hiszem, hogy akarnék.
Ez a bejegyzés inkább afféle esettanulmány arról, hogy a korábbi fejtegetéseimet hogy lehet a “gyakorlatba” átültetni.
A Google AI Challenge általában egy olyan feladat, ahol írni kell egy programot, ami más programok ellen játszik egy egyszerű játékot. Volt már Tron, volt Planet Wars, és nemsokára lesz egy hangyás. Ez utóbbi arról szól, hogy van egy terület, rajta néhány hangya, akik kaját keresnek, hogy szaporodjanak, és ha összetalálkoznak, akkor harcolnak. Bár ez nem a feladat része, én ebben a bejegyzésben arra fogok koncentrálni, hogy a hangyákat egyedként kezeljem, és az egyének viselkedéséből alakítsak ki egy csoportos stratégiát (a blogon már korábban említett emergence témaköre). Az egyének viselkedéséhez pedig egy szükségleti piramist fogok alkotni.
Hogy is lássunk hozzá? Négy lépésre lesz szükségünk:
- A szabályok megértése
- Célok meghatározása
- Cél alapján a hozzá kapcsolódó szükséglet meghatározása
- Szükségletek priorizálása és csoportosítása
Először akkor írjuk le, hogy mik a szabályok:
- Pontot ellenséges hangyák megölésért kapunk
- A hangya X távolságra lát
- A hangya Y távolságon belül harcol (X > Y)
- A hangya akkor éli túl a harcot, ha hozzá képest Y távolságon belül több baráti hangya van, mint ellenséges
- Ha a kajához képest Z távolságon belül hangya van:
- Ha egyféle, akkor olyan hangya lesz a kaja helyén
- Ha többféle (azaz harci helyzet) akkor a kaja megsemmisül
Célok -> Szükségletek
- Minél több baráti hangyát szeretnénk -> Menjünk közel a kajához, ha látunk
- Minél nagyobb területet szeretnénk átfésülni kajáért -> Álljunk távolabb a többi hangyától
- Túl szeretnénk élni a harcot -> Ha kevesebben vagy ugyanannyian vagyunk, meneküljünk
- Szeretnénk ellenséges hangyákat ölni -> Járjunk csapatban
- Szeretnénk ellenséges hangyákat ölni -> Ha többen vagyunk, rohanjuk le
- Jobb, ha megsemmisül a kaja, mint ha ellenséges hangya lesz -> Előbb vagy egyszerre érjünk a kaja hatósugarába, mint az ellenséges hangya, ha van olyan
- Keressünk kaját -> Mozogjunk valamerre
És most jön a feladat legkomolyabb kihívása: a mérlegelés. Minden célra meg kell mondanunk, mennyire fontos, majd eszerint meg kell alkotnunk a piramist. Ki kell találnunk, hogy vannak-e olyan igények, amik egyenrangúak – egymástól függetlenek, de a fölöttük lévőknél fontosabbak – és ezeket egy szintre kell helyeznünk.
Az elsőre a legegyszerűbb módszer az összefésüléses priorizálás: fogok egy elemet, majd végignézem az eddig megalkotott prioritási listát, és megkeresem, melyik a legalsó elem, aminél még fontosabb, és az alá helyezem el. (ebben az elrendezésben alul lesz a lista legfontosabb eleme, ami megfelel a szükségleti piramis felépítésének)
Ezt nem lehet olyan nagyon látványosan megoldani egy ilyen bejegyzésben, úh inkább leírom az így kialakult listát (még1x: alul a fontosak):
- Mozogjunk valamerre
- Járjunk csapatban
- Álljunk távolabb a többi hangyától
- Menjünk közel a kajához
- Ha kevesebben vagy ugyanannyian vagyunk, meneküljünk
- Ha többen vagyunk, rohanjuk le
- Előbb, vagy egyszerre érjünk a kaja hatósugarába az ellenséges hangyával, ha van olyan
Miket vonhatunk össze:
“Előbb vagy egyszerre érjünk a kaja hatósugarába.. ” Ez fontosabb, mint a második, mivel annak egy speciális ágát fejti ki. Nem összevonhatóak.
“Ha többen vagyunk / Ha kevesebben vagy ugyanannyian vagyunk” – kezdődik a következő két sor. Mivel egymást kizáró a feltétel, ezek a sorok egymástól függetlenek, így összevonhatóak egy szintre. Mindkettő fontosabb, mint a következő.
“Menjünk közel/Álljunk távolabb/Járjunk csapatban” Kössük össze az élelemszerzést azzal, hogy “falkában” járunk. Így biztosítjuk, hogy nem kószál el egy hangyánk kajanyomot követve, de erre utaló mozgásával húzza maga után a csoport többi tagját is, így van esélye eljutni az ételhez akkor is, ha az egy kicsit kiesik a látóköréből.
“Mozogjunk valamerre” Már csak egy maradt, nevezzük ezt önmegvalósításnak
Hogyan viselkedik az egyedünk? Ha kaját és ellenfelet is lát, megbecsli, hogy van-e esélye a kajához előbb v 1xe odaérni az ellenséges hangyával. Ha igen, akkor elkezd teperni.
Ha nem így történik, akkor a harci szituációt értékeli ki: “van esélyem hangyát ölni és túlélni?”. Ha igen, megpróbálja, ha nem, olyan irányt választ, amerre a legnagyobb esélye van elkerülni a harcot.
A következő szempont az ételszerzés a falkával: Ha látunk valahol kaját, akkor megyünk arra, ha ez csapatban megoldható. Ne felejtsük el, hogy ide már úgy jutunk el, hogy megvizsgáltuk és elvetettük a kajáért harcolást. Laza falkát építünk, hogy sokat lássunk a területből, de legyen közel a védelem, ha kell.
Ha viszont semmi ilyesmi nincs, vagy több, egyformán jó megoldás közül választhatunk, akkor választunk egy irányt, és arra mozgunk.
A valós probléma egyébként ennél sokkal bonyolultabb, de ez már egy jó alapozás, amiből nyerő stratégiát lehet alkotni. Legközelebb valószínűleg arról írok majd, hogy miyen módon lehetne az MMO-kban hasznát venni ennek.

