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.