Commit 0ab179dd authored by Falko Schumann's avatar Falko Schumann 💩

Gleitende Übergänge der Fuzzy-Sets müssen auch bei Defuzzyfierzierung bestimmt werden

parent acb8f80a
......@@ -136,11 +136,48 @@ public final class LinguistischeVariable {
}
public FuzzyVariable fuzzyfiziere(double wert) {
return new Fuzzyfizierung(this).fuzzyfiziere(wert);
return new Fuzzyfizierung(mitGleitendenUebergaenge()).fuzzyfiziere(wert);
}
public double defuzzyfiziere(FuzzyVariable fuzzyWert) {
return new Defuzzyfizierung(this).defuzzyfiziere(fuzzyWert);
return new Defuzzyfizierung(mitGleitendenUebergaenge()).defuzzyfiziere(fuzzyWert);
}
LinguistischeVariable mitGleitendenUebergaenge() {
List<FuzzySet> fuzzySetsMitUebergaengen = this.fuzzySets.stream()
.sorted(Comparator.comparingDouble(FuzzySet::getT2))
.collect(Collectors.toList());
Wertebereich wertebereich = getWertebereich();
for (int i = 0; i < fuzzySetsMitUebergaengen.size(); i++) {
FuzzySet vorgaenger = i > 0 ? fuzzySetsMitUebergaengen.get(i - 1) : null;
FuzzySet fuzzySet = fuzzySetsMitUebergaengen.get(i);
FuzzySet nachfolger = i < fuzzySetsMitUebergaengen.size() - 1 ? fuzzySetsMitUebergaengen.get(i + 1) : null;
double t1;
if (Double.isNaN(fuzzySet.getT1())) {
if (vorgaenger == null) {
t1 = wertebereich.getMinimum();
} else {
t1 = vorgaenger.getT3();
}
} else {
t1 = fuzzySet.getT1();
}
double t2 = fuzzySet.getT2();
double t3 = fuzzySet.getT3();
double t4;
if (Double.isNaN(fuzzySet.getT4())) {
if (nachfolger == null) {
t4 = wertebereich.getMaximum();
} else {
t4 = nachfolger.getT2();
}
} else {
t4 = fuzzySet.getT4();
}
fuzzySetsMitUebergaengen.set(i, FuzzySet.trapez(fuzzySet.getName(), t1, t2, t3, t4));
}
return new LinguistischeVariable(name, wertebereich, fuzzySetsMitUebergaengen);
}
@Override
......@@ -173,49 +210,11 @@ public final class LinguistischeVariable {
FuzzyVariable fuzzyfiziere(double wert) {
List<FuzzySet> fuzzySets = linguistischeVariable.getFuzzySets();
fuzzySets = ergaenzeGleitendeUebergaenge(fuzzySets);
List<Term> terme = fuzzyfiziere(fuzzySets, wert);
terme = fasseGleicheTermeZusammen(terme);
return new FuzzyVariable(linguistischeVariable.getName(), terme);
}
private List<FuzzySet> ergaenzeGleitendeUebergaenge(List<FuzzySet> fuzzySets) {
fuzzySets = fuzzySets.stream()
.sorted(Comparator.comparingDouble(FuzzySet::getT2))
.collect(Collectors.toList());
Wertebereich wertebereich = linguistischeVariable.getWertebereich();
for (int i = 0; i < fuzzySets.size(); i++) {
FuzzySet vorgaenger = i > 0 ? fuzzySets.get(i - 1) : null;
FuzzySet fuzzySet = fuzzySets.get(i);
FuzzySet nachfolger = i < fuzzySets.size() - 1 ? fuzzySets.get(i + 1) : null;
double t1;
if (Double.isNaN(fuzzySet.getT1())) {
if (vorgaenger == null) {
t1 = wertebereich.getMinimum();
} else {
t1 = vorgaenger.getT3();
}
} else {
t1 = fuzzySet.getT1();
}
double t2 = fuzzySet.getT2();
double t3 = fuzzySet.getT3();
double t4;
if (Double.isNaN(fuzzySet.getT4())) {
if (nachfolger == null) {
t4 = wertebereich.getMaximum();
} else {
t4 = nachfolger.getT2();
}
} else {
t4 = fuzzySet.getT4();
}
fuzzySets.set(i, FuzzySet.trapez(fuzzySet.getName(), t1, t2, t3, t4));
}
return fuzzySets;
}
private List<Term> fuzzyfiziere(List<FuzzySet> fuzzySets, double wert) {
return fuzzySets.stream()
.map(fs -> bestimmeTerm(fs, wert))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment