Fables Funkcionális programozási nyelv  ágens-alapú szimulációkhoz Legéndi Richárd Olivér [email_address] ELTE IKKK 2006. ...
Bevezetés <ul><li>A szimulációk eddigi eszközei: </li></ul><ul><ul><li>Swarm (1996): az első szimulációs csomag, kísérleti...
Cél <ul><li>Egy olyan nyelv létrehozása, amely: </li></ul><ul><ul><li>Egyszerű, minimális programozói tapasztalatot feltét...
A Fables <ul><li>Muliparadigmás funkcionális nyelv: </li></ul><ul><ul><li>Funkcionális paradigmák: változók, konstansok, r...
Funkcionális paradigmák <ul><li>Változók, konstansok </li></ul><ul><li>Függvények, Lokális definíciók, Elágazások </li></u...
Imperatív paradigmák <ul><li>Inicializálás: </li></ul><ul><ul><li>seed() beállítása </li></ul></ul><ul><ul><li>Paraméterek...
Példa //  Ants at wanderlust model  Ants; antNum  = 100; worldSize = 100; norm (x) = x  mod  worldSize; class  Ant begin v...
A Fordító <ul><li>Több részfeladat: </li></ul><ul><ul><li>Parser: a forrás feldolgozása, absztrakt szintaxisfa felépítése ...
Típusozás <ul><li>Az alapötlet: minden típust kideríthetünk az értékadásokból </li></ul><ul><ul><li>Konstansok típusa adot...
Transzformációk <ul><li>A parser a típusinformációk hiányában mindenből konstanst fordít </li></ul><ul><ul><li>Mi legyen k...
Optimalizáció I <ul><li>Függvényekben új lokális konstansok bevezetése </li></ul><ul><ul><li>Olyan függvényhívásokra, amin...
Optimalizáció II <ul><li>Programinverzió </li></ul><ul><ul><li>A felesleges közbülső adatszerkezetek eliminálása </li></ul...
Segédeszközök <ul><li>Dokumentum generátor </li></ul><ul><ul><li>Rögtön megcsinálja a modellből egy cikk vázlatát </li></u...
Összefoglalás <ul><li>Köszönöm a figyelmet! </li></ul><ul><li>Fables Beta 1.0.1: http://www.aitia.ai/services_and_products...
Upcoming SlideShare
Loading in …5
×

Fables - Funkcionális programozási nyelv ágens-alapú szimulációkhoz

520 views

Published on

Ikkk neumann legendi_fables

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
520
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Fables - Funkcionális programozási nyelv ágens-alapú szimulációkhoz

  1. 1. Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz Legéndi Richárd Olivér [email_address] ELTE IKKK 2006. november 23.
  2. 2. Bevezetés <ul><li>A szimulációk eddigi eszközei: </li></ul><ul><ul><li>Swarm (1996): az első szimulációs csomag, kísérleti jelleggel </li></ul></ul><ul><ul><li>MAML (1999): az első szimulációs nyelv, a Swarm-ra épül </li></ul></ul><ul><ul><li>RePast (2001): Javás szimulációs csomag </li></ul></ul><ul><li>A problémák: </li></ul><ul><ul><li>Elég bonyolultak </li></ul></ul><ul><ul><li>Komoly programozói tapasztalatot igényel a használatuk (pl. OO szemlélet, GUI létrehozás, stb.) </li></ul></ul><ul><ul><li>… </li></ul></ul>
  3. 3. Cél <ul><li>Egy olyan nyelv létrehozása, amely: </li></ul><ul><ul><li>Egyszerű, minimális programozói tapasztalatot feltételez </li></ul></ul><ul><ul><li>Nyelvi szinten támogatja ágens-alapú szimulációk létrehozását, irányítását és megfigyelését </li></ul></ul><ul><ul><li>Szintaxisa tükrözi a tudományos cikkekben használt formalizmust </li></ul></ul>
  4. 4. A Fables <ul><li>Muliparadigmás funkcionális nyelv: </li></ul><ul><ul><li>Funkcionális paradigmák: változók, konstansok, relációk definiálására </li></ul></ul><ul><ul><li>Objektum elvűség: ágensek definiálása osztályokkal </li></ul></ul><ul><ul><li>Imperatív nyelvi elemek az események leírására </li></ul></ul><ul><li>Egyszerű, tömör, engedékeny szintaxis </li></ul><ul><li>Típusnélküliség (!) </li></ul>
  5. 5. Funkcionális paradigmák <ul><li>Változók, konstansok </li></ul><ul><li>Függvények, Lokális definíciók, Elágazások </li></ul><ul><li>Felsorolási, intervallum és halmaz típusok </li></ul>var x; size = 100; randomBit = discreteUniform(0,1); between(x, y, z) = x < y < z; quadEq X 1(a, b, c) = a^2 + sqrt(D) where ( D = b^2 – 4*a*c ); signum(a) = a < 0 => -1 | a == 0 => 0 otherwise 1; squares = { x^2 : x is [-10..10] } ;
  6. 6. Imperatív paradigmák <ul><li>Inicializálás: </li></ul><ul><ul><li>seed() beállítása </li></ul></ul><ul><ul><li>Paraméterek </li></ul></ul><ul><ul><li>Ágensek létrehozása </li></ul></ul><ul><li>Schedule-ok: </li></ul><ul><ul><li>Bárhol definiálhatóak </li></ul></ul><ul><ul><li>Ciklikus / nem ciklikus </li></ul></ul><ul><ul><li>Nevesített: dinamikusan létrehozható/törölhető </li></ul></ul>startUp (agents) { seed(0); printLn( &quot;Initialization...&quot; ); [ new Agent[ money := 0 ] : _ is [1..agents] ]; } schedule Main cyclic 10 { 1 : printLn &quot;Event at 1, 11, 21, ...&quot; ; 2 : printLn &quot;Event at 2, 12, 22, ...&quot; ; }
  7. 7. Példa // Ants at wanderlust model Ants; antNum = 100; worldSize = 100; norm (x) = x mod worldSize; class Ant begin var pos; move(x) = pos := norm( pos + x ); schedule Stepper cyclic 1 { 1 : move discreteUniform(-1, 0, 1) ; } end antsAt = [ a.pos : a is Ant ]; startUp { seed(0); [ new Ant[ pos := worldSize/2 ] : i is [1..antNum] ]; } end
  8. 8. A Fordító <ul><li>Több részfeladat: </li></ul><ul><ul><li>Parser: a forrás feldolgozása, absztrakt szintaxisfa felépítése </li></ul></ul><ul><ul><li>Típusozó: a típus hozzárendelése minden node-hoz </li></ul></ul><ul><ul><li>Transzformációk </li></ul></ul><ul><ul><li>Optimalizációk </li></ul></ul><ul><ul><li>Célkód generálása </li></ul></ul><ul><ul><ul><li>Egyelőre csak RePast, külön szimulációs és GUI modell </li></ul></ul></ul>Ants.fab Ants.java AntsGUI.java
  9. 9. Típusozás <ul><li>Az alapötlet: minden típust kideríthetünk az értékadásokból </li></ul><ul><ul><li>Konstansok típusa adott (x=5) </li></ul></ul><ul><ul><li>Minden változónak csak max. 1 típusa lehet, azt az értékadásokból derítjük ki (y=x) </li></ul></ul><ul><ul><li>Beépített függvényeknél a típust a paraméterek típusainak ismeretében ki lehet deríteni (z= 2+ 3*x) </li></ul></ul><ul><ul><li>Ezek alapján a felhasználói függvények típusai meghatározhatóak rekurzívan ( f(u) = u + 2*z) </li></ul></ul><ul><li>Konverziók, pl. 2.1 + 1 => double </li></ul><ul><li>Függvénycsaládok generálása, ha ugyan az a függvény más-más típusú argumentumokkal szerepel pl. f(1);…;f(0.5) => int f(int), double f(double) </li></ul>
  10. 10. Transzformációk <ul><li>A parser a típusinformációk hiányában mindenből konstanst fordít </li></ul><ul><ul><li>Mi legyen konstans, változó ill. függvény? Függőségi halmazok alapján: </li></ul></ul><ul><ul><ul><li>Ha értéke fordításnál meghatározható => konstans </li></ul></ul></ul><ul><ul><ul><li>Ha paramétertől függ => inicializálandó változó </li></ul></ul></ul><ul><ul><ul><li>Ha pl. véletlentől függ => változó </li></ul></ul></ul><ul><ul><ul><li>Ha olyan konstanstól függ </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><li>Lokális változók, függvények felcímkézése </li></ul><ul><li>Stb. </li></ul>
  11. 11. Optimalizáció I <ul><li>Függvényekben új lokális konstansok bevezetése </li></ul><ul><ul><li>Olyan függvényhívásokra, aminek a függőségei nem változnak a két kódrészlet között </li></ul></ul><ul><li>Inverz relációk számolása </li></ul><ul><ul><li>Adott tulajdonságú ágenseket nem iterálva, hanem hasheléssel keressük meg </li></ul></ul><ul><ul><ul><li>{ a is Agent when a.member == f(x) } => hashset.get(f(x)) </li></ul></ul></ul><ul><ul><ul><li>{ a.member : a is Agent … } => keySet() használatával </li></ul></ul></ul><ul><li>Ahol lehet, natív tömbhasználat </li></ul><ul><ul><li>Vectorok, Set-ek helyett </li></ul></ul><ul><ul><li>Nem mindig lehet, függhet a véletlentől, állapotváltozásoktól az iteráció </li></ul></ul>
  12. 12. Optimalizáció II <ul><li>Programinverzió </li></ul><ul><ul><li>A felesleges közbülső adatszerkezetek eliminálása </li></ul></ul><ul><li>Kis ellentmondás: olvasható kód generálása </li></ul><ul><ul><li>Haladó felhasználóknak fontos! </li></ul></ul><ul><ul><li>Emiatt nem helyettesítjük a konstansokat az értékükkel, nem vonjuk össze a kiértékelhető értékeket, stb. </li></ul></ul>
  13. 13. Segédeszközök <ul><li>Dokumentum generátor </li></ul><ul><ul><li>Rögtön megcsinálja a modellből egy cikk vázlatát </li></ul></ul><ul><ul><li>Nagyban hasonlít pl. a javadoc-ra </li></ul></ul><ul><ul><li>Dokumentációs comment: ”/**” ill. ”*/” </li></ul></ul><ul><ul><li>Több formátum: </li></ul></ul><ul><ul><ul><li>HTML, PDF, RTF, LaTeX forrás (->DVI, PS) </li></ul></ul></ul><ul><li>Eclipse plugin </li></ul><ul><li>RePast-tól független megjelenítő csomag: </li></ul><ul><ul><li>Egyszerűbb, független </li></ul></ul><ul><ul><li>A GUI generálása egy leírófájl alapján történik, amit a Fables IME generál le </li></ul></ul>
  14. 14. Összefoglalás <ul><li>Köszönöm a figyelmet! </li></ul><ul><li>Fables Beta 1.0.1: http://www.aitia.ai/services_and_products/simulation_systems/fables </li></ul>

×