TIERRA Herczeg István ELTE, Budapest, április 28.
Motiváció Sok irányból … Neurális hálózatok, genetikus algoritmusok Evolúciós algoritmusok ill. programozás Párhuzamos architektúrák Robosztus programok Az „unalmas programozás”
Motiváció Murphy’s law Új paradigma Biológiai párhuzamok Igazából multidiszciplináris ismereteket igényel Jövőkép
Mi a Tierra? Spanyol szó, jelentése: Föld Az eredeti tervezési kritérium szerint evolúcióra képes önreprodukáló gépi kód Darwini operációs rendszer Virtuális gép, MIMD emuláció Tulajdonképpen egy szimulátor Tom Ray, 1990
Alapok - Neumann János Theory of Self-Reproducing Automata Tervrajz Φ(X): a gép leírása szalagon Konstruktor A: megépíti az X gépet a tervrajzából: A + Φ(X) -> X Másoló gép B: le tudja másolni egy gép tervrajzát: B + Φ(X) -> Φ(X) Vezérlő C: aktíválja B-t, majd A-t: A + B + C + Φ(X) -> X + Φ(X)
Alapok - Neumann János Legyen X = A + B + C a gép melyet le kell gyártani A + B + C + Φ(A + B + C) -> A + B + C + Φ(A + B + C) Az X gép és Φ(X) szalag önreprodukáló rendszert ad.
Alapok – Neumann János
Egy kis biológia James D. Watson és Francis Crick a DNS szerkezete, 1953 Bázisok T – timin (kicsi) C – citozin (kicsi) A – adenin (nagy) G – guanin (nagy)
Egy kis biológia Két kapcsolódási csoport Adenin – timin (A-T) Timin – adein (T-A) Guanin – citozin (G-C) Citozin – guanin (C-G)
Humán genom project USA Humán genom kb 3mrd bázispár visszafejtése (szekventálása) Bill Clinton Az eredmény nyilvános! Bárki letölthet az emberi genom szekvenciát!
Gyökerek - programozás Darwin programozói játék (1961) Creeper (és Reaper) (1971) Első vírus Core War vagy Core Wars (1984) Redcode nyelv key features: Nincs numerikus utasítás érték Nincs abszolút címzés Alacsony szintű multiprocesszing
Gyökerek - Biológia Az evolúció kutatása Az evolóció egy folyamat, mely a Földön a szén kémia elem segítségével hozta létere az életet Az evolóció elve nem kell, hogy a szénre vagy más kémia elemre korlátozódjon Digitális evolúció
Tierra – Virtuális gép Darwini Operációs Rendszer Soup (RAM) CPU struktúra Utasítás készlet Genetikai Műveletek Alkotó: Tom Ray
Tierra - Darwini Operációs Rendszer Darwini „módon” kezeli folyamatok populácóját Fontosabb részei Slicer Reaper Memória allokáció Genetikai műveletek Zavarok
Tierra - Slicer Kör alakú sor folyamatok számára A Slicer alloklálja a sor minden folyamata számára a CPU időszeleteket Amikor új folyamat születik, a szülője mögé kerül a Slicer sorában
Tierra - Reaper A „kaszás” A Reaper egy sor adatszerkezet folyamatok számára Születéskor a folyamat a sor aljára kerül Ha a memória betelik a Reaper megöli a sor tetején lévő folyamatot
Tierra - Reaper Az idősebb folyamat hal meg előbb Ha egy folyamat hibát generál, egy pozicióval feljebb lép a Reaper sorban A divide vagy mal utasítások sikeres végrehajtása esetén a folyamat egy pozicióval lejjeb lép a Reaper sorban
Tierra – Memória allokáció A folyamatok egy memória blokkal születnek A memória lehet írás, olvasás és végrehajtás jogú Alapértelmezetten írásvádett a blokk A processz csak plussz egy blokkot kérhet
Tierra – Memória allokáció A memória allokáció kapcsolatban áll a Reaper-rel Ha egy memória kérés nem teljesíthető, mert nincs szabad hely, a Reaper megöl annyi folyamatot, hogy legyen hely A memória kérés limitált méretre lehetséges
Tierra – Genetikai műveletek Mutációk Gének összekapcsolása Kereszteződés Beszúrás Törlése Hibák
Tierra - Zavarok A Tierra megölheti a folyamat populációk meghatározott részét bizonyos időpontokban Mind az időpontokat Mind a meghatározott részt a felhasználó paramétereken keresztül szabályozhatja Apokalipszis (Network Tierra)
Tierra - Soup Soup – leves – ősleves Ebben / ezért folyik a „küzdelem” A memória körbe fordul A soup méretét indításkor meg lehet adni
Tierra – CPU struktúra Utasítás mutató, IP Regiszterek (4 db) Stack (10 szavas, visszaforduló) Stack pointer Flag-ek
Tierra – Utasítás készlet Úgy tervezték a Tierra-t, hogy különböző utasításkészletekkel legyen képes működni Az utasítások az Assembly nyelvre emlékeztetnek Ez inkább csak szintaktikai hasonlóság
Tierra – Utasítás készlet Alapvető jellemzők: Utasítás nem „szállíthatja” el a virtuális gépet Kisméretű utasításkészlet, nincsenek numerikus operandusok Template címzés Szinte nincs szintaxis Egyébként hasonló más Assembly-hez
Tierra – Template addressing Nincs numerikus művelet – hogy működik a jmp ? Az ötlet a mulekuláris genetikából jön Hogy találják meg a molekulák egymást? Egymáshoz illeszkedő „formák segítségével”
Tierra – Template addressing Hogyan lehet megvalósítani ezt egy programozási nyelven? Két fajta nop utasítás van: nop0 és a nop1 Ezekből lehet mintát képezni A jmp adott irányba a legközelebbi mintára ugrik Nem ugorhat önmagára!
Tierra – Template addressing Példa: jmp nop0; template 0110 nop1 nop0 ; utasítások nop1; illeszkededő nop0; complementary nop0; template 1001 nop1 ; utasítás
Tierra – Instruction Set #0 No Operations: 2 nop0 nop1 Memory Movement: 11 pushax (push AX onto stack) pushbx (push BX onto stack) pushcx (push CX onto stack) pushdx (push DX onto stack) popax (pop from stack into AX) popbx (pop from stack into BX) popcx (pop from stack into CX) popdx (pop from stack into DX) movcd (DX = CX) movab (BX = AX) movii (move from ram [BX] to ram [AX])
Tierra – Instruction Set #0 Calculation: 9 sub_ab (CX = AX - BX) sub_ac (AX = AX - CX) inc_a (increment AX) inc_b (increment BX) inc_c (increment CX) dec_c (decrement CX) zero (zero CX) not0 (flip low order bit of CX) shl (shift left all bits of CX)
Tierra – Instruction Set #0 Instruction Pointer Manipulation: 5 ifz (if CX == 0 execute next instruction, otherwise, skip it) jmp (jump to template) jmpb (jump backwards to template) call (push IP onto the stack, jump to template) ret (pop the stack into the IP)
Tierra – Instruction Set #0 Biological and Sensory: 5 adr (search outward for template, put address in AX, template size in CX) adrb (search backward for template, put address in AX, template size in CX) adrf (search forward for template, put address in AX, template size in CX) mal (allocate amount of space specified in CX) divide (cell division) Total: 32 instructions
Tierra – Hogyan kell programozni? A rendszer felépítésből adódóan önreprodukáló kódot kell készíteni Amit létre hozunk az un. creature Ez él meg a Tierra-ban Másnak nem sok értelme van A Tierra számos eszközt biztosít, hogy a létrejött „populációt” megvizsgáljuk
Tierra – Hogyan kell programozni? Önreprodukáló creature szerkezete Temlpate Önellenőrzés (méret), self-exam Template Reprodukciós ciklus, reproduction loop Template Másoló eljárás, copy procedure Template
find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx Self-examination save registers to stack 1010 move [bx] -> [ax] decrement cx if cx == 0 jump 0100 increment ax & bx jump restore registers return allocate daughter -> ax call 0011 (copy procedure) cell division jump 0010 Reproduction Loop Copy Procedure 1100 Ancestor 0080aaa (coded by human)
find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx save registers to stack 1010 move [bx] -> [ax] decrement cx if cx == 0 jump 0100 increment ax & bx jump restore registers return allocate daughter -> ax call 0011 (copy procedure) cell division jump Self-examination Reproduction Loop Copy Procedure Ancestor 0080aaa 1100
find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx save registers to stack 1010 move [bx] -> [ax] decrement cx if cx == 0 jump 0100 increment ax & bx jump restore registers return allocate daughter -> ax call 0011 (copy procedure) cell division jump Self-examination Reproduction Loop Copy Procedure Mutant
find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx 1101 allocate daughter -> ax call 0011 (copy procedure) cell division jump Self-examination Reproduction Loop Parasite 0045aaa
39 Ancestor 0080aaa Self-exam 1111 find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx save registers to stack 1010 move [bx] -> [ax] decrement cx if cx == 0 jump 0100 increment ax & bx jump restore registers return allocate daughter -> ax call 0011 (copy procedure) cell division jump 0010 Reproduction Loop Copy Procedure 1100 Self-exam 1111 find 0000 (start) -> bx find 0001 (end) -> ax calculate size -> cx 1101 allocate daughter -> ax call 0011 (copy procedure) cell division jump 0010 Reproduction Loop 1110 Parasite 0045aaa
Tierra – 0080aaa ancestor **** begin genome file (note blank line at head of file) format: 3 bits: EXsh TCsh TPs MFs MTd MBh genotype: 0080aaa parent genotype: 0666god 1st_daughter: flags: 0 inst: 827 mov_daught: 80 breed_true: 1 2nd_daughter: flags: 0 inst: 809 mov_daught: 80 breed_true: 1 Origin: InstExe: 0,0 clock: 0 Thu Jan 01 -5:00: MaxPropPop: MaxPropInst: mpp_time: 0,0 ploidy: 1 track: 0 comments: the ancestor, written by a human, mother of all other creatures. track 0: nop1 ; beginning marker nop1 ; beginning marker nop1 ; beginning marker nop1 ; beginning marker zero ; put zero in cx not0 ; put 1 in first bit of cx shl ; shift left cx (cx = 2) shl ; shift left cx (cx = 4) movDC ; move cx to dx (dx = 4) adrb ; 110 1c 9 get (backward) address of beginning marker -> ax nop0 ; complement to beginning marker nop0 ; complement to beginning marker nop0 ; complement to beginning marker nop0 ; complement to beginning marker subAAC ; subtract cx from ax, result in ax
Tierra – 0080aaa ancestor movBA ; move ax to bx, bx now contains start address of mother adrf ; 110 1d 16 get (forward) address of end marker -> ax nop0 ; complement to end marker nop0 ; complement to end marker nop0 ; complement to end marker nop1 ; complement to end marker incA ; increment ax, to include dummy instruction at end subCAB ; subtract bx from ax to get size, result in cx nop1 ; reproduction loop marker nop1 ; reproduction loop marker nop0 ; reproduction loop marker nop1 ; reproduction loop marker mal ; 110 1e 27 allocate space (cx) for daughter, address to ax call ; call template below (copy procedure) nop0 ; copy procedure complement nop0 ; copy procedure complement nop1 ; copy procedure complement nop1 ; copy procedure complement divide ; 110 1f 33 create independent daughter cell jmpo ; jump to template below (reproduction loop) nop0 ; reproduction loop complement nop0 ; reproduction loop complement nop1 ; reproduction loop complement nop0 ; reproduction loop complement ifz ; dummy instruction to separate templates
Tierra – 0080aaa ancestor nop1 ; copy procedure template nop1 ; copy procedure template nop0 ; copy procedure template nop0 ; copy procedure template pushA ; 110 0c 44 push ax onto stack pushB ; 110 0d 45 push bx onto stack pushC ; 110 0e 46 push cx onto stack nop1 ; copy loop template nop0 ; copy loop template nop1 ; copy loop template nop0 ; copy loop template movii ; 110 1a 51 move contents of [bx] to [ax] (copy one instruction) decC ; 110 0a 52 decrement cx (size) ifz ; if cx == 0 perform next instruction, otherwise skip it jmpo ; jump to template below (copy procedure exit) nop0 ; copy procedure exit complement nop1 ; copy procedure exit complement nop0 ; copy procedure exit complement nop0 ; copy procedure exit complement incA ; increment ax (address in daughter to copy to) incB ; increment bx (address in mother to copy from)
Tierra – 0080aaa ancestor jmpo ; bidirectional jump to template below (copy loop) nop0 ; copy loop complement nop1 ; copy loop complement nop0 ; copy loop complement nop1 ; copy loop complement ifz ; this is a dummy instruction to separate templates nop1 ; copy procedure exit template nop0 ; copy procedure exit template nop1 ; copy procedure exit template nop1 ; copy procedure exit template popC ; pop cx off stack (size) popB ; pop bx off stack (start address of mother) popA ; pop ax off stack (start address of daughter) ret ; return from copy procedure nop1 ; end template nop1 ; end template nop1 ; end template nop0 ; end template ifz ; dummy instruction to separate creature **** end genome file
Tierra – start from scratch **** begin genome file (note blank line at top of file) format: 3 bits: 3 genotype: 0080aaa parent genotype: 0666god track 0: nop1 ; **** end genome file
Tierra - programozás Mit veszünk érszre? A kód temlate-ekkel tagolt részekre bontható Fragment-ek, fraglet-tek, kód darabok Ezek mentén könnyű „darabolni” Dummy utasítások template elválasztásra
Tierra – a környezet használata soup_in file, indító paraméterek Ezzel jeletősen befolyásoljuk a program „végrehajtást” Beagle explorer – a működés tanulmányozása Gén bank 0080aaa.tie ancestor Utasítás készletek
Tierra – a környezet használata Segéd programok Probe – a Tierra log file-ban hasonló genomokat keres A Tierra is interaktív Debug-olás is van a Tierra-ban és Beagle-ben Rengeteg statisztika Network Tierra
Tierra – mire jó? Creature populációk vizsgálata Hogyan változnak ? Milyen jelenségek figyelhetők meg ? Parazitizmus, alkalmazkodás, szexualitás működése Például: a futtatások magas (több mint 70%-ban) megfigyelhető a loop unroll technika „kifejlődése” Egyre kisebb creature-ok létrejötte
Mit vár Tom Ray? Dramatikusan optimált gépi kód készítése Meglévő szoftverek optimalizálása Új szoftverek létrehozása Az ember által készített programoknál nagyobb komplexitású programok készítése
Hasonló rendszerek Avida, Michigan State University (a Tierra inspirálta), 1993 További követők … További érdekesség: Artificial Chemistries Genetic Programming of an Algorithmic Chemistry (ACGP) Stabil program struktúrák létrejötte
Tom Ray és a Tierra A program és dokumetáció letölthető Biztosan működik DOS, WIN XP és Linux alatt 2003-ban volt az utolsó kiadás Nincs olyan sok publikáció, mint várnánk
Tierra – Tom Ray DEMÓ Köszönöm a figyelmet! Herczeg István ELTE, Budapest, 2011 április 28.