I. Bevezeő Adapív algorimusok használaa a programozási nyelvek modern fordíási módszereiben Kovács Lehel Isván Babeş-Bolyai Tudományegyeem, Információs Rendszerek Tanszék, Kolozsvár A mindennapi éle kommunikációs folyamaaiban ermészees nyelveke használva akkor is megérjük parnerünk mondanivalójá, ha mondaaiban hibák vannak. Ezek a hibák lehenek mondaszerkezei, szórendi, szóferdíési, lexikális, szinakikai, szemanikai, szemioikai hibák. Az emberi agy képes arra, hogy elég jelenős hibáka kijavíson úgy, hogy figyelembe veszi a szövegkörnyezee és egyszerűen áérelmezi a hibás részeke, fény deríve így a mondaok igazi érelmére. Sajnos a programozási nyelvek érelmezésekor, fordíásakor eljesen más a helyze. A programozási nyelvek hagyományos, klasszikus fordíási módszerei (a környeze függelen grammaikákra épülő módszerek) csődö mondanak a legkisebb nyelvi bizonyalanságnál is. Az első adódó hibánál a forráskódo visszauasíja a fordíóprogram. Célunk olyan fordíóprogram megírása, amely felismeri a hibá, kijavíja a hibás forráskódo és folyaja az elemzés és a fordíás, míg végül a forrásszöveg helyes érelmezésé kapjuk. Más szavakkal élve: meg kell, hogy keressük a levezeési fa azon legjobb közelíésé, amely a legalálóbb mondaforma lebonásá adja a megfelelő hibás forráskód résznek. Ennek érdekében a hibás forráskód rész áadjuk egy geneikus algorimus használó elemzőnek, amely kijavíja a hibá és egy neuronháló segíségével meganulja, rögzíi a folyamao. Az új mondaforma előállíásához, ha másképp nem udja a geneikus algorimus kijavíani a hibás rész, módosíhajuk a programozási nyelv leíró grammaikájá is így bizos alálunk egy legjobb levezeési fa közelíés. A geneikus algorimus a kövekező elemekre épül: a kromoszómák a grammaika parciális levezeési fái, az alkalmasságo vizsgáló függvény a hibás forrásszöveg és megközelíései közöi legkisebb különbsége méri, a kezdei generáció az eredei grammaiká és levezeési fá aralmazza, a kövekező generációka pedig a reprodukció, kereszezés és muáció műveleek segíségével állíjuk elő. A geneikus keresés akkor ér vége, amikor megaláluk a legjobb megközelíés, vagy a keresési ieráció álép egy bizonyos küszöbszámo. A geneikus keresés folyamaá egy neuronháló meganulja, így második alkalommal ez már sokkal kevesebb ideig fog arani. A neuronháló minden grammaikabeli módosíás megőriz. Megjegyzendő, hogy a geneikus algorimusok párhuzamos vola mia a fordíóprogram és az elemzési módszer is párhuzamos lesz. II. Kulcsszavak: környezefüggelen grammaikák (CFG), fordíóprogramok, hiba kiküszöbölés, levezeési fa, geneikus algorimusok (GA), neuronhálók, ermészees nyelvek klasszikus fordíóprogram Elemzés (analízis) Szinézis Forrás kód Ha minden helyes vol Lexikális lexikális hiba? Kód generálás Szinakikai szinakikai hiba? Kód opimalizálás Szemanikai szemanikai hiba? Tárgykód (végrehajhaó program) inelligens fordíóprogram Elemzés (analízis) Kijavíja a hibá. Elfedi a hibá. Meganulja a hibá. Megéri a hibás forráskódo is. Szinézis Műszaki Szemle 16 7
III. Környezefüggelen grammaikák III.1. Definíció - CFG fogalma Egy G grammaika a kövekező rendeze négyes: G = ( N,, ahol: N a nemerminális jelek véges ábécéje T a erminális jelek véges ábécéje ( N T = ) S a nemerminális, kiünee kezdőszimbólum P a szabályok halmaza, a halmaz elemeire a kövekező írásmódo használjuk: ( x, y) P : x y, ahol x a baloldali, y pedig a jobboldali szimbólum. Az ε ( )* szimbólum a grammaika üres szavá jelöli, és az x ε szabály örlési szabálynak nevezzük. Egy G grammaika környezefüggelen, ha a szabályai: x y alakúak és x N, y ( )*. III.2. Definíció - a levezeés fogalma Egy G grammaika P szabályhalmaza egy " " levezeési reláció indukál az ( N T )* fölö. Az mondjuk, hogy x y akkor és csakis akkor, ha x = x1 δ x2, y = y1γ y2 és δ γ P bármely x, y, x1, x2, y1, y2, δ, γ ( )*. A " " levezeési reláció ha reflexíven és ranziíven lezárjuk, akkor egy álalános, öbblépéses " *" levezeési reláció kapunk, és az mondjuk, hogy egy w T * szó levezeheő egy G grammaika szabályaival, ha S * w. Hasonlóan a G grammaika generálja az L nyelve, ha ennek minden szava levezeheő a szabályok felhasználásával: L( G) = { w S * w, w T*}. Ké grammaika ekvivalens, ha ugyanaz a nyelve generálják. III.3. Definíció - a legbaloldalibb, legjobboldalibb levezeés fogalma A környezefüggelen grammaikák oszályán érelmezheünk egy " l " legbaloldalibb levezeési reláció a kövekezőképpen: x, y ( )*, x l y akkor és csakis akkor, ha: x = waβ, y = wαβ, A α P, w T*, A N, α, β ( )*. Hasonlóan, a legbaloldalibb levezeéshez szimmerikusan definiálhajuk a legjobboldalibb levezeési " r " reláció is: x, y ( )*, x r y akkor és csakis akkor, ha: x = β Aw, y = βαw, A α P, w T*, A N, α, β ( )*. Ezen relációk reflexív és ranziív lezárása eredményekén kapjuk a " *" és " *" relációka. IV. Levezeési fák IV.1. Definíció - a felismerési probléma Ado egy G = ( N, környezefüggelen grammaika és egy w T * szó. Felismerési problémának nevezzük a w L(G) eldönésé. IV.2. Definíció - az elemzési probléma Ado egy G = ( N, környezefüggelen grammaika és egy w T * szó. Elemzési problémának nevezzük a w L(G) eldönésé és egy konkré S * w levezeés megadásá. A levezeés megadhajuk legbaloldalibb vagy legjobboldalibb alakban is. A levezeéseke célszerű grafikusan levezeési fa segíségével megadni. Természeesen egy ado G környezefüggelen grammaikához öbb levezeési fa is megadhaó. IV.3. Definíció - a levezeési fa Ado egy G = ( N, környezefüggelen grammaika. A G-hez arozó levezeési fáka a kövekezőképpen adhajuk meg: l r 8 Műszaki Szemle 16
Minden csomóponhoz egy címké rendelünk, amely nem más, min egy {ε} -beli szimbólum. A gyökér címkéje S. Ha egy belső pon címkéje A, akkor A N. Ha egy n csúcs címkéje A, és n 1, n 2,, n k az n fiai, és a hozzájuk arozó címkék: X 1, X 2,, X k, akkor: A X 1 X 2 X k P. Ha egy n csúcs címkéje ε, akkor n levél és egyedüli leszármazo. A G = ({ 0,1},{ A, B}, { S 0A, A 1B B, B 1 0}) grammaika levezeési fája a w = 011 szóra. IV.4. Definíció - hibamenes elemzés Egy ado G = ( N, környezefüggelen grammaikára akkor állíhaó elő egy egyérelmű, hibamenes w-programelemzés, ha: (klasszikus) fel udunk épíeni egy w-hez arozó levezeési fá ( w L(G) ). (inelligens) felépíjük a w' L( G) fá, ha w L(G), de w' a w legjobb megközelíése. IV.5. Definíció - A legjobb megközelíés Az mondjuk, hogy w' a w legjobb megközelíése, ha w' a legkevesebb erminális jelben ér el a w-ől és az ado szövegkörnyezeben w'-nek is érelme van. Inelligens fordíóprogram: Mi old meg? Hibaelfedés. Az elemzés folyaása az újabb hibák megalálása érdekében, nem áll le az első hibánál. Hibajavíás. Természees nyelvek felismerése. Milyen módszerekkel? Geneikus algorimusok (a legjobb megközelíés kiválaszása). Neuronhálók (meganulják, elmenik a folyamao). Párhuzamos elemzés (A GA érelemszerűen párhuzamos). V. Geneikus algorimusok Nagyon sok olyan felada van, amelyre még nem fejleszeek ki elég gyors, haékony algorimusoka. A legöbb ilyen felada az opimalizációs és a keresési feladaok oszályába arozik. A nehéz opimalizációs feladaoknál megelégszünk a közelíő megoldásokkal is, és ezekre keresünk haékony algorimusoka. Ilyen algorimusok a Geneikus Algorimusok, olyan szochaszikus algorimusok, melyek keresési módszerei ermészees folyamaoka modelleznek, mégpedig a geneikus öröklődés és a darwini küzdelme az éleben maradásér. V.1. Definíció - A Geneikus Algorimus (D. Goldberg, 1989) A geneikus algorimus egy olyan keresőalgorimus, amelynek alapja a ermészees szelekció és ermészees génechnológiák, eredménye pedig egy olyan haékony keresőalgorimus, amely az emberi keresési sraégia újíó hajlamai aralmazza. A geneikus algorimusoka megalapozó hasonla a ermészees evolúció hasonlaa. Az evolúció során az egyes fajok feladaa az, hogy minél jobban alkalmazkodjanak egy bonyolul és válozó környezehez. A apaszala, amelye az egyes fajok az alkalmazkodás során szereznek, beépül az egyedek kromoszómáiba. Geneic Algorihms are search algorihms based on he mechanism of naural selecion and naural geneics resuling in a search algorihm wih some of he innovaive flair of human search. Műszaki Szemle 16 9
A geneikus algorimusok a szakkifejezéseke a geneikából veék á. A populáció, népesség (populaion) agjai az egyedek (individuals), más néven kromoszómák (chromosome) vagy sringek. Az egyedek génekből (gene) állnak, és minden gén bizonyos jellegzeesség öröklődésé szabályozza. Minden egyed, kromoszóma egy poenciális megoldásá fogja képezni a megoldandó feladanak. Az egyedek populációján végbemenő evolúciós folyama a poenciális megoldások erében örénő keresésnek felel meg. A GA elemei A Geneikus algorimusok a kövekező alapelemekkel rendelkeznek: Bemenő szring vagy kromoszóma: X = <x 1, x 2,, x n >, a probléma ábécéje. Gén: x i X. Kölségfüggvény: minden kromoszómához hozzárendelünk egy minőségi súly f(kromoszóma), f(x 1, x 2,, x n ). Reprezenációs séma: az ábécé, a kromoszómák hossza, a paraméerek kódolása, minden, ami az illeő problémára jellemző. Populáció: Kezdei populáció: valószínű eredmény. Kövekező populáció: az evolúció eredménye. Geneikus operáorok: Kiválaszás: a kölségfüggvény szerin kiválaszunk egy kromoszómá. Kereszezés: ké kromoszómából kereszezéssel újabb ké kromoszómá állíunk elő: 1111 000001 és 0000 111110-ból: 1111 111110, valamin: 0000 000001 lesz, ahol jelöle a vágási pono. Inverzió: a kromoszómában megfordíunk egy génsorozao: pl. 1 234 567-ból 1 432 567 lesz. Muáció: egy kromoszómában vélelenszerűen kicserélünk egy vagy öbb gén. Reprodukció: kiválaszunk egy egyede a populációból és ávisszük a kövekező populációba. Minden művelee egy rá jellemző probabiliással végzünk el. V.2. Definíció - Alapveő Geneikus Algorimus 1. Megadjuk a kezdei populáció. 2. Minden kromoszómá kiérékelünk és kiválaszjuk a kövekező populáció szülői. 3. A reprodukció és más műveleek segíségével lérehozunk egy új populáció. 4. Az új populáció lesz a kezdei populáció. 5. Újraérékelés, ierálás. 6. MEGÁLL, ha lejár az ierálási idő, vagy megvan a megoldás. Vagy formalizálva: Eljárás GA 0 inicializál p() := {x 1,, x k }. kiérékel: p(): {f(x 1 ),, f(x k )}. amíg (i(p()) = false) végezd el kereszezés: x' : = k ( p( )), i = 1, k. i p c muáció: x' ' : = m ( i k i p v' ), = 1,. i m kiérékelés: p''() := {x'' 1,, x'' k }, {f(x'' 1 ),, f(x'' k )}. kiválaszás: p( + 1) : = s ( p''( )), ahol f ( p x ) i i k s p ( s x ) ''. '' =, = 1, i k f ( ) := +1 (amíg) vége (Eljárás) vége j= 1 x'' j 10 Műszaki Szemle 16
A -edik időpillanaban a GA fennarja a p() := {x 1,, x k } a leheséges megoldásoknak. Minden x i megoldás kiérékelünk, így bizonyos kölség-érékeke kapunk. A +1-edik időpillanaban megalkojuk a kövekező populáció, megarva a legjobb képességű egyedeke. Új megoldások lérehozása érdekében bizonyos egyedek a kereszezés és muáció segíségével válozásokon mennek á. A folyama addig ar, ameddig megkapjuk a megoldás, vagy leelik az ierációra szán idő. VI. Hibaelfedés geneikus algorimusok segíségével VI.1. Felada Ado egy G = ( N, környezefüggelen grammaika és egy w bemenei monda (program), amely hibás. Meg kell keresni w' legjobb megközelíésé w-nek, vagyis fel kell épíeni egy leheő legjobb levezeési fá. A feladao geneikus algorimus segíségével oldjuk meg. Ehhez kódolni kell a problémá, felhasználva a geneikus algorimus alapelemei, megkeresni a megfelelő valószínűségeke és megállapíani az ierációs lépésszámo. 1. A reprezenációs séma A reprezenációs séma aralmazza a kromoszómák hosszá (csak azonos hosszúságú kromoszómákkal dolgozha az algorimus), az ábécé és a keresési ere. Természeesen a keresési ér az összes előállíhaó levezeési fa lesz. A probléma ábécéje: A =, vagyis a erminális és nemerminális szimbólumok összessége. A kromoszómák hossza meg kell, hogy egyezzen, ezér a javasol kódolási mód vagy mama a levezeési fa egyik szinje (a szabálynak megfelelően), vagy megszámozzuk a levezeési szabályoka és ezeke ákódoljuk azonos hosszúságú bináris számokká. 2. A kölségfüggvény A kölségfüggvény minden kromoszómához hozzárendel egy bizonyos éréke. Ez az elérés minősége és súlya, valamin a hiba pozíciójának kódja lesz. 3. A kezdei populáció A környezefüggelen grammaika szabályaihoz arozó levezeési fák. 4. A kövekező populáció A kövekező populáció mindegyik agja szinakikusan helyes kell, hogy legyen. A kövekező populáció úgy haározzuk meg, hogy alkalmazzuk a geneikus operáoroka a megfelelő paraméerekkel, valószínűséggel. 5. Paraméerek, valószínűségek A populáció méree (M). A generációk száma (G). Ierációszám (R). A reprodukció valószínűsége (p r ). A kereszezés valószínűsége (p c ). A muáció valószínűsége (p m ). Mindezen paraméerek a felada komplexiásáól függnek, nincsenek ponos maemaikai számíások, melyeknek eredményeképp megkaphanánk ezeke az érékeke. A konkré felada megoldásakor kikísérleeze konrollérékeke használunk. A kövekező ábláza ezeke foglalja össze: Műszaki Szemle 16 11
Tesz Paraméerek Haékonyság 1. M = 100, G = 50, R = 100, p r = 5%, p c = 90%, p m = 5%. 96% 2. M = 100, G = 50, R = 100, p r = 30%, p c = 70%, p m = 0%. 85% 3. M = 50, G = 50, R = 100, p r = 10%, p c = 90%, p m = 0%. 13% 4. M = 50, G = 50, R = 100, p r = 30%, p c = 70%, p m = 0%. 18% 6. Befejezés, megállás Az algorimus akkor áll meg, ha megkapa a jó megoldás, elére az ado lépésszámo, vagy nem lehe újabb populációka előállíani (ismélődnek a populációk). Példa Legyen G = ( N, a kövekező környezefüggelen grammaika: N = {S}, T = {a, b, c, d, e, f}, P: S asb ab csd cd esf ef. Az algorimus elemei: Az ábécé: A = { a, b, c, d, e, f}. A kezdei populáció: Kövekező populáció: Kiválaszjuk mondjuk: - és ierálunk:, majd 12 Műszaki Szemle 16
Reprodukció: és ezeke a lépéseke folyajuk, míg meg nem kapjuk w'-e. VII. Neuronhálók A neuronhálók alapveően az oszályozás folyamaá segíik elő. A minimális neuronháló a percepron, amely egy hipersík segíségével ké részre oszja a ere a kövekezőképpen: w1 w =... súllyal. Ezen kívül a percepron ren- w n x1 x =... bemenevekor, mindegyik rendelkezik egy x n delkezik egy küszöbbel, és egy y kimeneel. s = n i= 1 A percepron súlyozo összege számí: w i x i. A ere pedig a kövekezőképpen oszja fel: Ha s kisebb, min - y = -1. Ha s nagyobb, min - y = 1. Ha s egyenlő --vel y = 0. A percepron csak ilyen egyszerű oszályozás ud megvalósíani. Komplexebb oszályozások eseén (pl. konkáv halmazok) öbb percepron kell használni, ezeke hálózaba köni. Ezek a rendszerek a neuronhálók vagy a reje réeges neuronhálók. Műszaki Szemle 16 13
F 0 F x F y F z bemenei első második kimenei réeg reje réeg reje réeg réeg VIII. Az inelligens fordíóprogram A kövekező ábra az inelligens fordíóprogramo szemlélei. A különböző elemzési fázisok kiegészülnek egy-egy hibaelfedési geneikus algorimussal (GA) és egy-egy oszályozás szolgáló neuronhálóval (NH). Köszöneeme fejezem ki az Erdélyi Magyar Műszaki Tudományos Társaságnak (EMT), hogy öszöndíjával hozzájárul a éma kuaásához. Könyvésze [1.] A. V. Aho, J. D. Ullman, The heory of Parsing, Translaion and Compiling, Penice Hall, 1972. [2.] N. Alon, Efficien Simulaion of Finie Auomaa by Neural Neworks, Journal of ACM, Vol. 38, No. 2, 1991. [3.] Bill P. Buckles, F. E. Pery, Geneic Algorihms, IEEE Compuer Sociey Press, 1991. [4.] M. Chyil, M. Crochemore, B. Monien, W. Ryer, On he Parallel Recogniion of Unambiguous Conex-free Languages, Theoreical Compuer Science No. 81, 1991. [5.] Csörnyei Zolán, Bevezeés a fordíóprogramok elméleébe, ELTE Budapes, 1997. [6.] David E. Goldberg, Geneic Algorihms in Search, Opimizaion & Machine Learning, Addison Wesley, 1989. [7.] L. Langlois, Sysolic Parsing of Conex-free Languages, IJPP Vol. 19. No. 4, 1990. 14 Műszaki Szemle 16