Bevezetés az informatikába 9. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 1 / 24
1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 2 / 24
Tartalom Programozási nyelvek... 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 3 / 24
Assembly Programozási nyelvek... a gépi kódnak megfelelő, assembly utasítások, "mnemonik"-ok assembler fordító rövid, gyors kód, nehéz használat, processzor függő Z80 mikroprocesszor assembly példa: ld de, 40000 ; a de regiszterpárba a forráscím ld hl, 16384 ; a hl regiszterpárba a célcím ld bc, 6912 ; a bc regiszterpárba a blokk hossza loop ld a, (de) ; az a regiszterbe a forrás értéke ld (hl), a ; az a regiszterből a célba inc hl ; célcím növelése eggyel inc de ; forráscím növelése eggyel dec bc ; a hátralévő hossz csökkentése ld a, b ; bc regiszterpár=0 vizsgálat or c ; jr nz, loop ; ha nem, ugrás vissza "loop"-ra ret ; visszatérés Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 4 / 24
Programozási nyelvek... Bájtkód alapú interpretált nyelvek A fordító program először egy átmeneti kódot (ez a "bájtkód") állít elő Az interpretált nyelvekhez képest hatékonyabb szintaktikai ellenőrzés, kisebb kódméret, nagyobb sebesség Perl példa faktoriális számításra: #!/usr/bin/perl sub fac { my ($n) = @_; if ($n < 2) {return $n;} else {return $n * fac($n-1);} } print fac(6), "\n"; Példák: Perl, Python, Ruby Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 5 / 24
Tartalom Programozási nyelvek... Funkcionális programozás (Lisp) 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 6 / 24
Programozási nyelvek... Funkcionális programozás (Lisp) Hanoi tornyai : megoldás Lisp nyelven (defun dohanoi(n to from u) (cond ( (> n 0) (dohanoi (- n 1) u from to) (format t "move ~D --> ~D~&" from to) (dohanoi (- n 1) to u from) ) ) ) (defun hanoi(n) (dohanoi n 3 1 2) ) Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 7 / 24
Tartalom Programozási nyelvek... Logikai programozás (Prolog) 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 8 / 24
Prolog Programozási nyelvek... /* tények */ felesege(karoly, terez). lanya(karoly, ilona). felesege(istvan, gizella). fia(istvan, imre). fia(istvan, jozsef). Logikai programozás (Prolog) /* szabályok */ ferje(feleseg, Ferj) :- felesege(ferj,feleseg). szulei(gye,apa,anya) :- lanya(apa,gye), felesege(apa,anya). szulei(gye,apa,anya) :- fia(apa,gye), felesege(apa,anya). gyermeke(x, Gyermek) :- szulei(gyermek, Apa, X). gyermeke(x, Gyermek) :- szulei(gyermek, X, Anya). apja(gyermek, Apa) :- szulei(gyermek, Apa, X). anyja(gyermek, Anya) :- szulei(gyermek, X, Anya). /* lekérdezés */ szulei(imre, Apa, Anya). Apa= istvan, Anya= gizella Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 9 / 24
Tartalom Programozási nyelvek... Visszalépéses keresés 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 10 / 24
Programozási nyelvek... Visszalépéses keresés Visszalépéses keresés (backtrack) globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai: a nyilvántartott út végéhez egy új (ki nem próbált) él hozzáfűzése, vagy az legutolsó él törlése (visszalépés szabálya) visszalépés feltételei: zsákutca, azaz végpontjából nem vezet tovább út zsákutca torkolat, azaz végpontjából kivezető utak nem vezettek célba kör, azaz végpontja megegyezik az út egy megelőző csúcsával mélységi korlátnál hosszabb terminálási feltétel: az aktuális út végén megjelenik egy célcsúcs, vagy ha a startcsúcsból vissza akarunk lépni sorrendi heurisztika, vágó heurisztika Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 11 / 24
Programozási nyelvek... Visszalépéses keresés 8 kiránynő probléma megoldása visszalépéses kereséssel Helyezzünk fel 8 ("n") királynőt egy sakktáblára (n n) úgy, hogy egyik se üsse a másikat! algoritmus vázlat: 1 legyen az aktuális oszlop az első oszlop 2 az aktuális oszlop első (következő) lehetséges sorába próbáljuk tenni egy királynőt 3 ha sikerült (volt még lehetséges sor), akkor legyen a következő oszlop az aktuális oszlop, és a következő lépés a 2. 4 ha nem sikerült (nincs több lehetséges sor), akkor lépjünk vissza, legyen az aktuális oszlop az előző oszlop, jelöljük meg, hogy ahol most áll a királynő az nem jó pozíció, és a következő lépés a 2. Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 12 / 24
Tartalom Programozási nyelvek... 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 13 / 24
Programozási nyelvek... Utazó ügynök probléma - genetikus algoritmus Az utazó ügynök probléma: Adott n darab város. Keressük az összes város érintő, legrövidebb útvonalat. NP nehéz : O(n!).. O(2 n ) kromoszóma 1 gén = 1 város (a látogatás sorszáma) annyi gén ahány város "városszámok permutációja" keresztezés permutáció megörzése mutáció kromoszómán belüli sorrend felcserélése http://www.lalena.com/ai/tsp/ Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 14 / 24
Programozási nyelvek... Utazó ügynök - genetikus algoritmussal... Genetikus algoritmus kiindulási populáció (egyed reprezentáció) kiválasztás ("fitnessz" függvény) reprodukció (keresztezés, mutáció) megállás TSP - GA város lista permutációk úthossz pld. városcsere hosszváltozás Genetikus algoritmus értékelés : közelítő megoldás, gyorsan "elég jó" megoldás lokális / globális minimum jól párhuzamosítható Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 15 / 24
Programozási nyelvek... Utazó ügynök - genetikus algoritmussal... Genetikus algoritmus kiindulási populáció (egyed reprezentáció) kiválasztás ("fitnessz" függvény) reprodukció (keresztezés, mutáció) megállás TSP - GA város lista permutációk úthossz pld. városcsere hosszváltozás Genetikus algoritmus értékelés : közelítő megoldás, gyorsan "elég jó" megoldás lokális / globális minimum jól párhuzamosítható Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 15 / 24
Programozási nyelvek... Utazó ügynök - genetikus algoritmussal... Genetikus algoritmus kiindulási populáció (egyed reprezentáció) kiválasztás ("fitnessz" függvény) reprodukció (keresztezés, mutáció) megállás TSP - GA város lista permutációk úthossz pld. városcsere hosszváltozás Genetikus algoritmus értékelés : közelítő megoldás, gyorsan "elég jó" megoldás lokális / globális minimum jól párhuzamosítható Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 15 / 24
Programozási nyelvek... 2004-es rekord : 24978 város Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 16 / 24
Tartalom Programozási nyelvek... Algoritmusok tanulása 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 17 / 24
Programozási nyelvek... Truck backing problem Algoritmusok tanulása A keresett függvény : u=g(x,y,cabt,trailert) PLUS(a,b) MINUS(a,b) MUL(a,b) DIV(a,b) ATG(a,b) IFLTZ(a,b,c) a+b a-b a*b a/b, if b <> 0, else 1 atan2(a,b), if a<> 0, else 0 b, if a<0, else returns c http://www.handshake.de/user/blickle/truck/ Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 18 / 24
Tartalom Programozási nyelvek... 1 Programozási nyelvek... Funkcionális programozás (Lisp) Logikai programozás (Prolog) Visszalépéses keresés Algoritmusok tanulása Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 19 / 24
Programozási nyelvek... Neuro-Evolving Robotic Operatives "ágensek" (robotok) 3D fizikai szimulációs környezet tanítható ágensek két játékfázis tanítás, "próbakörnyezetben" ellenfél "stratégia" elleni "harc"... Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 20 / 24
Programozási nyelvek... Neuro-Evolving Robotic Operatives - neurális háló Real-time Neuroevolution (rtneat) ágens "agy": neurális hálózat szenzorok a neurális háló bemenetei kimenetek a motorok és a fegyver Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 21 / 24
Programozási nyelvek... Neuro-Evolving Robotic Operatives - genetikus algoritmus Real-time Neuroevolution (rtneat) genetikus algoritmus, megerősítéses tanulás: egy populáció legjobbjai jutalmat, a legroszabbak büntetést kapnak a "jóságot" a felhasználó állítja be: különböző szempontoknak megfelelés (ellenfél megközelítése, célbatalálás, távolságok...) az "agy"at az életciklusa végén az algoritmus "kiértékeli"... Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 22 / 24
Programozási nyelvek... Neuro-Evolving Robotic Operatives - "fejlődés" tanítás egyre komplexebb környezetekben egyed fejlődése - neurális hálózat "fejlődése" (egyre több neuron, de korlátozva) csoport fejlődése - "szelekció" N.E.R.O. Neuro-Evolving Robotic Operatives : http://nerogame.org Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 23 / 24
Összefoglalás Programozási nyelvek...... Dr. Istenes Zoltán (ELTE-IK-PSZT) Bevezetés az informatikába 2008 24 / 24