... Gergő: Mutáció

Kutatási anyag - 2007

 

Először is üdvözlök minden kedves olvasót. A most bekebelezni készült szellemi táplálék eléggé nehezen emészthető. Ennek nem az az oka, hogy bonyolult felfogni, vagy mert túlságosan tele lenne szakszavakkal, hanem az, hogy túlságosan egyszerű. Mentségemre legyen mondva hogy az igazán nagy dolgok mindig egyszerűek. Minél egyszerűbb valami, annál érthetőbb, annál nagyszerűbb. Mielőtt a dolgoknak a közepébe csapnék, had ismertessek egy ismeretlen szerzőtől származó, gondolkodás nélkül elfogadott dogmát: "Programok véletlenszerű generálása nem vezet eredményre." Amellett, hogy bebizonyítom a dogma tévedés voltát, megpróbálok az egyértelműségre törekedni. Sajnálatos módon ez a cikk már több helyre került ki, de az óriási tiltakozások hatására "nagy cégeknél dolgozó elismert és híres szakemberek" (ezt minden esetben ők mondták magukról) mindig elérték hogy gyors ütemben lekerüljön. Kérek mindenkit, hogy az anyagot mindenki saját belátása szerint, előítéletek nélkül szemlélje.

 

Vajon mi az élet értelme? Hogyan épülnek fel az élőlények? Senki sem tudja. Persze sokan dolgoznak az emberi génállomány megfejtésén, a gének módosításán, de tulajdonképpen senki sem tudja hogy hogyan működik, az emberek csak találgatnak. Azt mondják, hogy a számítógép képtelen az élő szervezet teljes szintű modellezésére, hisz a programok fixek, nem változhatnak. Mások pedig olyan módszereket dolgoztak már ki korábban, amelyekkel szimulálni lehet pl. az ember szaporodását. Ezek mind óriási tévedések, hisz általában mind ugyanarról szólnak: nagyon bonyolult tudományos szakszavakkal létrehoznak egy 10 dimenziós tömböt és elnevezik ELŐLÉNY-nek, és randomra, szülők értékei alapján értékeket írnak a megfelelő helyekre, úgy mint IQ, vagy testmagasság... Szerintük ez a fejlődés csodálatos, aranykoronás számítógépre való átültetése. Szerintem pedig nem.

 

 

Az emberek a mesterséges intelligenciáról teljesen téves véleménnyel vannak, hisz azt, aki nem rendelkezik ezzel kapcsolatos programozási tapasztalattal, könnyű megtéveszteni és kétségek között tartani. Vannak emberek, akik büszkék arra hogyan képesek leprogramozni pl. egy katona célzási és manőverezési készségeit. Valóban, ez tényleg szép és jó, hiszen pénzt lehet keresni azzal a játékkal amibe ezt implementálják. Ezt a dolgot megalkotni - bármennyire is tűnik nehéznek egy olyan ember számára aki tapasztalattal nem rendelkezik ezzel kapcsolatban - rendkívül egyszerű. Ez a módszer viszont a valódi fejlődés lemodellezése szempontjából teljesen téves, hisz valójában az a katona sohasem fog elkezdeni önálló, előre nem leprogramozott taktikát összeállítani, új parancsokat kitalálni és bevezetni a társainak, kiiktatni magából azt a "bugot" hogy a füstgránáton nem lát át, megnövelni a saját sebességét ilyen-olyan előre nem beleprogramozott trükkökkel. És itt látszik hogy mi is a probléma ezzel, és hogy ez a módszer miért lehetetlen a fejlődés valódi modellezésére. A baj ott kezdődik hogy az emberek szinte kivétel nélkül ebből a módszerből kiindulva szerették volna a fejlődést lemodellezni. Érthető hogy ők kivétel nélkül kudarcot vallottak. Ehhez a módszerhez azok a kutatóintézetek ragaszkodnak görcsösen, akik egy ilyen modellből már több megányi forráskódot megalkottak. Nem szeretnék tudomásul venni hogy ugyanott vannak, mint mikor a forráskód még csak 10 kbyte volt és beleöltek sok milliót a semmibe. Persze ez így nem igaz, hisz azt a fajta mesterséges intelligenciát remekül alkalmazhatják majd számítógépes játékokban, csak az általuk kinézett célt nem fogják elérni.

 

A módszer amelyet bemutatni fogok, nem mesterséges intelligencia. Játékokban és egyéb alkalmazásokban, ahol a szokványos mesterséges intelligenciát kell alkalmazni, önmagában teljesen használhatatlan lenne, nemcsak jelenlegi formában, hanem jelentős átalakítás után is. Ismét csak nem a fejlesztési idő vagy a belefektetett energia lenne a gond, de senki sem szeretne mondjuk egy játék indulásánál napokat várni arra, hogy az ő teljesen egyénileg kialakított embereit megkapja (vagy mégis?... ;)). Hogy mi is történik pontosan, mi a módszerben az igazán rendkívüli, azt igazából magatoknak kell felismerni, hisz nem lehet 1 vagy 2 mondattal leírni.

 

Most pedig vizsgáljuk meg, hogy a mi kis mini-élőlényeink mégis mi alapján működnek. Számítógépekről van szó. Mi más lehetne az "élőlény" mint egy futó program? Mi más lehetne a környezet mint az operációs rendszer? Mi más lehetne a szaporodás feltétele, mint a megfelelő sebességgel történő szaporodás, a megfelelő mennyiségű folyamat megszülése, és a processzoridőhöz jutás? Fentebb már ismertettem, hogy mi az az elv, ami kerülendő. Természetesen én magam már megvalósítottam az ebből a szempontból kerülendő elven is bizonyos ezzel kapcsolatos szimulációkat, és mivel ez az egyetlen használható, és valóban működő elv, ennek a speciális megoldásnak a bemutatása mellett döntöttem. Az elv ütközik a fent ismertetett dogmával, így a kísérlet(sorozat) egyik folyománya és bizonyítéka nem más, mint az, hogy az adott dogmát kénytelenek leszünk törölni, hisz bizonyíték fog keletkezni annak hamisságára. Tehát a élőlényeink kis mini-folyamatok lesznek, amelyek amellett, hogy önmagukat reprodukálják, a gyermekeik kódját szabadon kialakított szabályzataik alapján tetszőleges módon állíthatják össze. A dolgot kicsit ha megnézzük a dogma  oldaláról, rájövünk hogy logikus a dogma, hisz gondoljunk csak bele, ahhoz hogy valódi fejlődést érjünk el nem elég pár random utasítást belevakarni bárhova is, hisz a program nem fog semmilyen értelmes dolgot csinálni. Nos, igen. Csakhogy nem "ész" nélkül kell azokat az utasításokat belevakarni. A dogma nem számol a "tudatossággal".

 

A vizsgálódást a nagyon egyszerű alap-algoritmusnak a megírásával kezdtem (az eljárás kitalálása és leprogramozása 1 napomba telt). Kicsire vettem a mutálódás esélyét, hisz a mutáns program túlélési esélye kicsi, a gépi kódú utasítások módosulása a program lefagyását okozhatja, tehát az adott folyamat nem lesz képes a "génjeit" (kódját) továbbörökíteni az utódjainak. A hibás program éppen ezért nem indul el, nem szaporodhat tovább, elpusztul. De mi van azokkal a programokkal, melyek sikeresen örökítik és módosítják az utód kódját? Majd meglátjuk.
 

Tehát nézzük csak mi is történhet:
- A program átírhatja saját magát, a vázolt algoritmus megváltoztathatja a feltételvizsgálatokat, átírhatja az inicializálást.
- A program fennmarad, és jobban szaporodik
vetélytársainál, ha sikerül neki processzoridőt szereznie, vagyis ha egyszerűbb, hamarabb lefut, hamarabb szaporodhat, a többi program elpusztul, mert várakozni kényszerül a processzoridőre, ezért időről-időre várakozni kényszerül és csökken az utódlás valószínűsége.
- Ha a programot komplex feltételvizsgálattal írjuk, majd a feltételekhez kötünk olyan cselekedeteket, mint pl. valamiből előállítható fájl törlése, valami beolvasása, stb., akkor egy idő után a mutációkból előáll egy olyan program, amely a feltételvizsgálatokat oly módon fogja előállítani, hogy az egy adott cél
érdekében a program további szaporodását segíti elő.
- És még számos olyan dolog, ami meglepetésként fog érni minket. A fejlődés szinte követhetetlen, és mindig óriási újdonságokkal fog meglepni minket.

 

Számolnunk kell továbbá:
- Teljes mutációval, melynek során az elődtől egy teljesen új, elkülönülő, mégis életképes "faj" jön létre.

- Korcsosulással, bár a szó negatív hangvételű, mégis lehet jó és rossz is. Ez a program kismértékű, látszólag céltannak tűnő belső módosulását jelenti. A mutáció egyben korcsosulás is.
- Elpusztulás: a program elpusztulhat ha az inicializálása nem megfelelő, mert így módosult.

- Elhalás: a program utódjai életképtelenek vagy maga a program szaporodó-alrendszere negatív irányban működésképtelenre korcsosult.




 


 

Nézzük az első kísérletet:

Az algoritmus bármit módosíthat magában, rémisztő belegondolni, hogy egy ilyen, többmillió generáción át tenyésztett szaporulat mivé válna. Egy estére hagytam ott a gépet a kolóniával, bár egy nagyon régi, 400-as gépen néztem ráadásul vmware alatt, tehát ez egy modern, virtualizáció nélküli modern gépen kb. pár órának felel meg. Az előálló mintákat másnap elemeztem. A végeredmény döbbenetes volt számomra.
 

Több törzs alakult ki a programból:
- E törzs (eredeti), 11315 bájt hosszú
- EM törzs, E-ből fejlődött ki, 11314 bájt hosszú
- EB törzs, E-ből fejlődött ki, 11352 bájt hosszú
- EP-UV, E-ből fejlődött ki, 11315 bájt hosszú, a program
módosítja a kimeneti állomány nevét a variációk sokszínűsítésének érdekében (későbbi szelekciós előny).
- EP-UH, E-ből fejlődött ki, 11315 bájt hosszú, a program
módosítja a kimeneti állomány nevét a variációk
sokszínűsítésének érdekében, de teljesen más módszert
talál ki, mint az előző (későbbi szelekciós előny).
- EP-GM törzs, az E törzs fokozatos korcsosulásából keletkezik.

 

Az ábra alapján EB és az EP-GM törzsek továbbfejlődése, a többi törzs lassú elhalása a legvalószínűbb.

További érdekes dolgok:
- Az egyik példány valahonnét kipiszkálta a jelszavam és a felhasználónevem.
- Az egyik példány utódait kihelyezte a kezdőkönyvtárból, bár az utódok már nem tudtak elindulni.
- Az egyik példány ugrásszerűen megnövelte az utódok számát "génátörökítésének" növelése miatt.

A második kísérlet:

Ezt a tenyészetet másfajta megvilágításban vizsgáltam. Célom a dogma cáfolására az egyértelmű bizonyíték megtalálása volt. A második kísérletbe a lefordított minta méretileg 15 kbyte volt, mert másik rendszer alatt végeztem, és a kódot is felfejlesztettem valamilyen szinten. A második kísérletben előállt egy alfaj, aminek mérete több mint 2 kbyte-tal kevesebb volt mint az eredeti programnak, és még mindig rendeltetésszerűen működött (tehát szaporodott és az utódjai is szaporodtak) ezért javulás állt be. Mivel a program méretének csökkenése a program működése szempontjából nem volt káros, ezért a program fejlődött. A dogma kimondja, hogy fejlődés nem állhat be, de mivel a bizonyíték itt van a kezünkben, ezért ezennel a dogmát megsemmisítem.

 

Hogy mindenki kipróbálhassa a saját szemével, ITT van maga a kitárgyalt program, illetve az első kísérletben szereplő eredeti program. Futtatása linuxot igényel, ajánlott hogy NE legyen virtuális memória bekapcsolva a rendszerben. SMP kernel, legalább 1 gbyte RAM, 3 ghz-s ikermagos processzor, és 100 gbyte-os szabad hellyel rendelkező merevlemez használata ajánlott. Futtatása:
chmod +x szap
./szap

 

Vissza a nyitólapra