Mesterséges élet: darwini programozás
Képes-e szaporodásra a számítógép?
Tele-víziók
Takács Barnabás rovata / takacsB@digitalElite.net
Alife
A mesterséges élet (artificial life vagy egyszerűen "alife") gondolatával csak az utóbbi évtizedben kezdtek el foglalkozni a tudósok. A mesterséges intelligenciához (AI) hasonlóan ez az interdiszciplináris kutatási terület is sok különböző tudományág határán helyezkedik el, így a számítástechnikán kívül a fizikához, a matematikához, a biológiához, a kémiához és - meglepő módon - a közgazdaságtanhoz, sőt a filozófiához is kell valamennyire értenie annak, aki ezzel szeretne foglalkozni. A látszat ellenére az "alife" nem azonos a mesterséges intelligencia kutatásával vagy a biológiai rendszerek szimulációjával. Célja az élet alapvető folyamatainak megértése és modellezése olyan szinten, hogy ebből új létformákat hozhassunk létre, illetve saját életünk mechanizmusait - talán értelmét is - jobban megérthessük. Míg a biológusok és AI-kutatók komplex rendszerek és folyamatok analitikus megértésével foglalkoznak, az "alife" inkább egyszerű viselkedésekre és túlélési sémákra összpontosít, amelyekből szintézis segítségével - alapvetően igen egyszerű sejtekből - egyre bonyolultabb és bonyolultabb "lényeket" próbál meg létrehozni. Nincs tehát másról szó, mint a számítógép memóriájában létező lények evolúciójáról és minél tökéletesebb adaptációjáról egy adott környezet körülményeihez.
Neumann hagyatéka
Neumann János nevét a világ a modern számítógépek feltalálójaként ismerte meg. Még ma is kevesen ismerik a mesterséges élet és a modern genetika fejlődését elősegítő kutatásait. Neumann idejében még nem volt modern genetika, és nem ismertük az emberi öröklődés mechanizmusának alapjait sem. Így legfőbb vizsgálódásának tárgya a reprodukció logikájának megértése volt. Neumann nem kisebb eredménnyel gazdagította a tudományt, mint - a mesterséges élet lehetőségét keresve tisztán matematikai alapokon jutva el a következtetésig - hogy bármilyen szaporodási vagy reprodukciós folyamat csak akkor lehetséges, ha ugyanazt a biológiai vagy matematikai kódot két különböző módon értelmezzük. Az első fázisban az összeszereléshez szükséges utasításként, míg a második fázisban egyszerű adatként, amelyet az utódnak a további generációk életképessége miatt örökölnie kell. A Neumann halálát követő évtizedben megszületett a modern genetika, s első nagy eredményeként azt bizonyította, hogy a természet, úgy tűnik, "adaptálta Neumann ötletét", és valóban ezt a két mechanizmust választotta minden élet alapjául. A folyamat, amely a DNS formájában kódolt összeszerelései utasításokból működő gépeket, azaz proteineket gyárt, a valóságban is e kettősségen alapul. A biológusok ezt a két lépést a transzláció és transzkripció mechanizmusaként tartják számon.
A mesterséges élet algoritmusainak alapja tehát mindig egy egyszerű sejt, amely bizonyos funkciókat képes ellátni, például a környezetéből információt gyűjteni, majd annak függvényében egyetlen jelet kiadni (mesterséges neuron), öröklődéssel osztódni, valamint a környezethez alkalmazkodni. Ezekből az igen egyszerű elemekből azután bizonyos szabályszerűségek figyelembevételével bonyolult rendszerek építhetők fel, amelyek különböző komplex funkciók ellátására képesek. Neumann modellje az ún. celluláris automaták elvén alapul.
Celluláris automaták
A celluláris automaták működésének lényegét röviden úgy érzékeltethetjük, hogy elképzelünk egy nagy négyzethálót, ahol sakktáblaszerű elrendezésben minden egyes kocka egy sejtnek vagy más szóval elemnek felel meg. Ezek az elemek bármely adott pillanatban különböző színekkel jelzik, hogy éppen mit csinálnak vagy milyen belső állapotban (internal state) találhatók. A rendszer működése során minden elem végzi a maga feladatát. Ezt mi kívülről úgy érzékelhetjük, hogy látjuk, amint a színüket egyszerre változtatják. A hálózat összes eleme ugyanazt a szabályt (rule) alkalmazza saját következő állapotának megállapítására. Ez a szabály úgy fogalmazható meg, hogy "az új szín csak a pillanatnyi színtől és a négy közvetlen szomszéd színétől függ". Például egy kétszínű (fekete/fehér) tábla esetén mondhatjuk azt, hogy a sejt következő színe legyen fekete, ha páratlan számú fekete szomszédja van, és fehér, ha nem. A rendszer kiinduló állapota lehet pl. egy kép, ahol a fekete és fehér kockákból egy ábra rajzolódik ki. A számítás folyamatát az a lépéssorozat jelenti, amely ebből a kezdeti állapotból lépésenként egy olyan végső és stabil állapotba juttatja a rendszert, ahol az egyes cellák színe már nem változik tovább.
Neumann ezen egyszerű matematikai modell segítségével építette fel automatáját, amelyet univerzális konstruktornak nevezett. Az univerzális konstruktor bármilyen automata létrehozására képes a fenti értelemben vett transzláció és transzkripció módszerének felhasználásával (ne felejtsük el, akkor ezek a kifejezések még nem léteztek). Ha történetesen a kódolt üzenet azt tartalmazza, hogy építsen egy másik univerzális konstruktort, akkor nyilvánvalóan képes lesz önmagát is újrateremteni és újabb életképes automatákat létrehozni, egyszóval szaporodni. Ennek a gondolatsornak a segítségével Neumann azt mutatta meg, hogy egy mesterségesen létrehozott gép képes szaporodni. Azért ne gondoljuk, hogy ilyen egyszerű az élet. A fenti két sor bizonyítása matematikailag meglehetősen bonyolult, pontosabban egy egész könyvet igényelt, amely csak Neumann halálát követően, posztumuszként jelent meg kollégája gondozásában, 1966-ban. Az univerzális konstruktor elmélete olyan szilárd matematikai alapokon nyugodott, hogy a következő általánosan elfogadott mesterségesélet-modell, amely képes volt önmagát reprodukálni, csak majdnem három évtizeddel - igen, jól olvasták -, 28 évvel később, 1984-ben született meg.
Darwini programozás
Neumann munkássága során a szaporodás és az önmagukat reprodukálni tudó gépek elméletére összpontosított. Nem vette figyelembe, hogy az újra és újra felépített hardver - a másolás folyamatába becsúszott hibák vagy a körülmények változásához jobban illeszkedő szoftvermódosítások segítségével - egyre hatékonyabbá tehető. Napjainkban a programokat emberek, azaz számítástechnikusok, programozók, matematikusok vagy egyszerűen - a szó jó értelmében vett - laikusok írják saját kedvtelésükre. Mi lenne, ha továbbvinnénk Neumann gondolatát, és az univerzális konstruktor programját is módosítani tudnánk az evolúció elvének figyelembevételével? Ennek eredményeképpen született meg a genetikus programozás (genetic programming) módszerének fogalma, amely végeredményben nem más, mint azonos problémát megoldó programok seregének együttes, párhuzamos fejlesztése. A módszer a számítástechnikusok által jól ismert genetikus algoritmusok (genetic algorithms) elvén működik. Míg egy programozó egyszerre csak egyetlen programon dolgozik, javítja és továbbfejleszti, a genetikus programozás több, kissé eltérő, de ugyanazt a problémát megoldó program populációjából indul ki, amelyből újabb és újabb verziókat hoz létre az öröklődés és a mutáció elvének segítségével. Az új programgeneráció minden egyes egyedét kiértékeljük, és ha a funkció ellátására alkalmasnak találjuk, akkor meghagyjuk, egyébként eltávolítjuk (szelekció). Nyilván minél jobb egy program egy konkrét feladat végrehajtásában, annál nagyobb az esélye a túlélésre. Elvileg tehát egyre tökéletesebb programok sorozatát kapjuk, míg a folyamat végén elérünk ahhoz a programhoz, amely hibátlanul oldja meg a feladatot.
Az elmélet gyakorlati alkalmazásához sok-sok iterációra van szükség. A legnagyobb gondot a szelekció feltétele (kritériuma) jelenti, azaz hogy miként döntsük el, melyik programunk áll közelebb a tökéletes megoldáshoz. Az élővilágban ezt a funkciót a túlélésért folytatott harc helyettesíti, a gyengék elhullanak, az erősek megerősödnek. A genetikus programozó ránk bízza, melyik programot hagyjuk meg vagy dobjuk el. Ha például egy robotot arra szeretnénk megtanítani, hogy dobozokat rakjon egymásra, akkor attól függően, hogy az egyes programok ezt a feladatot milyen jól végezték el, osztályozhatjuk azokat. Ez az osztályzat azután eldönti, hogy mennyire életképesek. Maga az evolúció azonban emberi beavatkozás nélkül történik. John Koza, a módszer feltalálója több feladat megoldására is sikeresen hozott így létre programokat. Programozni tudó olvasóinknak azonban nem kell túlzottan aggódniuk. Valószínűleg még nagyon sokáig nem ilyen módszerekkel fognak a Windows új verziói elkészülni :-).
Digitális élet
A fentiekben azt próbáltuk meg dióhéjban áttekinteni, hogy milyen elvekkel és módszerekkel hozhatunk létre olyan önmagát reprodukálni és továbbfejleszteni képes mesterséges lényt vagy rendszert, amely az élet biológiai definíciójának minden tekintetben eleget tud tenni. Mi történik azonban akkor, ha ezeknek a lényeknek különböző szintű értelmet és intelligenciát adunk, ha racionalitásukat felülbíráló digitális érzelmekkel (!) látjuk el őket, ha a ma elterjedt hagyományos számítógépeink helyett kémiai és biológiai folyamatokon alapuló molekuláris számítógépeket használunk megvalósításukra, vagy ha a számítógép memóriáján belül társadalomba szervezzük őket? Ezekre a kérdésekre a mesterséges életről szóló cikkünk második részében, a jövő hónapban adunk választ.
Könyvek:
1. J. von Neumann: The Theory of Self-Reproducing Automata (University of Illinois Press, Illinois, 1966). Edited and completed by A. W. Burks.
C. G. Langton: Self-reproduction in cellular automata (Physica D, 10., 135-144., 1984).
J. R. Koza: Genetic Programming (The MIT Press, Cambridge, Massachusetts, 1992).
T. S. Ray: An approach to the synthesis of life (In: Artificial Life II, volume X of SFI Studies in the Sciences of Complexity [editors: C. G. Langton, C. Taylor, J. D. Farmer and S. Rasmussen], 371-408., Redwood City, CA, 1992, Addison-Wesley.