Fuzzy Logic: Den oskarpa skarpheten Av: 1
Innehåll Inledning... 3 Vad är Fuzzy Logic?... 4 Fuzzy sets... 4 Medlemsskapsfunktion... 5 Operatorer... 7 Union... 7 Snitt... 8 Komplement... 8 Exempel med de olika operatorerna... 9 IF THEN... 10 Rule Base... 10 Diskussion... 11 Referenser... 12 2
Inledning Hur gör jag, ska jag skriva att han är lång eller kort, han har ju bara medellängd!. Om du känner igen dig i den meningen så har du hittat rätt nu behöver du inte vara fast i första ordningens predikatlogik där värden endast är sanna eller falska. Eller använda dig av probalistisk logik som berättar sannolikheten om att en person är lång. Men hur gör man då om vill skriva att en person är medellång genom att använda sig av logik. Svaret min vän är att man använder sig av Fuzzy Logic, ett fenomenalt sätt som låter värden inte bara vara sanna eller falska, svarta eller vita utan kan ta med allt där emellan. Välkommen till Fuzzy Logic, logikens gråzon. 3
Vad är Fuzzy Logic? I första ordningens predikatlogik (FOPL) kan man bara hantera värden som är sanna eller falska (1=sant, 0=falskt), i probalistisk logik kan vi avgöra hur sannolikt det är att ett värde är sant men hur gör man när man har värden som varken är helt sanna eller falska utan är ligger där lite mitt emellan. Det är här fuzzy logic kommer in och är användbart. Låt oss säga att vi ska ta ett bad, skulle man bestämma om hur vattnet känns genom att använda sig av FOPL så skulle vi kunna bara ha att vattnet är antingen varmt eller kallt. Om vi bestämmer att temperaturen t är kallt om 0 < t < 15 och varmt om t ligger mellan 15 < t <30 grader. Det skulle då betyda att om vi temperaturen på vattnet är 14,6 grader så räknas det som kallt även fast skillnaden upp till temperaturen är väldigt marginal. Om vi skulle definera problemet genom att använda oss av FL så skulle vi då kunna lägga till ett till tillstånd som vattnet kan vara så det behöver inte bara vara kallt eller varmt utan att det kan även vara ljummet. Här blir också övergången mellan de olika tillstånden gradvis så att vattnet är olika sant för de tre tillstånden. Tänk att linjen i figur 1 pekar på temperaturen 11 grader, då skulle man kunna säga att den är 0,8 kallt, 0,2 ljummet och 0 varmt. Figur 1. Tre olika fuzzy sets (bildkälla: Wikipedia) Fuzzy sets För att kunna använda oss av Fuzzy Logic behöver vi först använda definera vårt universum. Det gör vi med hjälp med av fuzzy sets. I vanlig tvåvärdes logik som FOPL använder man sig av crisp set där om man har en övergångar från till exempel kallt till varmt inte är gradvis utan att bytet sker helt på en gång. Om vi tittar tillbaka på figur 1 så ser vi att den har tre sets där bytena sker gradvis mellan de olika tillstånden. Nedan i figur 2 ser vi skillnaden mellan crisp och fuzzy set. Likt det tidigare exemplet fast här kollar vi på längd på personer istället för temperatur i vattnet. Det som sägs med crisp set är att alla som är under 180 cm räknas som korta och alla som är över räknas som långa. Problematiken med det här är 4
att om man skulle vara 179,4 cm så räknas man som lika kort som en person som är 160 cm även fast det bara skiljer 0,6 cm för att man ska räknas som lång. Med fuzzy set ser vi hur det gradvis ökar desto längre man är, en person som är 179,4 cm räknas då inte som lika kort som en som är 160. Figur 2. Jämförelse mellan ett crisp set och ett fuzzy set.(bildkälla Jantzen) Medlemsskapsfunktion Vi måste även definera att ett objekt tillhör en mängd och vilka värden den kan ta.här nedan defineras att x är ett element som tillhör setet X: Medlemskapsgraden måste även defineras för att vi ska kunna använda oss av elementet. Det görs med medlemsfunktionen nedan: µ x : U [0,1] Det vill säga att x finns i universum och medlemskapsgraden ligger mellan 0 och 1. Med den här kunskapen kan vi skriva ett fuzzy set som nedan: X = {(x, µ x )} Där X är ett fuzzy set, x är ett element i setet och µ x är medlemskapsgraden för x i setet X. Om vi tar det vi nu har lärt oss och tillämpar det till vatten och bad problemet. Låt oss säga att x = 11 grader ( vi vet sen tidigare att 11 grader har graden av medlemskap 0,8 kallt, 0,2 ljummet och 0,0 varmt). Vi får då: 5
Kallt = {(11, 0,8)} Ljummet = {(11, 0,4)} Varmt = {(11,0,0)} Om vi nu istället tittar tillbaka på figur 1 kan vi se att den består av tre set som använder sig av trapezodialfunktioner. Figur 3. Trapezodialfunktioner och trapezodial diagram. (Bildkälla: Allmér) Testar vi nu att köra dessa funktioner på våra set för att se om det våra siffror verkligen stämmer. Vi sätter x=11 och tittar så att de medlemsgraderna vi har vid de olika seten är rätt. Eftersom kallt börjar vid 1 (alltså den tredje formeln av trapezodialfunktionen) och c= 10, d=15 får vi: (15-11) / (15-10) = 4/5 = 0,8 För ljummet har vi a= 10, b= 15. Det ger oss: (11 10) / (15 10) = 1/5 = 0,2 Och slutligen för setet varmt har vi a=20 11 20 = 0 Trapezodialfunktion är inte den enda funktionen i Fuzzy Logic. De vanligaste funktionerna är trapezodial, triangel och Gaussianfunktion. Triangelfunktion funkar som trapezodial fast man sätter b=c. Figur 4. Triangel diagram.(bildkälla: Allmér) 6
Gaussianfunktionen har en mer slätare kurva jämfört med triangular och trapezodial. Övergångarna är inte lika skarpa. Figur 5. Gaussian funktion och gaussian diagram. (Bildkälla: Allmér) X 0 är kurvans högsta topp, x är vårt element och σ står för standard deviationen. Operatorer Precis som i FOPL har FL olika operatorer som man kan använda sig av inom FL för att räkna på fuzzy sets de vi kommer titta närmare på union, snitt och komplement. Vi tittar på exemplet som vi tog tidigare med vattnet i badkaret och kollar hur det ser ut i figur 1 om vi använder oss de olika operatorerna och vad de gör. Union När man använder sig av union i FL, så uniferar man seten och retunerar det högsta värdet. Rent matematiskt så ser formeln ut: (A B)(x) = max [A(x), B(x)] Tittar vi närmare på figur 1 och uniferar seten kallt (cold) och ljummet (warm) så ser vi på figur 3 hur de blir efter uniferingen, då har vi satt A= kallt och B=ljummet alltså blir vår formel. (kallt ljummet)(x) = max [kallt(x), ljummet(x)] Figur 6. Union(Bildkälla: Wikipedia. Med vissa modifikationer) 7
Snitt Snitt fungerar så att man tar alla element i seten och retunerar det minsta värdet. Formeln för snitt ser du nedan. (A B)(x) = min [A(x), B(x)] Om vi fortsätter på exemplet med vattnet i badkaret. I figur 4 ser man hur det skulle se om vi sätter A=kallt och B=ljummet. Likt unionen så blir formeln för vårt temperatur exempel. (kallt ljummet)(x) = min [kallt (x), ljummet (x)] Figur 7. Snitt(Bildkälla: Wikipedia. Med vissa modifikationer) Komplement Komplement används på bara ett sätt åt gången. Det som görs när man använder sig av komplement operatorn är helt enkelt att man tar värdet på elementet och subtraherar det med ett. Det vill säga: ca(x) = 1 A(x) Om vi sätter A=ljummet så ser vi på figur 5 att att setet helt enkelt vänds upp och ner. Det som händer är helt enkelt att där vi har 1 i setet ljummet får vi med komplementet 0 och där vi 0 får vi 1. Figur 8. Komplement(Bildkälla: Wikipedia. Med vissa modifikationer) 8
Exempel med de olika operatorerna Om vi tittar på ett exempel taget från Jantzen ( som i sin tur har tagit efter Zimmermann) där vi har en familj på fyra som letar efter ett nytt hus. De vill att huset ska vara bekvämt och de vill ha ett stort hus. Vi räknar bekvämligeheten genom hur många rum ett hus har. Vi har vårt universum, U = [1,2,3,4,5,6,7,8,9,10], där varje hus benämns genom hur många rum det har. Vi sätter bekvämlighetensgraden för varje rum som där 1 = fullt sant att huset är bekvämt och 0=fullt falskt att huset är bekvämt. Vi måste även definera sanninghetsgraden för våra element för husens storlek, 1= sant att huset är stort och 0=falskt att huset är stort. B=[0.2, 0.5, 0.8, 1, 0.7, 0.3, 0, 0, 0, 0] S=[0, 0, 0.2, 0.4, 0.6, 0.8, 1, 1, 1, 1] Nu när vi definerat vårt universum och våra sets så kan vi börja använda oss av de olika operatorerna. Vi börjar med union, alltså får vi. (B S)(x) = max [B(x), S(x)] ger [0.2, 0.5, 0.8, 1, 0.7, 0.8, 1, 1, 1, 1 ] Vi ser här att huset med fyra rum (hus nr 4) är fullt tillfredställande för att det har så många rum som önskas av familjen dvs B(4) = 1. Även hus nr 7-10 är fullt tillfredställande eftersom att de är stora. Om det är säljarens marknad som råder kan det vara smart av familjen att köpa ett hus som åtminstonde tillfredställer ett av kraven helt. Kör vi snitt på dessa får vi. (B S)(x) = min [B(x), S(x)] ger [0, 0, 0.2, 0.4, 0.6, 0.3, 0, 0, 0, 0] Här får vi att det är hus nr 5 som är mest tillfredställande men den är inte helt tillfredställande. Om vi säger att det är köparens marknad som gäller så kan det vara vettigt för familjen att vänta tills något bättre dyker upp. Om vi däremot vet att dottern Marie snart ska flytta hemifrån och börja plugga Kognitionsvetenskap i Linköping. Då vill familjen istället ha ett hus som inte är stort, det som behöver göras då är att ta komplement på S och sedan räkna med det nya setet som vi får och sätter som L som i litet. cs(x) = 1 s(x) vilket ger L= [1, 1, 0.8, 0.6, 0.4, 0.2, 0, 0, 0, 0], tar vi sedan ett snitt på det. (B L)(x) = min [B(x), L(x)] ger [0.2, 0.5, 0.8, 0.6, 0.4, 0.2, 0, 0, 0, 0] 9
Då får vi reda på att huset med 3 rum är det som är mest tillfredställande för familjen. IF THEN Ett sätt att tillämpa Fuzzy Logic är genom att använda sig av IF THEN. IF THEN går ut på att man har två delar antecedenten (input) och konsekvensen (output). Antecenden går in mellan IF och THEN, konsekvensen följs efter THEN. Det kan enkelt beskrivas att om antecenden är si så blir konsekvensen så. Rule Base När man har flera olika set som man använder sig av vid IF THEN, brukar man sätta in det i en Rule Base. En Rule Base är en samling av alla de olika IF THEN satserna som man har, oftast försöker man förkorta ner de satserna man har genom att sätta ihop de med hjälp av de olika operatorerna. Figur 10. Exempel hur ett Rule Base kan se ut. (Bildkälla: Hellman) Om vi tänker oss att varje feature är ett set och R# är elementet så utgör de tillsammans accedenten och class blir konsekvensen som de får. Alltså: IF feature A and feature B and feature C and feature D THEN class. 10
Diskussion Fuzzy Logic, ett annat sätt att se logik på, jag tycker att Fuzzy Logic är ett väldigt intressant att se logik på. När man är van vid två värdens logik och FOPL så är det trevligt att lära sig ett nytt sätt som tänjer gränserna över vad som är falskt och sant. Jag önskar att jag hade lite mer tid på mig så jag hade kunnat testat att tillämpa Fuzzy Logic, det som jag tycker dock talar emot är att för att definera medlemsgraden som elementen ett set har använder man sig experter i det område. Det verkar väldigt resurskrävande jämfört med neurala nätverk som lär sig av det datan som den får in. 11
Referenser Dote, Y. Introduction To Fuzzy Logic http://ieeexplore.ieee.org.lt.ltag.bibl.liu.se/stamp/stamp.jsp?tp=&arnumber=483332 Hellermann, M. Fuzzy Logic Introduction http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.9757&rep=rep1&type=pdf Jantzen, J. Tutorial on Fuzzy Logic. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.125.2096&rep=rep1&type=pdf Zadeh, L.A. Fuzzy Sets* Russell, S & Norvig, P. Artificial Intelligence, A Morden Approach Allmér, C. Fuzzy Logic http://www.ida.liu.se/~729g11/projekt/studentpapper-11/caroline-allmer.pdf http://en.wikipedia.org/wiki/fuzzy_logic Besökt 13/09 2012 http://en.wikipedia.org/wiki/fuzzy_set Besökt 13/09 2012 http://en.wikipedia.org/wiki/fuzzy_set_operations Besökt 13/09 2012 12