A lentebb említett emergence kapcsán gondolkoztam el azon, hogy pályaépítést szeretnék ahhoz hasonló módon csinálni. A lényeg a valószerűség. Vannak apró egységeim, amikre definiálok néhány szabályt, majd véletlenszerűen elhelyezem őket egy terepen. Innentől az egységek olyan módon módosítják lépésről lépésre az állapotukat, hogy a szabályok alapján kedvezőbb pozicióba kerüljenek. Minden lépésben minden egységre meghívom ezt az állapotjavító függvényt, és figyelem, hogy hány egység változtatott. Ha a passzív – elégedett – egységek száma elér egy bizonyos %-ot, mondjuk 80-at, akkor megállok, és ha elég ügyesen definiáltam a szabályokat, akkor a pályám kialakult – véletlenszerűen.
Nyilván itt is oda kell figyelni egy pár dologra:
- Megfelelően sok és szigorú szabállyal el lehet azt érni, hogy bármilyen kezdőállapot ugyanahhoz a végállapothoz vezessen. Ezt nem akarom.
- Ugyanakkor elég szigorú szabályok kellenek, hogy a végkifejlet megfeleljen az elvárásoknak, ne csak egy véletlenszerű kaotikus valami maradjon. Ezt legkönnyebben emberi aggyal lehet ellenőrizni.
- Lehetnek oszcilláló végállapotok. Ez azt eredményezi, hogy minden lépésben pontosan ugyanannyi egység mozog egy olyan állapotba, amiből aztán az előző állapotba kerül vissza. Így folyamatosan van változás minden lépésben, de összességében pontosan ugyanabban a helyzetben leszünk folyamatosan. Ha ez még azelőtt beáll, hogy elérnénk a kritikus passzív tömeget, akkor soha nem fejeződik be a generálás.
Nézzünk egy egyszerű példát:
- Tengeren akarok szigeteket alkotni. A magassággal nem törődöm, csak azzal, hogy az adott pont víz vagy szárazföld.
A kiindulási pontom egy óriási tengerszelet, amelyre pici – egységsugarú – úszó szigeteket helyezek el.
A szigeteknek a következő viselkedést definiálom:
- Ha nincs közvetlen szomszédod, nézd meg, merre van a legközelebbi kis sziget, és mozogj felé.
- Ha van közvetlen szomszédod, ne csinálj semmit.
Ez a viselkedési minta több következménnyel is jár:
1: nagyon sok olyan sziget lesz, ahol két pici szigetdarab tapad csak össze. Ez vsz nem megfelelő.
2: Nincs definiálva szabály arra, hogy mi történik, ha egyforma távolságban több sziget is van.
Ez a szabályrendszer a második pontnak megfelelő viselkedést produkál.
Ha kicsit átalakítjuk a szabályt úgy, hogy
- Ha van közvetlen szomszédod, számold meg őket, és ha látsz ennél nagyobb szigetet valahol, mozogj arra
Azzal viszont gyakorlatilag az egyes pontot érjük el, mert minden esetben a végállapotban valahol egy marhanagy sziget lesz.
Ebből a két egyszerű példából is látható, hogy némiképpen bonyolultabb a probléma, mint várnánk. Akarok egy kis testbed-et írni ennek a kipróbálására, egyszerű szabálynyelvvel. Ha lesznek eredmények, rakok fel screenshotokat. (csak ne feledjük: lusta.hu)

Hjah, nem véletlen a hasonlóság az életjátékkal, ha belegondolunk..
a gond az, hogy minden olyan pont, ami egy másik pont mellé vetődött megáll, és nem mozog tovább.
Akkor működhet az algoritmusod szépen, ha nem egyszerre jön létre az összes pont, hanem a szimuláció különböző időpontjaiban, mint az esőcseppek.
Őőő… te most elolvastad tulajdonképpen ezt a bejegyzést?
“1: nagyon sok olyan sziget lesz, ahol két pici szigetdarab tapad csak össze.”