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