szakdolgozatmidra.uni-miskolc.hu/jadox_portlets/documents/... · a számítógépbe már nem olyan...

45

Upload: others

Post on 26-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Szakdolgozat

Miskolci Egyetem

Közös fejleszt®i keretrendszer fuzzy szabály

interpolációs módszerekhez

Készítette:

Tóth Dávid

2008. Programtervez® Informatikus

Témavezet®:

Krizsán Zoltán

Miskolc, 2013

Page 2: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Miskolci Egyetem

Gépészmérnöki és Informatikai KarAlkalmazott Matematikai Tanszék Szám:

Szakdolgozat Feladat

Tóth Dávid (EN2L32) programtervez® informatikus jelölt részére.

A szakdolgozat tárgyköre: Fuzzy Szabály-Interpolációs módszerek keretrendszere

A szakdolgozat címe: Közös fejleszt®i keretrendszer fuzzy szabály interpolációs mód-szerekhez

A feladat részletezése:A MTATLAB-ból már ismert Fuzzy Rule Interpolation Toolbox (FRIT) alapján C++nyelven egy keretrendszer kialakítása. A meglév® 6 eljáráson túl további b®víthet®ségés könny¶ használat biztosítása.

Témavezet®: Krizsán Zoltán egyetemi tanársegéd

Konzulens: Dr. Karácsony Zsolt, egyetemi adjunktus

A feladat kiadásának ideje:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .szakfelel®s

2

Page 3: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Eredetiségi Nyilatkozat

Alulírott . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; Neptun-kód: . . . . . . . . . . . . . . . . . . .a Miskolci Egyetem Gépészmérnöki és Informatikai Karának végz®s . . . . . . . . . . . . . . . . . . .szakos hallgatója ezennel büntet®jogi és fegyelmi felel®sségem tudatában nyilatkozomés aláírásommal igazolom, hogy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .cím¶ szakdolgozatom/diplomatervem saját, önálló munkám; az abban hivatkozott szak-irodalom felhasználása a forráskezelés szabályai szerint történt.

Tudomásul veszem, hogy szakdolgozat esetén plágiumnak számít:

• szószerinti idézet közlése idéz®jel és hivatkozás megjelölése nélkül;

• tartalmi idézet hivatkozás megjelölése nélkül;

• más publikált gondolatainak saját gondolatként való feltüntetése.

Alulírott kijelentem, hogy a plágium fogalmát megismertem, és tudomásul veszem,hogy plágium esetén szakdolgozatom visszautasításra kerül.

Miskolc, . . . . . . . . . . . .év . . . . . . . . . . . .hó . . . . . . . . . . . .nap

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Hallgató

3

Page 4: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

1.szükséges (módosítás külön lapon)

A szakdolgozat feladat módosítása

nem szükséges

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

dátum témavezet®(k)

2. A feladat kidolgozását ellen®riztem:

témavezet® (dátum, aláírás): konzulens (dátum, aláírás):

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

3. A szakdolgozat beadható:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

dátum témavezet®(k)

4. A szakdolgozat . . . . . . . . . . . . . . . . . . . szövegoldalt

. . . . . . . . . . . . . . . . . . . program protokollt (listát, felhasználói leírást)

. . . . . . . . . . . . . . . . . . . elektronikus adathordozót (részletezve)

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . egyéb mellékletet (részletezve)

. . . . . . . . . . . . . . . . . . .tartalmaz.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

dátum témavezet®(k)5.

bocsátható

A szakdolgozat bírálatra

nem bocsátható

A bíráló neve: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

dátum szakfelel®s

6. A szakdolgozat osztályzata

a témavezet® javaslata: . . . . . . . . . . . . . . . .

a bíráló javaslata: . . . . . . . . . . . . . . . .

a szakdolgozat végleges eredménye: . . . . . . . . . . . . . . . .

Miskolc, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

a Záróvizsga Bizottság Elnöke

4

Page 5: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Tartalomjegyzék

1. Bevezetés 6

2. Téma elméleti kifejtése 82.1. A Fuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.2. Keretrendszerek tervezése . . . . . . . . . . . . . . . . . . . . . . . . . 102.3. Megvalósítás módja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1. Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3.2. DLL (Dinamic Link Library) . . . . . . . . . . . . . . . . . . . . 112.3.3. A kiválasztott stratégia . . . . . . . . . . . . . . . . . . . . . . . 13

2.4. FRI módszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3. 3 A keretrendszer 173.1. A keretrendszer szerkezete . . . . . . . . . . . . . . . . . . . . . . . . . 173.2. A keretrendszer osztályai . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2.1. A kivételosztály . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.2. Az egylépéses FRI módszerek ®sosztálya . . . . . . . . . . . . . 223.2.3. A kétlépéses FRI módszerek ®sosztálya . . . . . . . . . . . . . . 24

3.3. A keretrendszer használata . . . . . . . . . . . . . . . . . . . . . . . . . 263.3.1. LIB használata Visual Studio 2010-ben . . . . . . . . . . . . . . 263.3.2. LIB használata Ubuntu alatt Eclipse-ben . . . . . . . . . . . . . 30

3.4. A keretrendszer kib®vítése . . . . . . . . . . . . . . . . . . . . . . . . . 313.5. A keretrendszerben található egylépéses módszerek . . . . . . . . . . . 33

3.5.1. KH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.5.2. VKK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.5.3. MACI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.5.4. GK(CRF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.5.5. FIVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.6. A keretrendszerben található kétlépéses módszerek . . . . . . . . . . . . 373.6.1. FRIPOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.7. Módszerek összegzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4. Konklúzió 39

Irodalomjegyzék 41

Adathordozó használati útmutató 45

5

Page 6: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

1. fejezet

Bevezetés

Szakdolgozatom egy olyan problémára próbál megoldást kínálni, mellyel a következ-tet® rendszereket használók már találkozhattak. A probléma, amit nevezhetünk akárhiányosságnak is, a következ®: nincs olyan keretrendszer, amely összefogná a fuzzy sza-bály interpolációs módszereket, vagy azok egy részét, és valós id®ben adná vissza azeredményt. El®ször azonban szeretném röviden bemutatni a téma elméleti hátterét.A fuzzy rendszerek a következtetést a fuzzy szabályok segítségével számolják ki. Akarakterisztikája ezeknek a rendszereknek leírható a szabályokkal. A klasszikus fuzzykövetkeztet® eljárások megkövetelik az input intervallum teljes lefedését, ami azt je-lenti, hogy minden egyes lehetséges meg�gyeléshez (observation) létezik legalább egymegel®z® antecedens, így kapjuk meg az érvényes következtetést (conclusion). A való-ságban sokkal gyakoribb a másik típusú fuzzy rendszer, a ritka fuzzy rendszer. Ennekoka lehet a hiányos ismeret, ami azt jelenti, hogy kevesebb ismeret áll rendelkezésre,mint amennyi szükséges lenne egy teljes szabály bázishoz, vagy a teljesítményt rontanánagyban egy teljesen fed® rendszer.

Számos fuzzy eljárás létezik, melyek eredményt adnak ebben az esetben is. EzeketFuzzy Szabály Interpolációs eljárásoknak hívják, melyek a meglév® szabályokból le tud-ják generálni a következtetést. Ezeket a módszereket két nagy csoportba lehet sorolniaz alapján, hogy milyen stratégia szerint generálják az eredményt: direkt eljárás (másnéven egylépéses eljárás), a másik pedig a kétlépéses eljárás. A kétlépéses módszerekel®ször interpolálnak egy ideiglenes szabályt, ez alapján kiszámolják a következtetéspozícióját és alakját.

A gyakorlatban többször el®fordul a ritka szabálybázisú fuzzy rendszer, mint a tel-jes lefedettség¶, mégis eddig nem volt olyan programozói keretrendszer, mely kezeltevolna ezt az esetet, és több fuzzy interpolációs módszert is tartalmazna. Sajnos ennekköszönhet®, hogy éles környezetben egyáltalán nem használták a ritka szabály bázisúfuzzy interpolációs módszereket. Több programozói könyvtár is létezik a teljes szabálybázisú rendszerekhez, de nincs egy se, ami a ritka szabály rendszer esetén is jó volna.

Eddig, ha egy olyan programot akartak fejleszteni, mely ritka szabálybázist hasz-nál, akkor a programozónak, vagy programozóknak a kiválasztott módszert egy prog-ramnyelven meg kellett írni. Ha azonban valamilyen okból kifolyólag át tértek másiknyelvre, akkor minden módszert újra és újra implementálni és tesztelni kellett, amiegyáltalán nem költséghatékony, a befektetett id®r®l nem is beszélve. Azon fejleszt®k-nek, akik nincsenek teljesen tisztában a fuzzy rendszerekkel, nagy segítséget nyújthat aMATLAB-os Fuzzy Toolbox [9] (ez a program könnyen használható, praktikus kutatá-sokhoz és bemutatókhoz, valamint letölthet® GNU liszensz alatt [10]), ahol különböz®

6

Page 7: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

módszereket próbálhatnak ki és vethetik össze a kapott eredményeket. Azonban ha aprojekt fejlesztési költségébe nem volt beleszámolva a MATLAB szoftver költsége, azplusz kiadást jelent, ugyanakkor a MATLAB alap szint¶ használatához is érteni kell,ami pedig id®ben jelent kiesést.

Abban az esetben, ha gyors reakcióra van szükség, valós id®ben futó alkalmazás fej-lesztésr®l van szó, a módszereket abban a nyelvben kell implementálni ahol használniis fogják azokat, mert minden beágyazott réteg jelent®sen megnöveli a rendszer válasz-idejét, ezzel csökkentve a program használhatóságát. A már említett MATLAB-os FRIToolbox éles környezetbe való átültetése csak más nyelvbe való beágyazással történ-het, de ennek több hibája is van. Nem támogatja csak a MATLAB saját nyelvét, nemhasználható más matematikai ingyenes szoftverb®l vagy natív programozói nyelvb®l(Java, C# vagy Python). A beágyazást C++ alkalmazásba meg lehet tenni, de ebbenaz esetben az eredmények kiértékelése nem elég gyors.

Szakdolgozatom témája tehát egy olyan keretrendszer kifejlesztése, mely kezeli aritka szabálybázisú fuzzy rendszereket, könnyen b®víthet® és elég gyors m¶ködést biz-tosít egy valós id®ben futó alkalmazásnak. Els® lépésként a Windows és Linux operációsrendszerek támogatása a cél, azok elterjedtsége miatt. Szakdolgozatomban a témát azalábbi részekre taglalom:

• Fuzzy bemutatása, LIB és DLL összevevtése

• Keretrendszer ismertetése

• FRI metódusok jellemz®i

• Szerkezet és osztályok leírása

• Keretrendszer használata és kib®vítése

• FRI metódusok, melyek implementálásra kerültek

7

Page 8: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2. fejezet

Téma elméleti kifejtése

2.1. A Fuzzy

Az életben vannak dolgok, amikr®l egyértelm¶en megállapítható, hogy mik azok pon-tosan. Például egy pontyról meg tudjuk mondani, hogy hal, egy németjuhászról pedigazt, hogy kutya. Az ilyen helyzeteket könnyen szemléltethetjük a matematika nyelvénhalmazokkal, Venn diagram segítségével (2.1 ábra). Az A halmaznak minden elemér®lelmondható, hogy teljes egészében az A-ban helyezkedik el. Ha logikailag szeretnénkmegfogalmazni, akkor a halmazon belül lév® elemek igaz (1) értéket kapnak, az azonkívül es®k pedig hamis (0) értékkel írhatóak le.

Vannak viszont olyan fogalmak, tárgyak, stb, amirk®l már nem tudjuk egyértelm¶enmegmondani, hogy melyik csoportba, hova tartoznak. Vegyük például az ember fejénlév® hajszálakat, vagy éppen azok hiányát. Mi az a hajszál szám, ahonnan valakit márkopasznak lehet titulálni? Nyilván való, hogy ha egy szál haja sincs az illet®nek, az azegyén kopasz, és akinek dús frizurája van, ® egyáltalán nem sorolható ebbe a csoportba.A két végpont között azonban vannak köztes állapotok is, hiszen az utcán sétálva nemcsak dús hajú, vagy kopasz egyéneket látni. Emberi nyelven nem nehéz megfogalmaz-ni az ilyen és ehhez hasonló helyzeteket, de a matematika és az informatika nyelvén,hogy ez értelmezhet®vé váljon, a fuzzy halmazokat használjuk. A fuzzy lehet®vé teszi,hogy egy halmaz elemeir®l azt is meg tudjuk mondani, mennyire van benne, nem csak1-essel és 0-ával tudjuk jellemezni. Így tehát az imént említett A halmaz minden ele-méhez hozzá tudunk rendelni egy számot 0 és 1 között.

Ezek segítségével a halmaz elmélet nem korlátozódik éles határú halmazokra, ha-nem megadhatjuk, hogy az elemek mennyire tartozzanak bele egyes csoportokba, szokásezért ezeket elmosódott él¶ halmazoknak is nevezni. A különbség szemléltetésének ked-véért ezt is Venn diagramon mutatom be els®nek (2.2 ábra).

8

Page 9: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.1. A Fuzzy

2.1. ábra. Hagyományos Venn diagram

2.2. ábra. Elmosódott él¶ halmaz Venn diagram használatával

Az általános iskolai padban ülve, matematika órán, még elegend®ek voltak az éles(crisp) halmazok, melyeknek elemeir®l egyértelm¶en meghatározható volt, hogy hovatartoznak. Kés®bb azonban ez a szemlélet már nem állja meg a helyét, hiszen vannakolyan dolgok, amelyek egyszerre több helyre is tartoznak, de nem egyforma mértékben.Az emberek számára ez könnyen érthet®, azonban mindezt a gondolatmenetet átültetnia számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható valakir®l, hogy kopasz, hanem úgy is, hogy fejtetején milyen%-ban van haj. Így tehát a 2.3 ábrán Fuzzy halmazok segítségével már egyértelm¶entudjuk ábrázolni ezt az esetet.

Amint látszik, vannak bizonyos részek ahol egyértelm¶en megmondható, melyik

2.3. ábra. Fuzzy halmazok ábrázolása

9

Page 10: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.2. A Fuzzy

csoportba tartozik az illet®, de vannak átfedések is.

2.2. Keretrendszerek tervezése

A most következ® rész ki fog térni a keretrendszerek fejlesztésében követend® mintákra,melyeknek f® forrása Kent Beck alkotása volt [17].

A keretrendszerek fejlesztésének, verzióváltásának egyik legnagyobb problémája az,hogy a programozók nem módosíthatják a felhasználók kódját. Az ügyfél szempontjá-ból viszont annál jobb, minél kevésbé lát bele a programba elegend® számára az, hazökken®mentesen tudja a rendszert használni.

Keretrendszer írásánál gondolni kell a majdani verzió frissítésekre, újabb változatmegjelentetésére. A veszélye ennek az inkompatibilitás, amikor a felhasználó kódja"elromlik", hibák keletkeznek anélkül, hogy ®(k) bármit is változtatott volna. Tehátegy-egy frissítés kiadásánál arra kell �gyelni, hogy a keretrendszerhez úgy kerüljön újfunkció, hogy a régiek továbbra is tökéletesen m¶ködjenek. Persze ezt nem könny¶ ki-vitelezni, f®leg úgy, hogy a mérleg másik nyelvén a költségek, a munkaóra alacsonyantartása szerepel. Egy általános programnál például elegend® a változókat, függvényeketprotected-ként létrehozni, keretrendszer esetében azonban el®nyösebb (még ha ez megis nehezíti olykor a dolgokat) private biztonsági módosítót használni.

Ha egy régi osztályt lecserélünk gyakran megéri a nevét meghagyni, így a kliensek-nek elegend® csupán az import-ot átírni, ami jóval kevesebb problémával jár, minthaa felhasználónak kéne a programját nagymértékben megváltoztatni emiatt. Emellettsokszor el®forduló megoldás az is, amikor egy-egy funkció neve más lesz (mert az újverzióban kicsit másabb szerepet tölt be), de az argumentumok sorrendje változat-lan marad. Így egy egyszer¶ cserével megoldhatók a frissítéssel bekerül® változtatások.Valamint arról sem szabad elfelejtkezni, hogy 1-1 módosítással mennyi felhasználótnyerhetünk vagy éppen veszíthetünk.A kompatibilitás meg®rzését úgy a legkönnyebb kivitelezni, ha a kliens a lehet® leg-kevesebbet látja, éppen annyit amennyit feltétlenül szükséges ahhoz, hogy használnitudja a keretrendszert. Optimális esetben ezek a részek, részletek a fejlesztés közbennem változnak, vagy csak nagyon minimálisan, ám ezt megjósolni nehéz. A kompati-bilitásnak 2 fajtája van, az egyik az el®refelé, a másik a visszafelé való kompatibilitás.Mind a kett®t fenntartani azonban túlzottan költséges lenne, ezért a tervezés elejénfontos leszögezni melyik lesz alkalmazva.

A kompatibilitás meg®rzésér®l elmondható, hogy általánosan két megoldás kínálko-zik. Az egyik a könyvtárosztály, melynek el®nye, hogy frissítéskor csak arra kell �gyelni,hogy az eddig jól m¶köd® metódusok továbbra is ugyan úgy használhatók legyenek,hátránya viszonyt, hogy korlátozott lehet®ség van a b®vítésére. A másik szóba jöhet®koncepció az objektumok. Az objektumoknak háromféle használata lehet: példányosí-tás, kon�guráció, vagy implementáció. A példányosítás akkor el®nyös, ha a kliensnekcsak az adatokra van szüksége. A kon�guráció már nagyobb rugalmasságot kínál, hiszenilyenkor a felhasználó saját változóival, vagy objektumaival példányosítja a metódust,azonban a tervez®nek �gyelnie kell arra, hogy így kevesebb szabadság áll rendelkezésre.Egy-egy objektum maximum kétféleképpen legyen példányosítható, különben nagyonbonyolulttá válna a rendszer. A harmadik az implementáció, mely a fejleszt®k szem-pontjából a legkevesebb mozgásteret engedi meg.

Az absztakció megvalósítására is két lehet®ség kínálkozik: az interface és a szuper-osztály. Az interface el®nye, hogy a kliens csak annyit lát, amennyit feltétlen szüksé-

10

Page 11: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.3. A Fuzzy

ges neki, hátránya, hogy fejlesztés közben ha egy új metódus kerül a keretrendszerbe,minden implementáció hibás lesz. További jó tulajdonsága, hogy több interface is imp-lementálható.

A szuperosztály majdhogynem ellenkez® adottságokkal rendelkezik, mint az inter-face. Mikor új metódus kerül bele, azzal nem rontja el a felhasználó kódját, tehát afejlesztés ilyen szempontból könnyebb, viszont egyszerre csak egy osztályát lehet kiter-jeszteni. Fejlesztés közben csak a private metódusokat és adattagokat változtathatjukmeg, hogy a kompatibilitás megmaradjon. Jól át kell gondolni, melyek kapnak protectedbiztonsági besorolást, mert azt kés®bb már nem módosíthatjuk.

2.3. Megvalósítás módja

Ahhoz hogy a keretrendszer minél szélesebb körben elterjedhessen, szem el®tt kell tar-tani a következ® pontokat:

• könnyen kezelhet® és b®víthet® legyen

• több operációs rendszeren, esetleg több elterjedt programnyelven is elérhet® le-gyen

• a keretrendszer programozásába befektetett munka kell®en hatékony legyen

2.3.1. Library

A programnyelvek mindegyikének megvan a saját, betölthet® könyvtára, melyben azadott nyelv szintaktikájának megfelel® függvények, változók vannak letárolva, mely azazt felhasználó kód elejére másolódik fordítási id®ben. A DLL-el szemben hatalmasel®nye az, hogy program ami használja biztos lehet benne, hogy ez az a verziója akönyvtárnak, amire szüksége van, elkerülve így a függ®ségi hibákat (dependency prob-lems). Ezt a gyakran el®forduló hibát szokták "DLL hell"-nek nevezni, de err®l majdkés®bb. Statikus könyvtárakat használni jelent®s teljesítmény növekedéssel járhat, va-lamint lehet®vé teszi hogy a programmal egybe legyen fordítva, és így alkossanak egyfuttatható fájlt. Statikus könyvtárak esetén csak azok a részek tölt®dnek be, amik aprogram során meghívásra kerülnek direkt, vagy indirekt módon, mely szintén el®nya DLL-el szemben, ahol az egész tartalom betöltésre kerül, anélkül, hogy tudná melyfunkciója lesz használva.Ugyanakkor statikus könyvtár esetében a futtatható fájl nagyobb lesz, mivel bele épüla kódba, míg DLL esetén a funkciókat tartalmazó fájl máshol helyezkedik el, és úgyhivatkozik rá a program.

Hátránya valamint, hogy nem teszi lehet®vé azt, hogy más programnyelvekbe is be-tölthet® legyen, és a benne található függvényeket használni lehessen. Nem beszélve atípusok különböz®ségér®l. Továbbá egyszerre csak egy program használhatja a belinkeltkönyvtárat, tehát a megosztást nem támogatja.

2.3.2. DLL (Dinamic Link Library)

Ahogy a neve is mutatja Dinamic Link Library, magyarul talán leggyakrabban meg-osztott könyvtáraknak szokás hívni, azt jelenti, hogy a DLL-ben tárolt adatokat ésfüggvényeket több alkalmazás is képes használni egy adott id®ben. Vegyük például a

11

Page 12: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.3. A Fuzzy

Windows-ban a USER32.dll, vagy KERNEL32.dll, ezek azok a DLL-ek, melyek szük-ségesek ahhoz, hogy a Win32 alrendszer m¶ködhessen.Ha egy függvényt egyszer megírtak és DLL-be rakták, akkor azt bármelyik alkalmazástudja használni anélkül, hogy a program forráskódjában direkt módon szerepelne. Ter-mészetesen ugyan ez a helyzet a benne tárolt adatokkal is.El®nyei:

• Alacsony memória használat: Azok a függvények és adatok, amiket összeállítot-tunk egy DLL-be, elérhet®ek az összes program számára, melyek használják azt.A DLL csak akkor tölt®dik be a memóriába, amikor szükség van rá. A DLL bel-sejében lév® kódok csak olvashatók, íráshoz nem adnak felhatalmazást, így mikormemóriába tölt®dnek, a memória read-only területére kerülnek. A rendszernekígy lehet®sége van le mapp-elni a DLL tartalmát a folyamat címtartományába.Ha több programnak is szüksége van rá, akkor azok is a memóriából le mapp-elikmaguknak, létrehozva így a saját példányukat a címtartományukban.

• Kevesebb ki-be töltés: Képzeljük el, hogy két alkalmazás egyszerre használjaugyan azt a DLL-t, az egyik végez és kilép. A DLL még bent marad a memóri-ában, mert �gyeli, számolja, hogy épp hány alkalmazás használja. Amikor ez aszámláló eléri a nullát, csak akkor törli magát.Gondoljunk bele egy másik helyzetbe, mikor egy program egy olyan DLL-t akarhasználni, ami már a memóriában van és más alkalmazás használja. A rendszernem tölti be újra a DLL-t, csupán át map-eli az új alkalmazásnak, így az is tud-ja használni. Ez rengeteg id®t és munkát spórol az operációs rendszernek, mivelsokkal lassabban olvasná be az adatot a HDD-r®l, mint a memóriából.

• "Csak a polcról kell levenni": Egy jól megtervezett DLL bármelyik másik prog-ramnak hasznos része lehet. Gondoljunk rá úgy, mint egy komponensre, aminek am¶ködésében és funkcionalitásában teljesen biztosak vagyunk. Csak be kell hívniegy másik projektbe és már be is tölti a kívánt funkciót/funkciókat.Képzeljünk el egy olyan DLL implementációt, ami elvégzi az összes lehetségesszámítást, melyre szükség van ahhoz, hogy gra�kus szoftvert fejlesszünk. Ha ezegyszer kész, bármelyik másik ilyen programba betehetjük, minden probléma nél-kül.

• Együttm¶ködés több programnyelvvel: Egy DLL amit egy nyelven megírtunk,használhatjuk olyan alkalmazásokban is, melyeket más nyelven írunk.Fejleszt®knél ez gyakori, hogy optimalizált rutinokat írnak assembly-ben, majdezeket összegy¶jtik egy DLL-be, és kés®bb meghívják C-ben vagy Visual Basic-ben.A fejleszt®k szempontjából nem túl szerencsés, hogy elég sok nyelv támogatjaa DLL használatát, viszont nagyon kevés az olyan, ami alkalmas az írásra is.Képzeljünk el egy alkalmazást, ami a DLL segítségével I/O m¶veleteket hajtvégre Visual Basic-ben, használva az inportb és outportb függvényeket a CRTnatív könyvtárból. A DLL-ek lehet®vé teszik az ilyen együttm¶köd® kódokat.

• Könny¶ utólagos javítások: Mivel könnyen el®fordulhat, hogy egy termék eladá-sa után derülnek ki a problémák, ezt kijavítani általában nagyon fáradtságosmunka. Újra build-elni egy nagy alkalmazást majd újra kiküldeni a vásárlóknaksok id®t vesz igénybe. Mindez elkerülhet®, ha a projekt úgy van megtervezve,

12

Page 13: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.3. A Fuzzy

hogy könnyen kezelhet®, különálló modulokból kapcsolódik össze, melyek DLLformájában tárolódnak. Csak annyit kell tenni, hogy a hibás részt kijavítani ésa vásárlók számára elérhet®vé tenni, mint egy frissítést. Ugyanakkor ez az el®nya DLL-ek legnagyobb hátránya is lehet. Minden attól függ, mennyire gondosanvan megtervezve a kód.

Hátrány:

• A DLL hell: Ez a legnagyobb probléma, amit a DLL-ek okozni tudnak. Amennyi-re lehet, el kell kerülni az olyan helyzeteket, amikor a fordító olyan hibát dob,hogy nem talál egy bizonyos részt a DLL-ben. Vagy egy másik esetben példáultelepítésre kerül egy új program, ezt követ®en az eddig fent lév®k pedig hibásanfutnak le, vagy el sem indulnak. Ezek egyértelm¶en a "DLL hell"-nek nevezettproblémának a jelei. Leggyakrabban akkor fordul el® ilyen, ha a szoftver tele-pít®je nem �gyeli a verziószámban láv® eltéréseket, és vagy egy újabb DLL-t írfelül egy régebbivel, vagy pont ellenkez®leg, egy régit módosít az újra, amiben vi-szont nagy változások történtek. A DLL-eknek visszafelé kompatibiliseknek kénelenniük, ez csakis a tervezésen múlik, ezt azonban nehéz elérni.

Mit tartalmazhat egy DLL:A DLL-ek általában kódokat, adatokat és forrásokat tartalmaznak. A kódok a read-only részen tárolódnak így könnyen használhatja egyszerre több alkalmazás is, de azadatokkal más a helyzet. Minden egyes alkalmazás, melynek szüksége van az adatokra,megkapja a saját privát másolatát, hacsak nem valaki megosztottnak jelöli meg azokat.A kód részben tárolódnak az osztályok, illetve a függvények. Lehetnek olyan osztályok,melyekben a függvények és az adatok egy helyen tárolódnak, egy egységet alkotnak,de az önálló függvények használhatnak globális változókat is. Az el®bb felsoroltak egy,vagy több forrás fájlba van eltárolva, de ezek össze vannak csomagolva egy DLL �le-á.A DLL-ek másik DLL fájlból is importálhatnak függvényeket vagy osztályokat.

2.3.3. A kiválasztott stratégia

A fent leírtak alapján jól látszik, hogy a DLL egy univerzális megoldás lenne a toolboxszámára, ugyanakkor a statikus librarynak is vannak el®nyei és véleményem szerintkeretrendszer elterjedéséhez vezet® úton els® lépésnek tökéletesen elegend® a LIB. Aközeljöv®ben kilátás van egy francia kooperációra, mely ha sikeres lesz, minden bi-zonnyal elkészül majd a rendszerb®l egy DLL is, ezáltal kib®vítve a felhasználhatóságkörét és a célközönséget.

13

Page 14: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.4. A Fuzzy

2.4. FRI módszerek

A Fuzzy logikával dolgozó rendszerek a szabályokon alapszanak. A szabálybázisnak kéttípusa létezik:

• s¶r¶ szabálybázis

• ritka szabálybázis

S¶r¶ szabálybázisról akkor beszélünk, ha az input tér teljesen le van fedve, tehát min-den lehetséges meg�gyeléshez létezik legalább egy olyan szabály, melynek antecedensrésze átfedésben van vele és ez alapján érvényes konklúziót lehet generálni. Amennyi-ben a fent leírt eset nem teljesül, a szabálybázist ritkának tekintjük. Ritka szabálybázisesetén a klasszikus következtetési módszerek nem használhatóak. Ekkor az eredménytkülönböz® közelít® eljárással számítják ki a rendelkezésre álló információk alapján. Eze-ket Fuzzy Szabály Interpolációs módszereknek hívják.S¶r¶ szabálybázisokat kezel® rendszerek már léteznek, de olyan, amely a ritka szabály-bázisú eljárásokat összefogná és egy egységes keretrendszert alkotna, mely ingyenesenelérhet® mindenki számára, még jelen pillanatban nincs. Arról nem is beszélve, hogya módszerek viszonylag nagy százaléka rosszul, vagy hiányosan dokumentált, esetlegnehezen fellelhet®, megnehezítve így a fejleszt®k dolgát. Ezért is fontos hogy össze le-gyenek gy¶jtve, így akik ritka fuzzy rendszerekkel szeretnének foglalkozni, a kutatás ésprogramozás résszel ne kelljen foglalkozniuk.Ritka szabálybázis többféleképpen keletkezhet:

• Szakért®t®l vagy más forrásból származó ismeretek, tapasztalatok nem elegend®-ek a teljes input terület lefedésére

• Lehetséges, hogy a szabálybázis kezdetben s¶r¶nek számított, de a kés®bbi han-golás folyamán, az antecedens halmazok formája és pozíciója változhat, melynekkövetkeztében a halmazok között úgynevezett lyukak alakulhatnak ki (2.4 ábra).

• A s¶r¶ szabálybázis a sok dimenziónak és az inputhalmazoknak köszönhet®en túlnagy, meghaladja a hardver tárolási kapacitását, ezért mesterségesen megritkít-ják.

• Amennyiben az el®bb említett helyzet nem jelent problémát, tehát a tárolás meg-oldható, a számítási id® még mindig elérhet olyan szintet, ami után már kényte-lenek megritkítani a szabálybázist.

2.4. ábra. Példa s¶r¶ és ritka szabálybázisra

14

Page 15: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.4. A Fuzzy

A ritka szabálybázisú eljárások két csoportba sorolhatók. Az els® csoportba tartozóeljárások az eredményt közvetlenül állítják el® becslés segítségével, ezeket egylépésesmódszereknek nevezzük. A másik csoport tagjai el®ször egy ideiglenes szabályt alkotnaka már meglév®k alapján, melynek antecedens része legalább részben fedi a meg�gyelést,majd ezt követ®en az új szabály és a meg�gyelés közti hasonlóság alapján számítják kia becsült konklúziót. Az egylépéses módszerek legjelent®sebb tagjai:KH [1] (Kóczy és Hirota), MACI [2] (Tikk és Baranyai), FIVE [21] (Kovács és Kóczy),IMUL [4] (Wong, Gedeon, Tikk) és VKK [5] (Vass, Kalmár, Kóczy).Legismertebb kétlépéses eljárások:GM (Baranyi, Kóczy és Gedeon) [6], FRIPOC (Joahnyák és Kovács) [8], ST (Yan,Mizumoto és Qiao) [7], FIVE (Kovács és Kóczy) [21].A felsorolt módszerek közül nem mind, jelenleg 6 implementált a keretrendszerben, deez a szám változni fog, ahogy el®rehaladnak a fejlesztések. Ezek a következ®k:KH [1], VKK [5], CRF [13], MACI [2], FIVE [21], FRIPOC [8].Amint látható 5 egylépéses és 1 kétlépéses módszer található eddig a keretrendszerben.Mivel az egylépéses módszerek leprogramozása kevesebb id®t vesz igénybe és esetenkéntegyszer¶bbek is, mint a kétlépésesek, ezért ebb®l került több implementálásra. A fuzzyinterpolációs módszerek, melyek a keretrendszerbe kerülnek, �gyelembe veszik az FRItechnikákra vonatkozó általános szabályokat [11]:

• Érvénytelen eredmény elkerülése.

• Legyen forma®rz®. Ez azt jelenti, hogy a megadott meg�gyelésnek és a kiszámítottközelít® eredménynek az alakja hasonló kell, hogy legyen.

• A köztes kapcsolatok meg®rzése. Amennyiben a meg�gyelés két antecedens közötthelyezkedik el, akkor a becsült eredménynek a szabálybázis szerinti két konzek-vens közé kell esnie.

• Szabálybázissal való kompatibilitás. Megköveteli a modus ponens elvének teljesü-lését. Ez azt jelenti, hogy ha egy meg�gyelés egybeesik egy antecedens-el, akkora konklúziónak a szabálybázis szerinti konzekvensnek kell megfelelnie.

• A becsült eredménynek meg kell tartania a fuzzy tulajdonságot. Két ellentétesmegközelítése van ennek a témának az irodalomban. Az egyik szerint ha vanegy singleton meg�gyelésünk, akkor abból a módszernek egy szintén singletonkövetkeztetést kell készítenie. A másik vélemény szerint a konzekvens fuzzy tu-lajdonságait kell �gyelembe venni a szabályok alapján. Singleton-t csak akkorkaphatunk ha az összes konzekvens amit a szabályokban �gyelembe vesznek azinterpolációnál, mindegyik singleton.

• Közelít® képesség (stabilitás). A becsült szabálynak a lehet® legjobban közelíteniekell a kapcsolatot két dimenzió antecedens-ei és konzekvensei között.

• Szakaszonkénti linearitás megtartása. Ha a �gyelembe vett fuzzy halmazok sza-kaszonként lineárisak, akkor a közelített halmazoknak is meg kell tartaniuk ezt atulajdonságit.

• Többdimenziós antecedens univerzumok használhatósága. Ez azt jelenti, hogy azFRI módszernek hasonló karakterisztikát kell mutatnia ha kiegészítik, és többdimenziós bementi tere lesz.

15

Page 16: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2.4. A Fuzzy

• A fuzzy halmaz alakjára vonatkozó bármilyen jelleg¶ megszorítás nélküli alkal-mazás. Ezt a pontot nem feltétlen kell �gyelembe venni, mert a gyakorlatbanelég s¶r¶n találkozunk szakaszonként lineáris fuzzy halmaz és Gauss-görbe alakúhalmaz találkozásával.

16

Page 17: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3. fejezet

3 A keretrendszer

A keretrendszerrel szemben támasztott 3 f® követelmény:

• Kell®en gyors legyen ahhoz, hogy valós id®ben tudjon reagálni, így éles helyze-tekben is tökéletesen m¶ködjön

• Széles kör¶ használhatóság is fontos szempont. Azt szeretném elérni, hogy minéltöbb projektben alkalmazható legyen, így segítve a keretrendszer elterjedését.Ehhez pedig az kell, hogy minél több programozási nyelvbe beágyazható legyen. Aközeljöv®ben a Java, C#, és a MATLAB, illetve a Freemat matematika szoftverektámogatása a cél.

• Univerzális kezel®felület kialakítása. Mivel több módszert is tartalmaz a keret-rendszer, biztosítani kell a menet közbeni változtatás lehet®ségét, mindezt úgy,hogy küls®leg ne legyen különbség az eljárások közt, kényelmessé téve felhasználószámára a használatot.

Ahhoz hogy a fenti kritériumoknak megfeleljen a keretrendszer, többféleképpen iselérhet®vé kell tenni: el®ször is egy programozói könyvtár formájában, mely C++-banhasználható, valamint tervbe van véve egy úgynevezett wrapper osztály is a népszer¶bbprogramnyelvekhez (Java, Python, C#). Az FRI módszerek használatának egységesíté-se úgy lett megoldva, hogy bármelyik metódust ugyan azzal az interface-el lehet kezelni.Az osztály hierarchia és az objektumorientált minták biztosítják ezt. A toolbox f® célja,hogy egyszer¶sítse a programozók dolgát azzal, hogy szabványosított függvénykönyv-tárat ad a kezükbe.

Az el®z® fejezetben felsorolt 9 pontból, melyet Baranyai és szerz®társai határoztakmeg, csak az egyes feltétel teljesíthet®, mert több olyan módszer is van, mely a maradék8at csak részben, vagy egyáltalán nem tudja kielégíteni. Ha a program futása közbenabnormális m¶ködés következik be, akkor ez egy kivételt vált ki (err®l kés®bb). Mindenhibára különböz® hibakódot és kivétet generál a porgram a könnyebb, egyértelm¶bbhibakezelés végett.A keretrendszer f® koncepcióiról, valamint megvalósítási módjáról a [18]-cikkben is ol-vasni lehet.

3.1. A keretrendszer szerkezete

A toolbox alapja C++ban íródott, mivel ez egy gyors objektum orientált nyelv ésszéles körben elterjedt. Sok osztály már el®rede�niált, de az objektum orientáltságnak

17

Page 18: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

köszönhet®en ezek felülírhatók, vagy származtathatóak bel®lük új osztályok. Csak afelhasználón múlik az, hogyan alakítja ezek után a kódot.A keretrendszer támogatja az eljárások mindkét típusát, az egylépéseseket és a két-lépéseseket egyaránt. A kompatibilitás érdekében ugyanúgy, mint a MATLAB-os FRIToolbox, a FIS fájlt használja adatok bevitelére. A FIS fájl tartalmazza a felhasználóritka szabálybázisát, mely alapján a választott módszer meghatározza az eredményt.Valós körülmények között általánosságban az mondható el, hogy a szabálybázis nemszokott változni, csak a meg�gyelés. Így tehát a jobb teljesítmény érdekében a meg�-gyelés nem feltétlen egy OBS fájlból származik, hanem egy függvény paramétereként isátadódhat a programnak. Általában az összes Fuzzy interpolációs módszernek lehetnektovábbi input adatai, melyet felhasználhatnak a fejleszt®k a kód írása során, ilyenekpéldául az alfa szintek. A paraméterek típusa és száma a kiválasztott módszert®l függ,tehát egy paraméter lehet akár egy speciális karakter lánc is.A CFRIMethod osztály a közvetlen, vagy közvetett szül®je az összes FRI metódusnak.Ez az osztály de�niálja a közös interface-t az FRI módszereknek, így biztosítva a kü-lönböz® módszerek egységes felületét. A felhasználó szemszögéb®l nézve négy egyszer¶lépést kell végrehajtania, hogy használni tudja bármelyik FRI módszert:

1. Rendszer létrehozása. Els® lépésben a fuzzy rendszert kell el®állítani FIS fájlhasználatával, vagy karakter lánccal. Ez a rendszer lehet ritka szabálybázisú is.

2. FRI módszer kiválasztása az el®z® lépésben létrejött rendszerhez. Ennél adja mega felhasználó, hogy melyik módszert szeretné használni. A háttérben a kiválasz-tott metódus neve alapján létrejön a megfelel® objektum. Fontos megjegyezni,hogy ezt a lépést futás közben többször is végre lehet hajtani.

3. FRI metódus inicializálása, ahol speciális paraméterek is megadhatók. A mód-szerek különböznek egymástól, így vannak olyanok amelyeknek további adatokravan szükségük. Ezek a paraméterek fontos szerepet játszhatnak a végeredménykiszámításában. Az init metódus futás közben is képes adatokat fogadni a fel-használótól, melyeket a kiválasztott módszer a számítások során felhasznál.

4. A konklúzió meghatározása, amire akkor kerül sor, ha meghívódik az interpolatemetódus. Ez a f® lépése az FRI módszereknek, melynek során a meg�gyelésb®lés az input szabálybázisból kiszámítódik a becsült eredmény. Amennyiben valósid®ben futó alkalmazásról van szó, ez a lépés többször is meghívódik.

3.1. ábra. Egylépéses módszerek struktúrája

18

Page 19: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Az egylépéses módszerek esetében, amit a 3.1-es kép illusztrál, az FRI metódusosztályát a CFIMethod osztályból kell származtatni. Ez az osztály deklarál egy vir-tuális metódust, melyet implementálni és felülde�niálni kell. Ez a metódus számoljaki a becsült eredményt a kapott meg�gyelés és a fuzzy rendszer felhasználásával. Ameg�gyelések egy Membership function (tagsági függvények) nev¶ vektorban vannakeltárolva, mint paraméterek, és innen lehet hivatkozni rájuk. A keretrendszer jelenlegaz alábbi egylépéses módszereket tartalmazza: KH [1] (CKH osztály) VKK [5] (CVKKosztály), MACI [2] (CMACI osztály), FIVE (CFIVE) [21], és CRF [13] (CCRF osz-tály). Ha új egylépéses módszert szeretnénk létrehozni, akkor annak a CFRIMethodosztályból kell származnia és az interpolate metódusát felül kell de�niálni.

3.2. ábra. Kétlépéses módszerek struktúrája

A másik csoport tagjait kétlépéses módszereknek hívjuk, és ahogy a 3.2-es ábránlátható az FRI metódus(ok) a CGeneralizedMethod osztályból származnak, majd pedigfelül kell de�niálni a következ® 3 osztályt: determineAntecedentShapes, determineCon-sequentPositions és a determineConsequentShapes osztályokat. Ezek a CGeneralized-Method osztályból hívódnak meg szigorúan ragaszkodva az el®bb látott sorrendhez. Itta meg�gyeléseket paraméterként kapják meg, ami a Membership Function vektorbanvannak karakter láncként tárolva. A keretrendszer jelenlegi állapotában egy kétlépésesmódszert tartalmaz ez pedig a FRIPOC [8] (CFRIPOC osztály). Tehát amennyiben aprogramozó egy új kétlépéses módszert szeretne implementálni, annak a következ®kép-pen kell történnie:

1. Származtatja a metódusát a CGeneralizedMethod osztályból

2. Felülde�niálja a következ® osztályokat: determineAntecedentShapes, determine-ConsequentPositions és determineConsequentShapes.

3.2. A keretrendszer osztályai

Ebben a fejezetben a toolbox-ot felépít® osztályokról lesz szó. Nem mind kerül bemu-tatásra, lesznek olyanok, amik részletezésre kerülnek, másokat pedig csupán felszínesen

19

Page 20: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

érint ez a rész.A keretrendszerben a FIS �le (melyben találhatók az input "A", az output "B",

valamint a szabályok) beolvasását és írását a CFIS�le osztály végzi. Ez tartalmaz 2readFIS() és 2 writeFIS() függvényt, eltér® argumentum listával. Az írás és az olvasásis megtehet® két módon, �le átadásával, illetve stringstream használatával. A meg�-gyelés kezelésér®l a COBSFile osztály gondoskodik. Mivel itt írni nem, csak olvasnikell az adatot, 2db readOBS() függvény található benne, a már imént említett kétféleargumentumlistával (�le, illetve stringstream). A FIS �le-ból kiolvasott szabályoknakkülön osztályuk van, melyben letárolásra kerül maga a szabály, mint string, valamintaz input és output mérete a könnyebb kezelhet®ség érdekében. Lekérhet® továbbá asúlyozás és a szabályok kapcsolatai (1 illetve 0, mely a logikai AND-nek és OR-nakfelel meg). A fuzzy halmazok pontjait a CPoint osztály kezeli. X és Y koordinátákattárol és ezekr®l kérhet®k le információk. A pontból, vagy pontokból álló halmaz nevea tagsági függvény (MF), ennek is külön osztálya van CMembershipFunction néven.A függvények lehet®vé teszik, hogy lekérdezzük a halmaz X illetve Y koordinátáit egyvektorba, valamint a halmaz alakját és nevét is. Egy dimenzióban lev® tagsági függvé-nyek alkotnak egy-egy úgynevezett partíciót, ennek megfelel®en a következ® osztály aCPartition. Ebben rögzítésre kerülnek az MF-ek, az intervallum amin találhatók, va-lamint a nevei. Az eddig felsorolt osztályokból áll össze a CSystem osztály.A továbbiakban három, a keretrendszert alkotó osztály kerül részletezésre.

3.2.1. A kivételosztály

A kivétel nem más, mint egy, a program futását megszakító hiba mely lehet a véletlenm¶ve (melyet try-catch felépítéssel lehet "elkapni"), de ki lehet váltani szándékosanis (throw parancs használatával). A keretrendszer egyik érdekes feature-je, hogy különkivétel osztállyal rendelkezik. Ez a megoldás segíti mind a programozót a kód tesztelé-sénél, debuggolásnál, illetve a felhasználót a programja futtatása közben. Teszi mindeztúgy, hogy mikor kiváltódik a kivétel, akkor sokkal pontosabb információt szolgáltat ahibáról, mint amit tenne egy általános exception. Mint minden osztálynak, így en-nek is van konstruktora, méghozzá kett® melyeket a 3.1-es kód szemléltet. Ahogy az1. sorban látható az els® konstruktor argumentumként fogad egy egész számot, amia hibát kiváltó sort tárolja, valamint egy �le nevet. Ilyenkor a rendellenesség forrásaismeretlen. A különlegessége, hogy ez meghívja az osztály másik konstruktorát egyUNKNOWN_ERROR (a headerben) el®re de�niált értékkel. Ez látható a 2. sorban.A másik konstruktor annyiban tér el az el®z®t®l, hogy a paraméterként átadott hibakódalapján állítja be a változókat. A 6. sorban a hiba kódot, a 7-ben a hibás sor számát,a 8. sorban pedig a kivételt dobó �le neve kerül inicializálásra. Íme a két konstruktorttartalmazó kódrészlet:

1 CFRIException : : CFRIException ( const i n t l i n e , const char ∗ f i l e ) {2 CFRIException (CFRIException : :UNKNOWN_ERROR, l i n e , f i l e ) ;3 } ;4

5 CFRIException : : CFRIException ( i n t error_code , const i n t l i n e , const char ∗f i l e ) {

6 m_error_code = error_code ;7 m_line = l i n e ;8 m_file = f i l e ;

20

Page 21: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

9 } ;

Code 3.1. Kivételosztály konstruktorai

Az adattagok (m_error_code, m_line m_�le ) a header-ben kerültek deklarálásra,valamint itt vannak de�niálva a hibakódok is. A hibakód pozitív egész szám (jelenlegmaximum 4 tizedes jegy¶), mely úgy épül fel, hogy az ezres és százas helyi értéken lév®szám egy b®vebb probléma kört határoz meg (pl: melyik metódus rendellenes m¶kö-déséb®l származik a probléma, 1xx: FIS �le hiba, 11xx FIVE hiba), a tizedes és egyeshelyi értéken lév® pedig a pontosabb megfogalmazást rejti (01-el kezd®dik a szám). Ígytehát egy adott hiba csoportnak maximum 99 kivétel de�níciója lehet.

1 i n t CFRIException : : getErrorCode ( ) {2 re turn m_error_code ;3 } ;4

5 const i n t CFRIException : : getLineNumber ( ) {6 re turn m_line ;7 }8

9 const char ∗ CFRIException : : getFileName ( ) {10 re turn m_file ;11 }

Code 3.2. A kivételosztály 3 egyszer¶ getter függvénye

Magában az osztályban 3 egyszer¶ getter függvény található (3.2 kódrészlet): getError-Code() 1-3. sor, getLineNumber() 5-7. sor, getFileName() 9-11. sor. Ezek arra szolgál-nak, hogy visszaadják a hibakódot, a sor számát ahol bekövetkezett a kivétel, valaminta �le nevét amin belül rendellenesség keletkezett.Továbbá az osztály tartalmaz egy olyan metódust, melynek neve GetMessage() ésvisszatér a �le nevével, a hiba szöveges üzenetével és a sor számával. A 3.3 kódrészletszolgál például a fentebb leírtakhoz.

1 s t r i n g CFRIException : : getMessage ( ) {2 s t r i ng s t r eam message ;3 switch (m_error_code ) {4 case −101: message << "FIS : F i l e not found or i n v a l i d ! " ; break ;5 case −102: message << "FIS : Convert to In t eg e r i s not p o s s i b l e ! " ;

break ;6 case −103: message << "FIS : F i l e a l r eady e x i s t ! P lease turn on the

f o r c ed mode i f you would l i k e to ab le to wr i t e i t . " ; break ;7 case −104: message << "FIS : Can not open f i l e " ; break ;8

9 case −201: message << " Input : x and y dimension not match ! " ; break ;10

11 case −401: message << "Rule : Input MF index i s too high " ; break ;12 case −402: message << "Rule : Input MF index i s too low" ; break ;

Code 3.3. A kivételek sorszámai

Érdemes meg�gyelni, hogy egy message változó került de�niálásra, mely stringstreamtípusú (2. sor) és ez lesz a függvény visszatérési értéke minden esetben.Amint látható egy sima switch case elágazás oldja meg a hibakódok visszafejtését szö-veges üzenetre (3. sortól). Ezután következnek a hibakódok, szépen tagolva.A 3.4 kódrészlet a kivételek sorszámának végét tartalmazza. Amennyiben olyan rend-ellenesség keletkezne a kód futása közben, amire nem volt felkészülve a rendszer, akkor

21

Page 22: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

alapértelmezett értékként úgynevezett Unhandled exception-t állít be üzenetként (le-kezeletlen hiba), ez látható a 4. sorban. A switch elágazás a 3.4 kódrészlet 5. sorábanér véget, ezután kerül hozzáf¶zésre a visszatérési értékhez a �le neve, valamint a hibássor száma (6. sor). Végül a függvény a 8. sorban visszatér a message-el.

1 case −1201: message << "VKK: The obse rvat i on hasn ' t any l e f tantecedent " ; break ;

2 case −1202: message << "VKK: The obse rvat i on hasn ' t any r i gh tantecedent " ; break ;

3

4 de f au l t : message << "Unhandled except ion ! " ;5 }6 message << " in FILE : " << m_file << " at LINE : " << m_line ;7

8 re turn message . s t r ( ) ;9 }

Code 3.4. A kivételek sorszámai és a függvény visszatérése

3.2.2. Az egylépéses FRI módszerek ®sosztálya

Annak érdekében hogy a módszerek egységesek legyenek, létre kellett hozni egy ®sosz-tályt, melyb®l származtatható mindegyik: közvetve, vagy közvetlenül. Ez az osztály aCFRIMethod. Tárol minden fontos információt ahhoz, hogy számolni tudjon az inter-polációs módszer, mindezt úgy teszi, hogy a konstruktorába argumentumként kér egyCSystem típusú objektumot, valamint segédfüggvényeket is magába foglal. Az egyikilyen az init metódus, mely az argumentumként megkapott string-et szétdarabolva pa-ramétereket ad át a módszereknek, map-ben (m_methodParams, mely a headerbenlett de�niálva).

A módszerek egy része referencia pont alapú számításokat végez, ennek megfele-l®en, az osztályban deklarálásra került a getReferencePoint() függvény, melyet a 3.5kódrészlet mutat be.

1 CPoint CFRIMethod : : ge tRe fe rencePo int ( CMembershipFunction mf , s t r i n gRPType) {

2 i f (mf . ge tPo int s ( ) . empty ( ) ) {3 throw CFRIException (CFRIException : :FRIM_NO_POINTS, __LINE__, __FILE__

) ;4 }5

6 s t r i n g mftype = mf . getType ( ) ;7 double RPx, RPy;8

9 i f (RPType == " co r e c en t r e " ) {10 i f ( mftype == " s ing lmf " ) {11 RPx = mf . ge tPo int s ( ) [ 0 ] . getX ( ) ;12 RPy = mf . ge tPo int s ( ) [ 0 ] . getY ( ) ;13 }14 e l s e i f ( mftype == " t r imf " ) {15 RPx = mf . ge tPo int s ( ) [ 1 ] . getX ( ) ;16 RPy = mf . ge tPo int s ( ) [ 1 ] . getY ( ) ;

Code 3.5. Az CFRIMethod osztály Referencia pont lekérésére alkalmas függvénye

Amint látható, bekér egy MF halmazt, valamint a referencia típusát (1. sor), ésez alapján adja meg a referenciapont X és Y koordinátáit. Valamint azt is érdemes

22

Page 23: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

meg�gyelni a függvény elején, a 2-4. sorban, hogy használja a kivételosztályt, amit azel®z® pontban részleteztem. A 6. sorban egy változóban letárolásra kerül a megadotthalmaz típusa, a 7. sor pedig deklarálja a referencia pont X és Y koordinátáit. Ezutána 9. sorban egy elágazás dönt a referencia pont típusának ismeretében, hogy merrehaladjon tovább az irányítás. A ref.pont számításnak 3 változatát kezeli, ezek sorban:

• corecentre

• corecentreprojection

• supportcentre

Minden referenciapont alapú elágazáson belül van még egy IF, mely a halmaz típu-sa alapján ágazik el, mivel ezt �gyelembe véve máshogy kell kiszámítani az X és Ykoordinátákat. Ezek lehetnek:

• singlmf 10. sor (egyérték¶ halmaz)1

• trimf 14. sor (háromszög alakú halmaz)

• trapmf (trapéz alakú halmaz)

• polymf (poligon alakú halmaz)

A függvény visszatérési értéke természetesen szintén egy saját osztály objektuma, aCPoint.

Mivel a keretrendszer alapja a MATLAB-os FRIToolbox, az eljárások is az alapjánlettek átírva. Ennek megfelel®en szükségszer¶ volt néhány MATLAB-os eljárást lekó-dolni C++-ba, hogy könnyebb legyen a módszerek leprogramozása. Az egyik ilyen aFind() függvény, melynek 4 példánya is megtalálható.

A függvény bekér egy vektort, egy operátort (=, <, >, <=, >=), valamint egyszámot ami a viszonyítási alap lesz és visszaadja azon számok halmazát (vektorban),melyek kielégítik a feltételt. A további hármat nem részletezném, megegyezik a m¶kö-dése a MATLAB-ossal.

Az utolsó bemutatásra kerül® függvény a CFRIMethod osztályból, az interpolate,melyet minden metódusnak felül kell dei�nálnia és majd ez fogja elvégezni a számí-tásokat. A 3.6 kódrészlet mutatja a megvalósítását. Az 1. sorban argumentumkéntmegkapja a meg�gyelést, azonban ha nem de�niálják felül, akkor a 2. sorban dob egy"metódus nincs implementálva" hibát, hiszen ebben az esetben a módszer nem is lehetmegírva.

1 vector<CMembershipFunction> CFRIMethod : : i n t e r p o l a t e ( CObservationobse rvat i on ) {

2 throw "method not implemented ! " ;3 }

Code 3.6. CFRIMethod Interpolate függvénye

Amit még érdemes megemlíteni, hogy a keretrendszer fejlesztése közben integrálásrakerült egy C++-os matematikai függvénytár, az Armadillo [25]. Ez a könyvtár speciáli-san mátrixok és vektorok kezelését segíti el® és talán ez áll a legközelebb a MATLAB-osfüggvények egy részéhez. Az utoljára implementált FIVE módszer már kihasználja en-nek az el®nyeit.

23

Page 24: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Amint látszik az osztálydiagramon ( 3.3 ábra ) a függvények elég nagy része használ-ja az armadillo-t. Erre els®sorban a FIVE miatt volt szükség, de amennyiben a többimódszer is átírásra kerül majd, hasznos lehet azok számára is.

3.3. ábra. FRImethod osztálydiagramja

3.2.3. A kétlépéses FRI módszerek ®sosztálya

Az egylépéses módszerek közvetlenül származnak a CFRIMethod osztályból (ezekr®lvolt szó eddig), a kétlépéses módszerek viszont közvetve származnak csupán bel®le,mert beiktatásra került a CGeneralizedMethod (másnéven GM) osztály is. Erre azértvolt szükség, mert a kétlépéses módszerek az interpolálás el®tt új szabályt hoznak létre,majd 3 fontos feladatot kell, hogy elvégezzenek. Ezek a számítások sorban a követke-z®k: az új szabály antecedens fuzzy halmazainak alakjának meghatározása, a konzek-vens halmazok referencia pontjának kiszámítása, utolsó lépcs®ben pedig a konzekvenshalmaz alakját határozza meg. Amennyiben ezzel a 3 feladattal végzett,a m¶ködésükmár nem tér el a fentebb bemutatottól.Ezért került tehát a GM.cpp-be az alábbi 3 függvény: determineAntecedentShapes(),determineConsequentPositions és a determineConsequentShapes. A GM.cpp az el®bbi3 virtuális függvényt (leszármaztatáskor ezeket mindenképp felül kell de�niálni), vala-mint az interpolate metódust tartalmazza, tehát úgymond mintaként szolgál a mód-szerek megírásához.Az 3.7 programkód a GM.cpp teljes kódja.

1 #inc lude "GM. h"

24

Page 25: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

2

3 GM: :GM(CSystem ∗ pSys ) : CFRIMethod( pSys )4 {5 m_type = "GM" ;6 }7

8 GM: : ~GM( void )9 {

10 }11

12 vector<CMembershipFunction> GM: : i n t e r p o l a t e ( CObservation obse rvat i on )13 {14 determineAntecedentShapes ( obse rvat i on ) ;15 determineConsequentPos i t ions ( obse rvat i on ) ;16 re turn determineConsequentShapes ( obse rvat i on ) ;17 }

Code 3.7. GM program kódja

Amint látható az 1. sorban meghívásra kerül a GM header-je, a 3-6. sorban talál-ható a konstruktor, a 8-10. sor pedig a destruktort tartalmazza. A 12-17- sorban minda 3 függvénynek a meg�gyelést kell csupán átadni. A 14. sorban lév® eljárás az antece-dens oldali fuzzy halmazok alakját hivatott megállapítani, a 15. sorban a konzekvenspozícióját kiszámoló függvény van, valamint a 16. sorban az utolsó lépés, a konzekvensalakját meghatározó függvény kapott helyet, mellyel vissza is tér a GMA m¶ködés megértéséhez a 3.8-as kódrészlet a GM header-jét tartalmazza:

1 #i f n d e f __CGM_H2 #de f i n e __CGM_H3

4 #inc lude "FRIMethod . h"5

6 c l a s s GM :7 pub l i c CFRIMethod8 {9 protec ted :

10 /// Az i n t e r p o l á l t s zabá ly antecedens halmazai a lak jának ameghatározása

11 v i r t u a l void determineAntecedentShapes ( CObservation obse rvat i on ) = 0 ;12 /// A konzekvens halmazok he lyze tének ( r e f e r e n c i a pont ja inak )

meghatározása13 v i r t u a l void determineConsequentPos i t ions ( CObservation obse rvat i on ) =

0 ;14 /// Az i n t e r p o l á l t s zabá ly konzekvens halmazai a lak jának meghatározása15 v i r t u a l vector<CMembershipFunction> determineConsequentShapes (

CObservation obse rvat i on ) = 0 ;16

17 pub l i c :18 GM(CSystem ∗ pSys ) ;19 ~GM( void ) ;20

21 vector<CMembershipFunction> GM: : i n t e r p o l a t e ( CObservation obse rvat i on ) ;22 } ;23

24 #end i f

Code 3.8. A GM header-je

25

Page 26: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

A kommentelés olvashatóvá teszi a kódot. A 4. sorban az FRIMethod.h behívásra kerül,melyre azért van szükség, mert 6-7. sorban ebb®l származik maga a GM is. A 11. 13. és15. sorban érdemes meg�gyelni, hogy a függvények "virtual" módosítót kaptak, ezzeljelezve a fejleszt®k felé, hogy ezeket feltétlenül felül kell de�niálni. A 18. és 19. sorbana konstruktor, illetve a destruktor látható, lehet®vé téve így a memóriagazdálkodásbóladódó problémák megel®zését.

3.3. A keretrendszer használata

A keretrendszer jelenleg a statikus könyvtárnak köszönhet®en C++ alól érhet® el. Eb-ben a részben két fejleszt®környezetben való használat kerül bemutatásra, az egyik acsak Windows alatt elérhet® Visual Studio, míg a másik a Linux alatt is alkalmazhatóEclipse.Amennyiben a keretrendszer sikeres lesz, a közeljöv®ben támogatást fognak élvezni másnyelvek is, például a java, MATLAB és a FreeMat is [12].

3.3.1. LIB használata Visual Studio 2010-ben

A következ® pár pontban szeretném bemutatni hogyan lehet m¶ködésre bírni a toolboxkönyvtárát Visual Studio 2010 alatt, kezdve egészen az elejér®l, a projekt létrehozásá-val, a végét pedig az eredmény kiíratásával zárnám. A lépéseket képekkel illusztráloma könnyebb megértés érdekében.

1. Mindenek el®tt létre kell hozni egy C++ Win32 alkalmazás projektet a VisualStudioban. Elérési útja: File → New → Project . . . (ugyanez elérhet® a Ctrl +Shift + N billenty¶ kombinációval). A projekt megkonstruálása közben �gyelnikell arra, hogy az Application Type Console application legyen, az Additionaloptions-ben a Precompiled header bekapcsolva maradhat, ez gyorsítja majd aprogram futását. További header-ökre (AFC, MFC) nincs szükség. A m¶velet a3.4 ábrán látható.

26

Page 27: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.4. ábra. C++ Projekt létrehozása

2. Nagyon fontos, hogy a project con�guration-t Debug-ról át kell állítani Release-re. Ezután a projekt beállítás ablakot kell el®hozni, mely úgy érhet® el, hogyjobb-gombot nyomunk a frissen létrehozott projektre és a legalsó, Properties op-ciót választjuk. A Code Generation fület kell megkeresni, mely a Con�gurationProperties→ C/C++→ Code Generation úton érhet® el. Ezen belül át kell állí-tani a Runtime Library beállítását Multi-Threaded DLL (/MD)-r®l Multi-Threaded (/MT)-re. Magyarázat a 3.5 ábrán látható.

3.5. ábra. Runtime Library beállítása

3. Ugyan abban az ablakban ahol a 2-es lépés végrehajtásra került, át kell navigál-ni a Linker-re, melyet a Con�guration Properties → Linker → Input útvonalonlehet elérni (3.6 ábra ). Ezen is belül az Additional Dependencies-hez kell hoz-záadni a library elérhet®ségét. Amennyiben a FRIT lib a projekt mellett van,

27

Page 28: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

akkor a hozzáadandó szöveg a következ®: fritoolbox/fritoolbox.lib. Természetesenamennyiben máshol lett elhelyezve a library, akkor azt az útvonalat kell odaírni.

3.6. ábra. Library hozzáadása

4. Negyedik és egyben utolsó lépés nem más, mint egy teljesen egyszer¶ példa po-rogram írása mely használja a toolbox egy metódusát. El®sször a kód elejéninclude-olni kell a library-t melyet az alábbi kód segítségével lehet megtenni:

1 #inc lude " f r i t o o l b o x \ f r i t o o l b o x . h"

Code 3.9. FRIToolbox behívása

Ezzel elérhet®vé válik az összes eljárás valamint minden függvény, amit a toolboxtartalmaz. A program main részében, a metódus választás el®tt els®ként be kellolvasni egy .FIS illetve egy .OBS �le-t. A FIS �le-ban van a leírása az inputnak(A halmazok), az outputnak (B halmazok), valamint a szabályok is itt találhatók.Az OBS-ban a meg�gyelés (A*) található. Ezek beolvasására szolgáló kód alábbolvasható:

1 CSystem ∗pSys = CFISFile : : readFIS ( "example . f i s " ) ;2 CObservation obs = COBSFile : : readOBS( "example . obs" ) ;

Code 3.10. FIS �le és OBS �le beolvasása

Ez a kód elvégzi a beolvasást az example.�s, illetve az example.obs �le-okból,ugyanakkor fontos megemlíteni, hogy mind a readFIS() mind pedig a readOBS()képes stringstream kezelésére is.Ezek után, hogy sikerült letárolni a fuzzy rendszert, valamint a meg�gyelést, akövetkez® lépés az FRI metódus kiválasztása. Ehhez létre kell hozni egy FRI-Toolbox objektumot, aminek az els® argumentuma a módszer neve (stringkéntmegadva, �gyelni kell az idéz®jelekre), a második pedig az imént beolvasásrakerült pSys fuzzy rendszer.

28

Page 29: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

1 FRIToolbox f r i t = FRIToolbox ( "FIVE" , pSys ) ;

Code 3.11. FRI módszer kiválasztása

A következ® lépés a módszer interpolate függvényének meghívása a meg�gyeléssel,mint argumentummal. Ez a kialakítás lehet®vé teszi, hogy az interpolate metó-dust szükség esetén mindig más observation-el hívjuk meg, anélkül, hogy a fuzzyrendszert újra be kellene tölteni.

1 vector<CMembershipFunction> mfs = f r i t . i n t e r p o l a t e ( obs ) ;

Code 3.12. Interpoláció meghívása

Amint látható a visszatérési érték egy vektor lesz, ami CMembershipFunction-b®l áll és minden dimenzióban tartalmazza a kiszámított értékeket. Az eredménymegjelenítésére a legegyszer¶bb módszer az mfs objektum toString() metódusá-nak meghívása.Az utolsó képen (3.7 ábra) látható a mintaprogram maga, valamint egy futásieredmény.

3.7. ábra. Mintaprogram futási eredménye

Összefoglalva tehát a keretrendszer használatát:

• include-olni kell a toolbox header �le-ját

• a program main részében a FIS és az OBS �le-t be kell olvasni

• ki kell választani a használni kívánt FRI módszert

• meghívni annak interpolate metódusát

Már ez a néhány szimpla lépés is lehet®vé teszi a toolbox használatát.

29

Page 30: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.3.2. LIB használata Ubuntu alatt Eclipse-ben

Az el®z® blokkban egy egyszer¶ példa került bemutatásra, hogyan is lehet alkalmazni atoolbox-ot Windows alatt Visual Studio-t használva. A koncepció egyik fontos pontja,hogy ne csak egy operációs rendszer alatt legyen elérhet® a keretrendszer, ezért ez arész a Linux alatti m¶ködésr®l ad egy rövid áttekintést. Mivel a példaprogram kódjaszerepelt már fentebb, az itt felsorolásra kerül® pontokban nem lesz róla szó, hiszenmindkét OS-en ugyanúgy m¶ködik.

1. Els® lépésként az Eclipse-ben létre kell hozni egy üres C++ projektet. Ez a File→ New→ C/C++ úton érhet® el (3.8 ábra). A megjelen® ablakban az Executab-le/Empty project opciót kell választani, a többi beállítási lehet®ség nem lényeges,maradhat alapértelmezetten.

3.8. ábra. Üres C++ projekt létrehozása

2. Miután elkészült az üres projekt, a következ® lépés a header hozzáadása. A Pro-ject Explorer-ben jobb-gomb a most készített projektre, majd a Properties opciótkell választani, melynek hatására megjelenik egy ablak a beállítási lehet®ségekkel.Az ablakon belül a C/C++ Build→ Settings-en belül a Cross G++ compiler→Includes opciót kell választani (3.9 ábra). Az Include path(-l)-nál az Add gombotmegnyomva lehet beírni a toolbox header-jének elérési útját.

3.9. ábra. Include path beállítása

30

Page 31: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3. Ezek után már csak a static library (fritoolbox.a) útvonalát kell megadni. Eztugyanazon a panelen lehet megtenni, mint az el®z® lépést. A különbség annyi,hogy a Cross G++ Linker/Libraries opcióhoz kell navigálni (3.10 ábra). Akárcsak az imént, a hozzáadás itt is hasonlóan m¶ködik. A megjelen® kis ablakba atoolbox nevét kell írni kiterjesztés (.a, .lib) nélkül, csak ezt: FRIToolbox. Ezen3 lépés elvégzésével a fejleszt®i környezet már készen áll arra, hogy használja akeretrendszer minden metódusát és a függvényeit.

3.10. ábra. Static Library hozzáadása

3.4. A keretrendszer kib®vítése

Ahogy szinte minden keretrendszer, úgy a szakdolgozatom által bemutatott is egy fo-lyamatosan változó, fejl®d®, nem pedig statikus program. Ennek megfelel®en ebben aszakaszban szeretném leírni hogyan lehet az FRI Toolboxhoz hozzáadni új metóduso-kat, így elérve azt, hogy a felhasználó, ha szükség van rá implementálja a saját, vagyakár más által már leprogramozott interpolációs módszert. A következ® pár pontbantehát arról lesz szó, hogyan lehet új FRI módszert hozzáadni a lehet® legkönnyebbena toolboxhoz.

Az 3.13 kód szemlélteti a kib®víési eljárás menetét. 1-2. sorban beágyazásra kerül aFRIMethod valamint az FRIException header �le-ja. A 4. sorban létrehozásra kerül aprogramozó saját osztálya, melyet a CFRIMethod osztályból kell leszármaztatnia. Az5. és 6. sor deklarál egy stringet, ami az új eljárás nevét fogja majd tárolni, valamint egyinteger változót, ami az Alfa vágatok számát tartalmazza. Ennek a függvénynek kell ki-számolnia az interpolációt. A példa kedvéért egy háromszög alakú fuzzy halmazzal fogvisszatérni a függvény. Az osztály konstruktorában (9-13. sor) inicializálásra kell hogykerüljenek a kezdeti értékek, jelen esetben ez az eljárás neve, ami a resoultname válto-zóban tárolódik. Amennyiben ez nem történik meg, javasolt egy init metódus (15-21.sor) írása amely betölti ezt a feladatot. Ennek void típusúnak kell lennie, valamint egystring változójú argumentumot szükséges fogadnia. Ez a metódus fogja beállítani azinterpoláció paramétereit. A megírt osztálynak mindenképp magába kell foglalnia egyInterpolate metódust,ami argumentumaként CObservation típust fogad el, valamint avisszatérési értéke egy vector<CMembershipFunction> (23-31. sor).

31

Page 32: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

1 #inc lude "FRIMethod . h"2 #inc lude "FRIException . h"3

4 c l a s s InterpolateNew : pub l i c CFRIMethod{5 pr i va t e : s t r i n g resoultname ;6 i n t acuts ;7

8

9 InterpolateNew ( s t r i n g name) {10 // adatok b e á l l í t á s a11 // példa :12 resoultname=name ;13 }14

15 void i n i t ( s t r i n g i n i ) {16 // adatok i n i c i a l i z á l á s a17 // példa :18 s t r i n g s t r ;19 const char ∗ c = s t r . c_str ( ) ;20 acuts=a t o i ( c ) ;21 }22

23 vector<CMembershipFunction> i n t e r p o l a t e ( CObservation obse rvat i on ) {24 // számítások e l v é g z é s e25 //majd az eredménnyel va ló v i s s z a t é r é s :26 CMembershipFunction mf=CMembershipFunction ( "MF1='"+resoultname+" ' :27 ' t r im f ' , [ −0 .5 0 0 . 5 ] ! [ 0 1 0 ] " ) ;28 vector<CMembershipFunction> r e t ;29 r e t [0 ]=mf ;30 re turn r e t ;31 }32 }

Code 3.13. Új FRI metódus mintakódja

A fenti kód egy minta, amely segítséget nyújt a saját osztály megírásában. Azon-ban ahhoz, hogy az új módszer teljesen része legyen a toolbox-nak, bele kell írni azfritoolbox.cpp-be. Ez a fájl hivatott arra, hogy meghívja az összes interpolációs mód-szert.A 3.14 kód az fritoolbox.cpp kódból egy részlet. Az els® sorban behívásra kerül a header�le, a 3-5. sorban a konstruktor található ami bemenetül egy interpolációs módszer ne-vét, valamint egy fuzzy rendszert kér. 8-10. sorig a changeMethod függvény van, amivelmeg lehet változtatni az eljárást. A 12-14. sorban lév® függvény segítségével lekérhet®a választott módszer neve.A kódrészletb®l a kib®vítés szempontjából fontos rész a 16. sortól kezd®dik, innen indulaz interpolate függvény (plusz paraméterek és meg�gyelés fogadására képes). Ebbentalálható egy összetett IF szerkezet, ami megállapítja melyik módszer nevével hívódottmeg a toolbox. Amennyiben az elágazás igaz értéket kap, a kell® módszerb®l létre-jön egy példány, meghívódik az init függvénye végül pedig az FRI eljárás interpolatefüggvénye, a meg�gyeléssel. Ez az metódus egyben a visszatérési értéke az FRIToolboxinterpolate metódusának.Az új módszer hozzáadásának példája a 23. sortól látható, ami követi az el®bb felsorolt3 lépést. Ha nincs ilyen módszer, amilyen nevet kapott a toolbox, akkor a 29. sorbanhibát dob, mely tájékoztatja a felhasználót, hogy a keretrendszerben nem találhatóilyen módszer.

32

Page 33: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

A 33-35. sorban a másik interpolate metódus taláható, melyre azért volt szükség, mertvannak olyan módszerek amik nem igényelnek további paramétereket. Ez meghívja azel®z® interpolate metódust, így könnyítve meg a felhasználó dolgát, hogy ne kelljenüres stringet megadni paraméterként.Az alábbi 3.14 kód tehát megmutatja hogyan is lehet az új módszer a keretrendszerrésze.

1 #inc lude " f r i t o o l b o x . h"2

3 FRIToolbox : : FRIToolbox ( s t r i n g method , CSystem ∗pSys ) :4 CFRIMethod( pSys ) { m_smethod = method ;5 m_pSys = pSys ;6 }7

8 void FRIToolbox : : changeMethod ( s t r i n g methodName) {9 m_smethod = methodName ;

10 }11

12 s t r i n g FRIToolbox : : getMethodName ( ) {13 re turn m_smethod ;14 }15

16 vector<CMembershipFunction> FRIToolbox : : i n t e r p o l a t e ( s t r i n g params ,17 CObservation obse rvat i on ) {18 i f ( m_smethod . compare ( "FIVE" ) == 0 ) {19 CFIVE ∗ f r i = new CFIVE(m_pSys) ;20 f r i −>i n i t ( params ) ;21 re turn f r i −>in t e r p o l a t e ( obse rvat i on ) ;22 }

...

23 \} e l s e i f ( m_smethod . compare ( "UjModszer" ) == 0 ) {24 // I t t h ívód ik meg az új metódus25 InterpolateNew ∗ f r i = new InterpolateNew (m_pSys) ;26 f r i −>i n i t ( params ) ;27 re turn f r i −>in t e r p o l a t e ( obse rvat i on ) ;28 } e l s e {29 throw "method not implemented ! " ;30 }31 }32

33 vector<CMembershipFunction> FRIToolbox : : i n t e r p o l a t e34 ( CObservation obse rvat i on ) { re turn i n t e r p o l a t e ( "" , obse rvat i on ) ;35 }

Code 3.14. Az fritoolbox.cpp forrása

3.5. A keretrendszerben található egylépéses módsze-

rek

Az egylépéses módszerek alkotják a fuzzy szabály interpolációs eljárások egyik csoport-ját. Ezek a módszerek a következményhalmazt mindenféle megel®z® számítás nélküladják meg, a rendelkezésre álló (legalább egy-egy) közrefogó szabály alapján. Az

33

Page 34: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

el®z®ekben már volt róla szó, hogy jelen pillanatban a keretrendszer 5 egylépéses mód-szert tartalmaz. A továbbiakban röviden bemutatásra kerülnek ezek a módszerek imp-lementálásuk sorrendjében.

3.5.1. KH

Kóczy és Hirota [1] vezette be els®ként az alfa vágat alapú KH fuzzy távolság fogalmát(3.11ábra). Ez az eljárás segít rendezni a fuzzy halmazokat. Az A halmaz akkor el®zimeg B halmazt, ha bármely alfa vágat esetén [0, 1] inf(A) < inf(B), illetve sup(A) <sup(B) teljesül, ahol az inf az alfavágatnál a halmaz alsó pontja, sup-nál pedig a fels®pontja. Csak CNF halmazokra m¶ködik a rendezési algoritmus, azonban van egy nagyhibája. Amennyiben A és B halmaznak van közös része, tehát van olyan intervallumahol mind a kett® értelmezve van, akkor nem lehet egyértelm¶en megmondani melyikhalmaz van el®rébb (3.12 ábra).

3.11. ábra. KH távolság értelmezése

3.12. ábra. Egy példa arra, amikor a KH távolság nem tud rendezni

Az interpolációs módszer alapgondolata az volt, hogy a becsült eredményhalmaz-nak ugyanolyan arányban kell felosztania a két közrefogó konzekvens halmazok közöttitávolságot, mint ahogy a meg�gyelés a két legközelebbi antecedens közti távolságot. Azeljárás minden alfa vágat szintjén elvégzi ezeket a számításokat. Szakaszonként lineárishalmazok esetében elegend® csak a töréspontok magasságában alfa vágatokkal számol-ni. Ugyan az eljárás nem ®rzi meg a szakaszonkénti linearitást, de az eltérés olyan kicsi,hogy elhanyagolható. A módszer el®nye, hogy rendkívül gyors, azonban vannak olyanesetek, melyekre nem ad érvényes eredmény halmazt.

34

Page 35: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.5.2. VKK

Vass, Kalmár és Kóczy [5] szintén alfa vágat alapú rendezést javasolt a fuzzy halma-zokra. A távolságot azonban teljesen máshogy értelmezik, mint a fenti esetben. Azalfa vágatot nem az el®z® módon, a halmaz két széls® pontjával határozzuk meg, ha-nem a halmaz középpontjával és a halmaz szélességével. Két halmaz távolságát pediga középpontok euklideszi távolságával értelmezi (3.13 ábra). Ez alapján az A halmazakkor el®zi meg a B halmazt, ha minden alfa vágat magasságában A középpontja el®-rébb helyezkedik el, mint B középpontja. A megoldás el®nye, hogy gyorsítja a távolságszámítást, viszont még mindig csak részleges rendezést biztosít.

3.13. ábra. VKK távolság értelmezése

Az interpolációs eljárás kiküszöböli a KH [1] egyik legnagyobb hibáját, az érvényte-len eredmény halmazt. Ezt úgy érték el, hogy a távolságot másképp de�niálták, mint aKH [1] és a halmazok szélességével számol a módszer. Az el®z®höz hasonlóan ez is csakCNF halmazokkal m¶ködik. Hátránya, hogy nem tudja kezelni azt az esetet, amikorvalamelyik halmaznak az alfa vágat magasságában a szélessége nulla (singleton). A sza-kaszonkénti linearitást ez az eljárás sem ®rzi meg, de az eltérés itt is olyan kisméret¶,hogy elhanyagolható.

3.5.3. MACI

Tikk és Baranyai [2] dolgozták ki a módosított alfa vágat alapú eljárást (Modi�ed Alp-ha based Cut Interpolation, innen kapta a nevét). Az eljárás lényege, hogy a Yam általpublikát [23] vektorreprezentációs módszert alkalmazva a fuzzy halmazokat olyan térbetranszformálják ahol minden esetben érvényes következmény halmazt eredményezneka számítások.A szemléletesség kedvéért a továbbiakban háromszög alakú fuzzy halmazokon lesz be-mutatva a módszer. Minden halmazt két részre bont, jobb (alsó), bal (fels®) részre, ésa vektorokban a halmazok karakterisztikus pontjait tárolja. A számításokat ezek utánkülön végzik a jobb illetve a baloldalra. Az élek vektorait síkbéli pontokkal ábrázolvaelmondható az, hogy csak akkor kapunk érvényes következtetés halmazt, ha a B* ponta B1 és B2 által határolt téglalapon belül, valamint az l vonalon felül helyezkedik el(3.14. ábra).

Transzformáljuk a B1 és B2 konzekvenseket egy olyan koordináta rendszerbe, amelykizárja az abnormalitás lehet®ségét. A B1 és B2 konvexitása biztosítja az új rendszerbelinem negatív értékeket. Ezek után számítsuk ki a következtetés helyét az új koordinátarendszerben, majd végül transzformáljuk vissza a kapott eredményt az eredeti rend-szerbe. Ez a megoldás biztosítja a következtetés koordinátáinak monoton növekedését.

35

Page 36: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.14. ábra. Gra�kus szemléltetése az éleket leíró vektoroknak

3.5.4. GK(CRF)

A módszert Gedeon és Kóczy [13] dolgozták ki, innen az egyik neve, valamint mégConservating of Relative Fuzzynes-nek is szokták hívni. Az eljárást trapéz alakú CNFhalmazokra dolgozták ki, az eddigiekhez hasonlóan két közrefogó halmaz segítségévelszámolja ki az eredményt. Az el®z®ekt®l eltér®en, ez nem az alfa vágatok alapján becsü-li az eredményt. A szerz®k ugyanis rájöttek arra, hogy az antecedens halmazok száraiáltalában hosszabbak, mint a meg�gyelés élei. Ezért elegend® csak a számítandó ol-dalon lév® antecedens azonos oldali tartójával kalkulálni (3.15.ábra). A következményhelyzetének becslésére pedig a meg�gyelés és a szomszédos antecedens magjának távol-ságát használja fel. Többdimenziós esetre is kiterjeszthet®, ilyenkor a magok euklideszitávolságát használja.

3.15. ábra. Magtávolságok és magszélességek

3.5.5. FIVE

Az utoljára bemutatásra (és implementálásra) kerül® egylépéses módszer a Fuzzy In-terpolation in the Vague Envirement (innen a neve). Az eljárást 1997-ben Kovács ésKóczy fejlesztette ki [21]. A módszer lényege, hogy a becsléseket az úgynevezett bi-zonytalan térben [20] végzi el, ahol a fuzzy halmazok alakját skálafüggvények írják le.Hátrányaként róható fel, hogy skálafüggvényt csak háromszög illetve trapéz halmazokesetén találhatunk csak, valamint nem ®rzi meg a szakaszonkénti linearitást. El®nyeviszont a többdimenziós esetek kezelése és a gyorsaság, ami annak köszönhet®, hogy abizonytalan tereket el®re elkészíti. Továbbá elengedhetetlen a bementi és az antecedensoldali bizonytalan tér összeolvasztása [24].

36

Page 37: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.6. A keretrendszerben található kétlépéses módsze-

rek

A fuzzy szabály interpolációs módszerek másik csoportja a kétlépéses eljárások. Annyi-ban különböznek az egylépéses társaiktól, hogy miel®tt elkezdenék kiszámolni a kö-vetkezményhalmazt, megel®z® számításokat végeznek. Ezeket a lépéseket a Baranyai,Kóczy és Gedeon által létrehozott GM [6] határozza meg. A koncepció lényege, hogy akövetkeztetést két lépésben állítja el® (innen a neve). El®ször egy új szabályt interpolálmagának, melyben az antecedens oldali halmazok referencia pontjai egybe esnek azazonos dimenzióban lév® meg�gyelés referencia potjával. Ehhez 3 pontot kell megvaló-sítania:

• Az új szabály antecedens oldali halmazainak alakját határozza meg

• A konzekvens halmazok referencia pontját számolja ki

• Végül a könzekvens halmazok alakját határozza meg

Ezután a 3 számítás után jöhet a következmény halmaz megállapítása, melynek alap-ötlete, hogy amennyire hasonlít a meg�gyelés alakja az antecedensére, annyira kellhasonlítania a következmény halmaznak a konzekvensére.

3.6.1. FRIPOC

A keretrendszer egyetlen kétlépéses módszere a polárvágat alapú szabály interpolációseljárás, melyet Johanyák és Kovács dolgoztak ki [15]. A GM-et [6] követve els® lépésbena segédszabály antecedens és konzekvens nyelvi értékeinek meghatározásának érdeké-ben polár-vágat alapú halmaz-interpolációt (FEAT-p) [14] hajt végre. Mivel ezek aszámítások nem függnek egymástól, ezért amennyire az adott programnyelv engedi,párhuzamosítással akár jelent®s mértékben gyorsítható a módszer ezen része. A She-pard interpoláció [16] egy adoptált változata segítségével meghatározható az új szabálykonzekvens halmazának referencia pontja.A következtetési folyamat második lépésében a szintén polár-vágat alapú SURE-p [15]eljárás segítségével határozzuk meg a következményt.

37

Page 38: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

3.7. Módszerek összegzése

Az alábbi fejezetben a keretrendszerben található módszereket hasonlítom össze fontostulajdonságaik alapján. Az els® lényeges szempont a lépések száma. A különbségr®lfentebb már lehetett olvasni, és arról is, hogy 5 egylépéses és 1 kétlépéses eljárás kerültimplementálásra.A következ® oszlopban az összehasonlítás a módszerek azon tulajdonsága alapján törté-nik, hogy kezelnek-e többdimenziós inputot, tehát egyszerre több antecedens dimenziófogadására és feldolgozására is képesek-e. Látszik, hogy az egyetlen ilyen módszer aFIVE.Az utolsó összehasonlítás alapját a módszerek azon jellegzetessége képezi, hogy mindenbemenetre érvényes konklúziót, tehát helyes fuzzy halmazt adnak-e eredményül. Lát-szik, hogy a KH valamint a VKK nem rendelkezik ezzel a képességgel, olykor homokóraalakú következménnyel térnek vissza.

módszer neve lépések száma több dimenziós inpu-tot is kezel-e

mindig érvényes-e akövetkezmény

KH 1 kiterjesztve igen nem

VKK 1 kiterjesztve igen nem

CRF(GK) 1 kiterjesztve igen igen

MACI 1 kiterjesztve igen igen

FIVE 1 igen igen

FRIPOC 2 kiterjesztve igen igen

3.1. táblázat. Módszerek összegzése

38

Page 39: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

4. fejezet

Konklúzió

Szakdolgozatom végére kiderült, hogy több megoldás is létezik melyek feldolgozták as¶r¶ szabálybázis alapú módszereket, de eddig nem volt olyan, amely a ritka szabály-bázisú eljárásokkal foglakozott volna, leszámítva a Johanyák által írt MATLAB FRIToolbox-ot [8]. Ennek azonban a hátulüt®je, hogy csak MATLAB alól használható, ésnem alkalmas valós környezetben való futtatásra.Az általam bemutatott keretrendszer, a MATLAB FRI Toolbox-hoz hasonlóan (leg-alábbis az abban felhasznált módszereket tekintve) a ritka szabálybázisú eljárásokatfoglalja össze. A rendszer mindenki számára elérhet® Windows-on illetve Linux-on egy-aránt. A támogatott programnyelv ugyan jelenleg csak C++ (LIB technológiának kö-szönhet®en), de ez a nyelv elég gyors ahhoz, hogy valós környezetben is használható le-gyen. Az egységes kezel®felületnek hála bármely FRI módszert, könnyen lehet használnisaját kódból, hiszen elegend® belinkelni a toolbox könyvtárát, beolvasni a FIS és OBS�le-t, utána a kiválasztott módszer nevével és a fuzzy rendszer megadásával meghívniaz interpolate függvényt. A fejlesztést és a használatot is megkönnyíti a kivételosz-tály, ami módszerekre bontva tartalmazza a kivételek pontos leírását. A keretrendszerkib®vítése, abba új módszer belehelyezése nagyon könnyen elvégezhet®, pusztán pársor hozzáadásával. A dolgozatom példát szolgáltat arra, hogyan lehet a keretrendszertéletre kelteni Windows alól Visual Studio 2010-et használva, illetve Ubuntu alól Eclipsesegítségével. Kitér arra is hogyan lehet a toolbox-ot b®víteni, továbbá mintát ad egyúj módszer megírására is.A rendszer még fejlesztés alatt áll, jelenleg 5db egylépéses és 1db kétlépéses módszerttartalmaz, ezek a következ®k: KH , VKK , CRF (GK) , MACI, FIVE és FRIPOC. Eza lista minden bizonnyal b®vülni fog, hiszen további módszerek implementálását bárkinagyon egyszer¶en megteheti (akár egylépéses, vagy kétlépéses módszerr®l legyen szó),akinek igénye van rá,A toolbox-ban rengeteg lehet®ség rejlik, ilyen például a több programnyelv támogatá-sa, amit a LIB helyett DLL-el, illetve wrapper classokkal lehet elérni és a közeljöv®benreményem szerint meg is fog valósulni, ezzel el®segítve az elterjedést. Valamint azt ismérlegelni lehet, hogy érdemes-e a FIVE-nál használt matematikai könyvtár (Arma-dillo) segítségével újra leprogramozni a már meglév® módszereket, ezzel elérve némiteljesítmény javulást.Továbbá elkészült egy benchmark rendszer is, amely megkönnyíti a már implementáltés kés®bbiekben beültetésre kerül® FRI módszerek összehasonlítását, mind a futási ide-jüket tekintve, mind pedig a módszerek használhatóságát �gyelembe véve. Ezek alapjánkonkrét javaslotokat tesz, mely módszer alkalmas a feladatok megoldására.

39

Page 40: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Úgy érzem, hogy a szakdolgozat megírása alatt sokat fejl®dtem. Megtanultam csapat-ban dolgozni, megismerkedtem a keretrendszerek tervezésének fontos szempontjaival éslépésével, valamint a C++ nyelvben is már jobban kiismerem magam.

40

Page 41: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Irodalomjegyzék

[1] L. T. Kóczy and K. Hirota, "Rule interpolation by -level sets in fuzzy approximatereasoning," BUSEFAL, vol. 46, no. Automne, pp. 115-123, 1991.

[2] D. Tikk and P. Baranyi, "Comprehensive analysis of a new fuzzy rule interpolationmethod," IEEE Trans. on Fuzzy Systems, vol. 8, no. 3, pp. 281?296, 2000.

[3] S. Kovács and L. T. Kóczy, "Application of an approximate fuzzy log-ic controller in an agv steering system, path tracking and collision avo-idance strategy," Tatra Mountains Math. Publ., vol. 16, pp. 456-467, 1999,http://www.mat.savba.sk/tatra/Full/16/31kovacz.ps.

[4] K. W. Wong, T. D. Gedeon, and D. Tikk, "An improved multidimensional -cutbased fuzzy interpolation technique," in Proc. of the Int. Conf. on Arti�cial Intelli-gence in Science and Technology (AISAT'00), V. Karri and M. Negnevitsky, Eds.,Hobart, Tasmania, Australia, December, 2000, pp. 33-38.

[5] G. Vass, L. Kalmár, and L. T. Kóczy, "Extension of the fuzzy rule interpolationmethod," in Proc. of the Int. Conf. on Fuzzy Sets Theory and its Applications(FSTA?92), Liptovsk�y Jan, Slovakia, 1992, pp. 1?6.

[6] P. Baranyi, L. T. Kóczy, and T. D. Gedeon, "A generalized concept for fuzzyrule interpolation," IEEE Trans. on Fuzzy Systems, vol. 12, no. 6, pp. 820?837,December 2004.

[7] S. Yan, M. Mizumoto, and W. Z. Qiao, "An improvement to Kóczy and Hirota's in-terpolative reasoning in sparse fuzzy rule bases," Int. J. of Approximate Reasoning,vol. 15, pp. 185?201, 1996.

[8] Johanyák, Zs. Cs. and Kovács, Sz.: Fuzzy Rule Interpolation Based on Polar Cuts, inComputational Intelligence, Theory and Applications, Springer Berlin Heidelberg,2006, pp. 499-511.

[9] Z. C. Johanyák, D. Tikk, S. Kovács, and K. W. Wong, "Fuzzy rule interpolationMatlab toolbox - FRI toolbox," in Proc. of the IEEE World Congress on Computa-tional Intelligence (WCCI?06), 15th Int. Conf. on Fuzzy Systems (FUZZ-IEEE?06).Vancouver, BC, Canada: Omnipress, July 16?21, 2006, pp. 1427?1433.

[10] ] Z. Johanyák. Fuzzy rule interpolation matlab toolbox website. [Online]. Available:http://fri.gamf.hu

41

Page 42: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

[11] D. Tikk, Z. C. Johanyák, S. Kovács, and K. W. Wong, "Fuzzy rule interpolationand extrapolation techniques: Criteria and evaluation guidelines," Journal of Ad-vanced Computational Intelligence and Intelligent Informatics, vol. 15, pp. 254?263,2011.

[12] Freemat website. [Online]. Available: http://freemat.sourceforge.net

[13] Kóczy, L.T., Hirota, K. and Gedeon, T. D.: Fuzzy rule interpolation by the con-servation of relative fuzziness, in Journal of Advanced Computational Intelligence,Vol. 4/1, 2000, pp. 95-101.

[14] Johanyák, Zs. Cs. and Kovács, Sz.: Fuzzy set approximation using polar co-ordinates and linguistic term shifting, 4rd Slovakian-Hungarian Joint Symposiumon Applied Machine Intelligence (SAMI 2006), Herl'any, Slovakia, 2006, pp. 219-227.

[15] Johanyák, Zs. Cs. and Kovács, Sz.: Fuzzy Rule Interpolation Based on Polar Cuts,in Computational Intelligence, Theory and Applications, Springer Berlin Heidel-berg, 2006, pp. 499-511.

[16] Shepard, D.: A two dimensional interpolation function for irregularly spaced data,in Proceedings of the 23rd ACM International Conference, New York, USA, 1968,pp. 517-524.

[17] Kent Beck Implementation Patterns, Addison-Wesley, 2008

[18] Zoltán Krizsán, Szilveszter Kovács: Fuzzy Rule Interpolation Developer ToolboxLibrary. SACI 2012: 119-123

[19] Krizsán Zoltán:KÖZÖS FEJLESZT�I KERETRENDSZER FUZZY SZABÁLYINTERPOLÁCIÓS MÓDSZEREKHEZ, Miskolci Egyetem (2012)

[20] Klawonn, F.: Fuzzy Sets and Vague Environments, in Fuzzy Sets and Systems,Vol.66, 1994, pp. 207-221.

[21] Kovács, Sz. and Kóczy, L.T.: The use of the concept of vague environment inapproximate fuzzy reasoning, Fuzzy Set Theory and Applications, Tatra MountainsMathematical Publications, Mathematical Institute Slovak Academy of Sciences,vol.12., pp.169-181, Bratislava, Slovakia, (1997).

[22] Johanyák Zs. Cs.: Fuzzy szabály-interpolációs módszerek és mintaadatok alapjántörtén? automatikus rendszergenerálás, PhD disszertáció, Hatvany József Informa-tikai Tudományok Doktori Iskola, Miskolci Egyetem, Miskolc, 2007.

[23] Yam, Y. and Kóczy, L. T.: Representing membership functions as points in highdimensional spaces for fuzzy interpolation and extrapolation, in IEEE Transacti-onsnon Fuzzy Systems, Vol. 8., Issue 6, 2000, pp. 761-772

[24] Kovács, Sz.: Extending the Fuzzy Rule Interpolation "FIVE" by Fuzzy Observa-tion, Theory and Applications, Springer Berlin Heidelberg, 2006, pp. 485-497.

[25] Armadillo C++ linear algebra library http://arma.sourceforge.net/

42

Page 43: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Ábrák jegyzéke

2.1. Hagyományos Venn diagram . . . . . . . . . . . . . . . . . . . . . . . . 92.2. Elmosódott él¶ halmaz Venn diagram használatával . . . . . . . . . . . 92.3. Fuzzy halmazok ábrázolása . . . . . . . . . . . . . . . . . . . . . . . . . 92.4. Példa s¶r¶ és ritka szabálybázisra . . . . . . . . . . . . . . . . . . . . . 14

3.1. Egylépéses módszerek struktúrája . . . . . . . . . . . . . . . . . . . . . 183.2. Kétlépéses módszerek struktúrája . . . . . . . . . . . . . . . . . . . . . 193.3. FRImethod osztálydiagramja . . . . . . . . . . . . . . . . . . . . . . . 243.4. C++ Projekt létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . 273.5. Runtime Library beállítása . . . . . . . . . . . . . . . . . . . . . . . . . 273.6. Library hozzáadása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.7. Mintaprogram futási eredménye . . . . . . . . . . . . . . . . . . . . . . 293.8. Üres C++ projekt létrehozása . . . . . . . . . . . . . . . . . . . . . . . 303.9. Include path beállítása . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.10. Static Library hozzáadása . . . . . . . . . . . . . . . . . . . . . . . . . 313.11. KH távolság értelmezése . . . . . . . . . . . . . . . . . . . . . . . . . . 343.12. Egy példa arra, amikor a KH távolság nem tud rendezni . . . . . . . . 343.13. VKK távolság értelmezése . . . . . . . . . . . . . . . . . . . . . . . . . 353.14. Gra�kus szemléltetése az éleket leíró vektoroknak . . . . . . . . . . . . 363.15. Magtávolságok és magszélességek . . . . . . . . . . . . . . . . . . . . . 36

43

Page 44: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Táblázatok jegyzéke

3.1. Módszerek összegzése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

44

Page 45: Szakdolgozatmidra.uni-miskolc.hu/JaDoX_Portlets/documents/... · a számítógépbe már nem olyan egyszer¶. Az el®bbi példához visszatérve nem a haj-szálak alapján mondható

Adathordozó használati útmutató

A DVD melléklet alapvet®en 2 f® könyvtárra osztható. A gyökérben külön választot-tam a Visual Studio-ba betölthet® project-et valamint a már lefordított könyvtárakat,az fritoolbox.lib, illetve fritoolbox.a-t. (el®bbi windowsos, utóbbi, linuxos használatra).Az FRIT project mappában a project fájlt megnyitva (fritoolbox.sln) Visual Studiobanki lehet próbálni hogyan is lehet új metódsust hozzáadni a keretrendszerhez, ahogy aszakdolgozat el®bbi pontjaiban látható volt. A könyvtárak pedig Könyvtárak mappá-ban található. Szintén meg lehet nézni m¶ködés közben, akár Linux alatt is, a fentebbismertetett módon. A toolbox tartalma:

Base.cpp

Convert.cpp

CRF.cpp

FEAT_P.cpp

FISFile.cpp

FIVE.cpp

FRI.cpp

FRIEXception.cpp

FRIMethod.cpp

FRIPOC.cpp

fritoolbox.cpp

GM.cpp

KH.cpp

MACI.cpp

MembershipFunction.cpp

Observation.cpp

OBSFile.cpp

Partition.cpp

Point.cpp

Rule.cpp

Shapes.cpp

StringUtils.cpp

System.cpp

VKK.cpp

Mivel maga a keretrendszer megírása csapatmunka volt, ezért vannak olyan osz-tályok, �le-ok melyen többen is dolgoztunk. A fájlok melyeket önállóan írtam, vagyközrem¶ködésem köthet® hozzájuk: VKK.cpp VKK.h, MACI.cpp, MACI.h, FIVE.cpp,FIVE.h, CFRIMethod.cpp CFRIMethod.h, fri.cpp, fri.h, FRIException.cpp, FRIEx-ception.h. A DVD nem tartalmazza a keretrendszerhez tartozó benchmark rendszert.

45