Mesterséges intelligencia alapjai

Oktatási segédlet (kiegészítés a fuzzy rendszerek gyakorlathoz)

1. Mi a fuzzy logika?

A fuzzy logika leginkább a halmazalgebrai megközelítésmódban érthető meg. Gondoljunk vissza a hagyományos logika alapját képző halmazelméletre: legyen A={a1, a2, a3, …, an} egy halmaz. A klasszikus logika szerint egy elem halmazba tartozása egyértelműen megállapítható, tetszőleges ak elemről el tudtuk dönteni, hogy eleme-e az A halmaznak avagy sem! Tehát az hogy akÎ A egyértelműen eldönthető. Ha beletartozik, úgy ezt egy logikai igaz, ha nem azt egy logikai hamis értékekkel jellemeztük. Egyszerűség kedvéért jelöljük a logikai igaz értéket 1-el a hamis értéket 0-val. Ekkor az, hogy egy elem beletartozik-e A-ba jellemezhető vagy egy 0-val, vagy egy 1-el.

A fuzzy logika abban hoz újat, hogy halmazba tartozás 0, illetve 1 értékei nem ennyire sarkallatosak, hanem köztes értékek is léteznek, amelyek megmutatják, hogy egy adott ak elem mennyire tartozik bele a halmazba: nagyon, kissé, kevésbé, vagy egyáltalán nem. Így minden A halmazbeli ak elemhez hozzárendelünk egy számot, általában 0 és 1 (néha -1 és 1 között), ami jellemzi az elem halmazba tartozásának mértékét. Tehát az A halmazunk fuzzyban az alábbi módon néz ki: A={a1(k1), a2(k2), … an(kn)}. A felső indexbe írt értékek a halmazelemekhez rendelt, halmazba tartozást jellemző számot jelöli. Vegyük észre, hogy ezek a számok a klasszikus halmazelméletben is jelen voltak, de értékük vagy 0 volt vagy 1, így külön nem is tüntettük ezeket fel. Azt az elemet, amihez 0-át (vagy egy másik skálán -1-et) rendeltünk, fel sem soroltuk a halmaz elemei között.

Nézzünk erre egy példát. Legyen az A halmazunk az emberek cm-ben kifejezett testmagassága, és vegyük csak az egész értékeket.

A={130,131,132,…, 183, …, 250}

A klasszikus halmazelmélet szerint, ha meg akarunk határozni két részhalmazt, M jelölje a magas emberek halmazát, L az alacsony emberekét, akkor élesen kell találjunk egy elemet (például 170 cm), amelytől magasabb emberek az M={170,171, … , 250} halmazba tartoznak, míg az alacsonyabbak az L={130,131, … 169} halmazba. (A két részhalmaz L, M nem kell feltétlen diszjunkt legyen.)

Az életben viszont ilyen éles határokat gyakran nem szabhatunk, azt mondjuk valakire, hogy “a körülbelül 155 cm magas illető, nagyjából alacsonynak mondható”. Tehát az állításban van egyfajta bizonytalansági tényező, “körülbelül”, illetve “nagyjából”. Az egyes elemehez rendelt értékek éppen ezt a bizonytalanságot hivatottak kezelni. Azt mondjuk, hogy az egyes részhalmazok elemeihez hozzárendelünk egy-egy számot. Például:

L={130(1), 140(1), 150(1), 160(0.8), 170(0.5), 180(0.1), 190(0)}

M={130(0), 140(0), 150(0), 160(0.1), 170(0.4), 180(0.9), 190(1), 250(1)}

A két halmazban lehetnek teljesen különböző elemek is, és az elemekhez rendelt számok között, sem halmazon belül, sem két halmaz között semmilyen összefüggés nincs előírva, leszámítva azt, hogy “értelmes”, azaz szemantikai jelentéssel bíró adatoknak kell lenniük.

Ha mindezt a hozzárendelést függvényben jelenítem meg, tehát a halmaz elemeihez hozzárendelve ábrázoljuk a tagsági beletartozást jelölő számokat, akkor a tagsági függvényt ábráját kapjuk (1. ábra). A tagsági függvényeket folytonos összefüggéssel, de diszkrét értékekre (a halmaz elemeire) adják meg. A tagsági függvények alakjuk szerint lehetnek háromszög, harang, szigmoid, trapéz, egyoldalú trapéz, fűrészfog, stb… alakúak.

1. ábra: Tagsági függvények

 

2. Fuzzy műveletek

Ahogy a klasszikus halmazt kiegészítettük tagságot jelölő számokkal, úgy természetesen újra kell értelmeznünk a klasszikus halmazműveleteket (únió, metszet, negáció, vagy ha fuzzy halmazok tényeket szimbolizálnak AND, OR, NOT műveleteket).

Két fuzzy halmaz AND (metszet) művelete az a halmaz, amely a két argumentum halmaz közös elemeit tartalmazza, minden elemet véve a legkisebb előforduló beletartozási értéken.

M AND L={130(0), 140(0), 150(0), 160(0.1), 170(0.4), 180(0.1), 190(0)}={160(0.1), 170(0.4), 180(0.1)}

Két fuzzy halmaz OR (únió) művelete az a halmaz, ami minden előforduló elemet tartalmaz a lehető legnagyobb beletartozási értéken véve.

M OR L={130(1), 140(1), 150(1), 160(0.8), 170(0.5), 180(0.9), 190(1), 250(1)}

Egy halmaz negáltján azt a halmazt értjük, mely tartalmazza az összes elemet, de az eredmény halmaz elemeinek tagsági értékeit kivonjuk 1-ből.

3. Mindez hogyan valósítható meg az es.exe programmal?

Először is értelmeznünk kell az alaphalmazt. Ezt a FACTS menüpont ADD NEW FACTS almenüpontjával tehetjük meg. Adjunk nevet az új ténynek, legyen a neve MAGASSAG. A program rákérdez a típusára, ami legyen NUMERIC, majd escape. Numerikus típus esetén meg kell adnunk az értelmezési tartomány (RANGE) alsó és felső határait, amely legyen esetünkben 130, illetve 250. (Ezeket az alsó sorban kéri be a program.) A FACTS menüpont EDIT EXISTING FACTS menüpontjával egy tényhez (MAGASSAG) további jellemzőket rendelhetünk. Például a QUESTIONS menüponttal rendelhetünk hozzá egy kérdést (ADJA MEG A TESTMAGASSAGOT!).

A következő lépés a frissen létrehozott tényünk fuzzyfikálása. Kattintsunk a FZSETS menüpontra, majd a NEW FUZZY SETS almenüre. Először meg kell adnunk, hogy melyik tényt fuzzyfikáljuk. Itt kiválsztjuk a MAGASSAG-ot. Majd meg kell adni a fuzzy kategóriák (előző terminológiánkban a részhalmazok M, L) nevét. Előbb csak egyet, például adjuk meg, hogy MAGAS. Ezután a program alaphalmaz-érték (esetünkben testmagasság érték), illetve tagsági függvény értékeket kér be. Írjuk be, hogy 180, majd a tagsági értéket (hogy a 180 cm milyen mértékben számít magasnak). Ez a CV-érték, ami itt -1 és 1 közé eső valós szám (adjunk meg a 180-hoz 0.8-at). Majd YES, és újabb ilyen érték-párokat adunk meg, 170 0.6, 160 -0.1, stb…). Majd, ha már elegendő adatot adtunk meg, akkor NO-val kilépunk az értékpár-bekérő ciklusból.

Majd újabb fuzzy kategóriát rendelünk az alaphalmazunkhoz, ALACSONY névvel. FZSETS menüpont, EDIT FUZZY SETS almenü, névnek megadjuk, hogy ALACSONY, majd újabb testmagasság-beletartozási érték párokat adunk meg, ezúttal azt jelölve, hogy ki mennyire számít alacsonynak. Például, 160 1, 150 0.9, 250 -1. Az EDIT FUZZY SETS menüpont esetén, kiválasztunk egy tényt (MAGASSAG), majd egy fuzzy kategóriát (ALACSONY), a PLOT FUZZY SET menüponttal a tagsági függvényeket ki is rajzoltathatjuk a képernyőre.

4. Fuzzy szabály az es.exe-ben

Ezek után a fuzzy kategóriát szabályokban rendesen használhatjuk. Például:

IF

AND SET

magassag fz=magas

jokepu=igen

THEN

gyakvezer=stefan CV=0.7

Az fz= a fuzzy érték-egyenlőséget jelent. A szabályt amikor alkalmazzuk, akkor a program a tényekre rákérdez, először is a magassag tény, mint numerikus éreték kell értelmezést nyerjen, mondjuk legyen 183, majd a jokepu tény megkapja az igen értéket (ha megkapja a tények konkretizálásánál). Ekkor végrehajtódik egy fuzzy AND művelet, melynek eredménye (THEN) szintén egy fuzzy változó, gyakvezer, melynek értéke ebben az esetben stefan az értéke, 0.7-es “valószínűséggel” azaz tagsággal. (Megjegyezzük, hogy a jokepu tény nem fuzzy változó, de felfogható annak. jokepu={igen, nem} . Amikor ezeket az értékeket beállítjuk, akkor a program itt is rákérzez egy CV értékre.

A szabályok szerkeszését az es.exe menüvezérelten viszonylag kényelmesen biztosítja, így erre itt nem térnénk ki részletesen.