FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Technische Informatik (HS)

EBS: Fuzzyfizierung

EBS: Fuzzyfizierung 2005-10-21 14:26
Popcorn
Kann da jemand für mich etwas Licht hineinbringen:

Während der Fuzzyfizierung werden die Erfüllungsgrade aller Aussagen auf der linken Regelseite ermittelt. Dazu wird für jede Aussage der Form:
linguistische Variable = linguistischer Wert

der Zugehörigkeitsgrad des Fakts zum bezeichnenden Fuzzy Set ermittelt. Jeder Aussage innerhalb eines Ausdrucks ist nach der Fuzzyfizierung ein Erfüllungsgrad zugeordnet. Der folgende Pseudocode-Abschnitt veranschaulicht Fuzzyfizierung
for k:=1 to n do
for j=1 to m do
Grad[ k ][ j ]:= Regel [ k ] [ j ] [Fakt [ j ]];

Ich versuche mir das an einer realen Anwendung zu veranschaulichen, aber bin mir recht unsicher. Mal von einem Kühllungssystem mit drei Sensonren ausgeangen:

Drei Sensonren = Drei Fakten, bzw. drei Temperaturen
j := (20,25,5)

Und Regeln:
i := (>=25, kühle stark, sonst nicht; >= 15, kühle leicht, sonst nicht; >=10 Heizen, sonst nicht)

Nun arbeite ich meine Schleifen ab:
Grad[k][j] := Regel[k][j] [Fakt[j]];

Grad[1][1] := …

Regel[1][1] würde nun ergeben, kühle leicht. Und Fakt[1] bedeutet es sind 15 Grad. Hier sehe ich schon mal nicht, was Fakt[j] dahinter soll. Ohne den würden sich jetzt schön drei Ausdrücke ergeben:

Ausdruck[1] = (nichts, Kühlung, nichts)
Ausdruck[2] = (kühle leicht, kühle leicht, nichts)
Ausdruck[3] = (nichts, nichts, heizen)

Damit hätten man dann schöne Daten für die weitere Verarbeitung.

Sehe ich es ansonsten in etwa richtig oder ist die Anwendungsidee total falsch?


Re: EBS: Fuzzyfizierung 2005-10-21 22:41
Gunnar
Ich wuerde gerne Antworten, das System beschwert sich aber, dass "{i}-Syntax Wrong/Falsch" (mit {->[ und }->]) ist. Kann ich das irgendwie escapen?

Edit:Ich kriege es nicht hin. Hier ist die Antwort:
http://darkstar.homeunix.org/antwort.txt

Auch gut: http://en.wikipedia.org/wiki/Fuzzy_control_system

Re: EBS: Fuzzyfizierung 2005-10-22 12:43
Popcorn
Danke, damit ist auf jeden Fall einiges beantwortet. Jetzt muss ich noch mindestens 30 Minunten investieren, dann weiß ich auch, ob ich es vielleicht verstanden habe. [img]http://www.fb18.de/gfx/24.gif[/img]

Hier noch mal dein Text:

Und Regeln:
i := (>=25, kühle stark, sonst nicht; >= 15, kühle leicht, sonst nicht; >=10 Heizen, sonst nicht)

Ein paar Folien weiter steht, dass eine Regel so aussieht:

if ( = and = and ... and ...) then ausgang[n] = v
fuer m=4 (Terme pro Regelpraemisse), wobei 'v' auch ein ling. Wert ist.

Also z.B.:
if (temp is Warm AND temp2 is Cold AND ...) then ausgang[n] is RingAlarm
Fuzzifizierung bedeutet nun, einem Term (temp is Warm) einen Erfuellungsgrad zuzuweisen, naemlich Grad[k][j]. Der Erfuellungsgrad (Kompatiblitaetsmass) der Praemisse der Regel i ist dann Comp[k] = min(Grad[k][*]) (Aggregation). Mit Comp[k] wird dann die Konklusion (die ja ein Fuzzy-Set ist) gekappt. Dann werden alle gekappten Konklusionen per max-Operation zusammengefasst (Akkumulation), und aus dem resultierendem Fuzzy-Set wird ein Stellvertreter ausgewaehlt (Defuzzifizierung).

Was ist ein ling. Wert? Er ist darstellbar als Fuzzy-Set, also
wert:t->[0,1].

Z.B. fuer Warm:
Warm:t->[0,1] = {(0 Grad, 0), ..., (10 Grad, 0.1), ..., (25 Grad, 1), ..., (40 Grad, 0.5), ...} Um den Erfuellungsgrad von temp1 = Warm zu ermitteln, muss man einfach die Funktion auf den Sensorinput anwenden.

So habe ich es jedenfalls verstanden.

Aber was nun

for k:=1 to n do
for j=1 to m do
Grad[k][j]:= Regel[k][j][Fakt[j]];

genau bedeutet weiss ich auch nicht. :26: