Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz Legéndi Richárd Olivér diplomavédés 2009. január 27.

Slides:



Advertisements
Hasonló előadás
Hatékonyságvizsgálat, dokumentálás
Advertisements

SZENT ISTVÁN EGYETEM GAZDASÁG- ÉS TÁRSADALOMTUDOMÁNYI KAR AUTO- SZŰRŐ FEJLESZTÉSE TÁBLÁZAT ALAPÚ JELENTÉSEK UTÓLAGOS, BÖNGÉSZŐN BELÜLI TOVÁBB- FELDOLGOZÁSÁRA.
C++ programozási nyelv Gyakorlat hét
K-Chat Dr. Szepesvári Csaba Kutatási Alelnök mindmaker.
SZENT ISTVÁN EGYETEM GAZDASÁG- ÉS TÁRSADALOMTUDOMÁNYI KAR TUDOMÁNYOS DIÁKKÖRI KONFERENCIA NOVEMBER 25. AUTO-SZŰRŐ FEJLESZTÉSE OLAP JELENTÉSEK UTÓLAGOS,
Tömbök C#-ban.
Kifejezések 2+3 Egy egyszerű kifejezés… © Pasztuhov Dániel, www.programozas-oktatas.hu.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Vizuális modellezés Uml és osztálydiagram UML eszközök
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Függvények, mutatók Csernoch Mária.
Mutatók, tömbök, függvények
Java programozási nyelv 3. rész – Osztályok I.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Önleíró adatok: XML INFO ÉRA, Békéscsaba
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Bevezetés a C++ programozási nyelvbe
Objektum Vezérelt Szoftverek Analízise Ferenc Rudolf és Beszédes Árpád Szegedi Tudományegyetem FrontEndART.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Természetes és formális nyelvek Jellemzők, szintaxis definiálása, Montague, extenzió - intenzió, kategóriákon alapuló gramatika, alkalmazások.
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Objektum orientált programozás
Webprogramozó tanfolyam
Objektumvezérelt rendszerek tervezése 7. óra – Iterator, State, Interpreter © Szőke Gábor.
A Visual Basic nyelvi elemei
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
C Programozási alapok.
Típuskonverzió a C++ nyelvben
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
Gyurkó György. Az OO programozás és tervezés története 1960-as évek: SIMULA (véletlen folyamatokat szimuláló programok írása) az OO nyelvek őse 1970-es.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
PÁRHUZAMOS ARCHITEKTÚRÁK – 13 INFORMÁCIÓFELDOLGOZÓ HÁLÓZATOK TUDÁS ALAPÚ MODELLEZÉSE Németh Gábor.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Compiler illetve interpreter nyelvek
Programozási nyelvek alapfogalmai
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Konverziós operátorok
Előadás másolata:

Fables Funkcionális programozási nyelv ágens-alapú szimulációkhoz Legéndi Richárd Olivér diplomavédés január 27.

Mi is a Fables? Alapvetően egy 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 – erre törekedtünk Típusnélküliség

Példa model Példa { var x := "String"; konstans = 5; függvény(x) = 2*x; class Ágens { var id; } startUp { new Agent[id:=0]; }

Miért kellett egy új nyelv? 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 Swarmra épül – RePast (2001): Javas szimulációs csomag (API) A problémák: – Elég bonyolultak – Komoly programozói tapasztalatot igényel a használatuk (pl. OO szemlélet, GUI programozás, stb.) – … Elsődleges felhasználói réteg: szociológusok, társadalomkutatók, közgazdászok, …

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

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; méret = 100; randomBit = discreteUniform( 0, 1 ); között(x, y, z) = x < y < z; signum(a) = a -1 | a == 0 => 0 otherwise 1; négyzetszámok = { x^2 : x is [ ] };

Imperatív paradigmák Inicializálás: – seed() beállítása – Paraméterek – Ágensek létrehozása Ütemezők: – Bárhol definiálhatóak – Ciklikus / nem ciklikus – Nevesített: dinamikusan létrehozható/törölhet ő startUp (ágensek) { seed(0); printLn( "Inicializálás..." ); [ new Ágens[ money := 0 ] : _ is [1.. ágensek] ]; } schedule FőÜtemező cyclic 10 { 1 : printLn ("1, 11, 21,...") ; 2 : printLn ("2, 12, 22,...") ; } névListázás = for each a in Ágens do printLn ( a.név ) ;

Példa modell // Vándorló hangyák: ~15 sor kód model Ants { antNum = 100; worldSize = 100; norm (x) = x mod worldSize; class Ant { var pos; move(x) = pos := norm( pos + x ); schedule Stepper cyclic 1 { 1 : move(discreteUniform(-1,0,1)); } antsAt = [ a.pos : a is Ant ]; startUp { seed(1984); [ new Ant[ pos := worldSize/2 ] : i is [1..antNum] ]; }

Az eredmény

A nagyobb részfeladatok Értelmezés: – szintaktikai ellenőrzések – szintaxisfa felhúzása Típusozás – minden kifejezésre, változóra [Charting Wizard] – a lehetséges adatforrások megadása Kódgenerálás, Optimalizáció – modell, GUI, tényleges producerek

Működés Forrásállományok IME Eclipse Compiler Result Fables forrás Java importok Chart leírók Hibalista Modell GUI kód Dokumentációk …

A Compiler Lexer Precompiler Transformator Szintaktikus Elemző Típusozó Informator CP Kódgenerátor Fables forrás Java importok Generált források

Hibajelzés Lexer Precompiler Transformator Szintaktikus Elemző Típusozó Informator Kódgenerátor

A Compiler Lexer Precompiler Transformator Szintaktikus Elemző Típusozó Informator CP Kódgenerátor Fables forrás Java importok Generált források

Dokumentáció generálás Lexer Precompiler Szintaktikus Elemző Típusozó Kódgenerátor Fables forrás Generált doksik

Architektúra IME  Fordító Fordító: – Értelmező: source  tokenek, szintakszisfa – Előfordító: szintakszisfa  reprezentációs fa – Transformator: reprezentációs fán apróbb változtatások – Típusozó: felcímkézi a fát a típusinformációkkal – Fordító   Charting Package Új chart létrehozása, meglévő editálása Model informátor: reprezentációs fa  chartok – Compiler: reprezentációs objektumok  kódobjektumok kódobjektumok  generált forrás (Közben optimalizáció) A fordító a végén visszaad egy eredmény objektumot – Hiba és figyelmeztetési listák – Generált forráskódok

Értelmezők JavaCC által generált parser: – Nyelvtan leírás (EBNF)  JavaCC  Parser Grammar.jjt – Globálisan LL-1 nyelvtan – Lokálisan LL-2 AST objektumok  ezekből áll össze a szintaxisfa

Előfordító A szintaxisfa alapján felépítünk egy saját reprezentációt a modell köré. Bejárjuk az egész fát, ez alapján építkezünk. Az eredmény nem egy fa lesz, hanem egy a modellt reprezentáló objektum. A továbbiakban ezen az objektumon dolgozunk.

Transzformációk Apróbb beállítások a modellen, amik feltételezik annak teljességét – Mi legyen konstans, változó ill. függvény? Fablesben definiált konstans nem feltétlen az, sőt! Pl.: random = uniform(0,1); 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 felcímkézése – …

Típusozás I 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 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 )

Típusozás II Ha még nem ismerjük a paraméterek típusát? – Iteratív feldolgozás Konverziók – x := 5; x:=2.1 – double vagy int? => double upcast – nem castolható eredmények  TypeMismatch Mi legyen, ha ugyan az a függvény más-más típusú argumentumokkal szerepel? – Függvénycsaládok generálása pl. f(1);…;f(0.5) => int f(int), double f(double) Értékadás szerű függvények? – Pl. union() halmazokra, mátrix (i,j)-edik elemének beállítása, stb.

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ó

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.

Segédeszközök Dokumentáció generátló ezsközök – Modellből egy cikk vázlata – Nagyban hasonlít pl. a javadoc-ra – Dokumentációs comment: ”/**” ill. ”*/” – Több formátum: HTML, PDF, RTF, LaTeX forrás Saját Eclipse-alapú fejlesztőkörnyezet RePasttó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 Charting Package generál le

Összefoglalás Funkcionális nyelv, tömör szintaxis Típusok nélkül dolgozunk Hasznos eszközkészlettel rendelkezik Köszönöm a figyelmet!