Loading src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/LinguistischeVariable.java +39 −40 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) Loading Loading
src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/LinguistischeVariable.java +39 −40 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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)) Loading