Objektorientierte Implementierung von Eingangs- und Ausgangsfuzzysets
|
Implementierung eines Eingangsfuzzysets
|
class Eingangsfuzzyset { public: int fg_anzahl; Fuzzygroesse** fg; double* zwerte; Eingangsfuzzyset(int fg_anzahl) { this->fg_anzahl = fg_anzahl; fg = new Fuzzygroesse*[fg_anzahl]; //Dummywerte eintragen: fg[0] = new Fuzzygroesse(0.0,1.0,2.0,true,false); for(int i=1;i<fg_anzahl-1;i++) fg[i] = new Fuzzygroesse((double)i,(double)(i+1),(double)(i+2),false,false); fg[fg_anzahl-1] = new Fuzzygroesse((double)(fg_anzahl-1),(double)(fg_anzahl), (double)(fg_anzahl+1),false,true); zwerte = new double[fg_anzahl]; } void setzeStellen(double* stelle) { fg[0]->p[0] = stelle[0]-1.0; //Dummy-Wert fg[0]->p[1] = stelle[0]; fg[0]->p[2] = stelle[1]; for(int i=1;i<fg_anzahl-1;i++) { fg[i]->p[0] = stelle[i-1]; fg[i]->p[1] = stelle[i]; fg[i]->p[2] = stelle[i+1]; } fg[fg_anzahl-1]->p[0] = stelle[fg_anzahl-2]; fg[fg_anzahl-1]->p[1] = stelle[fg_anzahl-1]; fg[fg_anzahl-1]->p[2] = stelle[fg_anzahl-1]+1.0; //Dummy-Wert } double* berechneZugehoerigkeitswerte(double x) { for(int i=0;i<fg_anzahl;i++) zwerte[i] = fg[i]->berechneZugehoerigkeitswert(x); return zwerte; } };
Code 0-1: Quellcode der Klasse Eingangsfuzzyset aus der Datei Eingangsfuzzyset.h
Übungsaufgabe b): Bestimmen Sie die gleichen Größen, wie in Übungsaufgabe a), aber verwenden Sie dazu jetzt die Klasse Eingangsfuzzyset.
Implementierung eines Ausgangsfuzzysets
|
Bild 0-1: Anpassung der Aufgabe aus Übung 9
|
class Ausgangsfuzzyset { public: int fg_anzahl; Fuzzygroesse** fg; double* zwerte; Ausgangsfuzzyset(int fg_anzahl) { this->fg_anzahl = fg_anzahl; fg = new Fuzzygroesse*[fg_anzahl]; //Dummywerte eintragen: for(int i=0;i<fg_anzahl;i++) fg[i] = new Fuzzygroesse((double)i,(double)(i+1),(double)(i+2),false,false); zwerte = new double[fg_anzahl]; } void setzeStellen(double* stelle) //auch hier nur p1-Werte übergeben { fg[0]->p[0] = stelle[0]-(stelle[1]-stelle[0]); //p2 an p1 spiegeln fg[0]->p[1] = stelle[0]; fg[0]->p[2] = stelle[1]; for(int i=1;i<fg_anzahl-1;i++) { fg[i]->p[0] = stelle[i-1]; fg[i]->p[1] = stelle[i]; fg[i]->p[2] = stelle[i+1]; } fg[fg_anzahl-1]->p[0] = stelle[fg_anzahl-2]; fg[fg_anzahl-1]->p[1] = stelle[fg_anzahl-1]; fg[fg_anzahl-1]->p[2] = stelle[fg_anzahl-1]+(stelle[fg_anzahl-1]-stelle[fg_anzahl-2]); //p0 an p1 spiegeln } double berechneAusgang(int* fg_indices, double* fg_aktivierungen,int regel_anzahl) { double Ages=0.0; double sges=0.0; double Aaktuell=0.0; for(int i=0;i<regel_anzahl;i++) { Aaktuell = fg[fg_indices[i]]->berechneFlaeche(fg_aktivierungen[i]); Ages+=Aaktuell; sges+=Aaktuell*fg[fg_indices[i]]->berechneSchwerpunkt(fg_aktivierungen[i]); } return sges/Ages; } };
Code 0-2: Quellcode der Klasse Ausgangsfuzzyset aus der Datei Ausgangsfuzzyset.h
Übungsaufgabe c): Lösen Sie nun vollends die Übung 9 mit Hilfe eines selbstgeschriebenen Programms unter Verwendung der hier dargestellten Klassen.
R=7 und T=12.5, => Rkalt = 0.6 Rmittel = 0.4 Rwarm = 0 Tkalt = 0.5 Twarm = 0.5 Ausgangsaktivieurng bei R=7 und T=12.5: A=13.0935 R=5 und T=7, => Rkalt = 1 Rmittel = 0 Rwarm = 0 Tkalt = 0.866667 Twarm = 0.133333 Ausgangsaktivieurng bei R=5 und T=7.5: A=20
Code 0-3: Kontrollausgabe zu Übungsaufgabe c) - Rechnen Sie die Ergebnisse zur Übung auch von Hand nach.