Loading src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/FuzzySet.java +1 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ public final class FuzzySet { return t4; } public boolean isRunderWertebereich() { public boolean ueberschneidetAnfangUndEndeDesWertebereichs() { return t1 <= t2 && t2 >= t3 && t3 <= t4; } Loading src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/LinguistischeVariable.java +9 −5 Original line number Diff line number Diff line Loading @@ -127,19 +127,23 @@ public final class LinguistischeVariable { public FuzzyVariable fuzzyfiziere(double wert) { // TODO Wenn nur t2 und t3 der Fuzzy-Sets angegeben sind, t1 und t4 so berechnen, das fließende Übergänge entstehen // TODO Wenn nur t2 und t3 der Fuzzy-Sets angegeben sind, für erstes und letztes Fuzzy-Set im Wertebereich Rampen annehmen // TODO Spezialfall runder Wertebreich: Aus einem Fuzzy-Set, dass beide Wertebereichsgrenzen schneidet, werden zwei Fuzyy-Sets erzeugt List<FuzzySet> fuzzySets = zerlegeFuzzySetsDieAnfangUndEndeDesWertebereichsUeberschneiden(); List<Term> terme = fuzzyfiziere(fuzzySets, wert); terme = fasseGleicheTermeZusammen(terme); return new FuzzyVariable(name, terme); } private List<FuzzySet> zerlegeFuzzySetsDieAnfangUndEndeDesWertebereichsUeberschneiden() { List<FuzzySet> fuzzySets = new ArrayList<>(this.fuzzySets); for (int i = 0; i < fuzzySets.size(); i++) { FuzzySet fs = fuzzySets.get(i); if (fs.isRunderWertebereich()) { if (fs.ueberschneidetAnfangUndEndeDesWertebereichs()) { fuzzySets.set(i, FuzzySet.aufsteigendeRampe(fs.getName(), fs.getT1(), fs.getT2(), wertebereich.getMaximum())); fuzzySets.add(FuzzySet.abfallendeRampe(fs.getName(), wertebereich.getMinimum(), fs.getT3(), fs.getT4())); } } List<Term> terme = fuzzyfiziere(fuzzySets, wert); terme = fasseGleicheTermeZusammen(terme); return new FuzzyVariable(name, terme); return fuzzySets; } private static List<Term> fuzzyfiziere(List<FuzzySet> fuzzySets, double wert) { Loading Loading
src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/FuzzySet.java +1 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ public final class FuzzySet { return t4; } public boolean isRunderWertebereich() { public boolean ueberschneidetAnfangUndEndeDesWertebereichs() { return t1 <= t2 && t2 >= t3 && t3 <= t4; } Loading
src/main/java/de/bsvrz/iav/fuzzylib/fuzzylib/LinguistischeVariable.java +9 −5 Original line number Diff line number Diff line Loading @@ -127,19 +127,23 @@ public final class LinguistischeVariable { public FuzzyVariable fuzzyfiziere(double wert) { // TODO Wenn nur t2 und t3 der Fuzzy-Sets angegeben sind, t1 und t4 so berechnen, das fließende Übergänge entstehen // TODO Wenn nur t2 und t3 der Fuzzy-Sets angegeben sind, für erstes und letztes Fuzzy-Set im Wertebereich Rampen annehmen // TODO Spezialfall runder Wertebreich: Aus einem Fuzzy-Set, dass beide Wertebereichsgrenzen schneidet, werden zwei Fuzyy-Sets erzeugt List<FuzzySet> fuzzySets = zerlegeFuzzySetsDieAnfangUndEndeDesWertebereichsUeberschneiden(); List<Term> terme = fuzzyfiziere(fuzzySets, wert); terme = fasseGleicheTermeZusammen(terme); return new FuzzyVariable(name, terme); } private List<FuzzySet> zerlegeFuzzySetsDieAnfangUndEndeDesWertebereichsUeberschneiden() { List<FuzzySet> fuzzySets = new ArrayList<>(this.fuzzySets); for (int i = 0; i < fuzzySets.size(); i++) { FuzzySet fs = fuzzySets.get(i); if (fs.isRunderWertebereich()) { if (fs.ueberschneidetAnfangUndEndeDesWertebereichs()) { fuzzySets.set(i, FuzzySet.aufsteigendeRampe(fs.getName(), fs.getT1(), fs.getT2(), wertebereich.getMaximum())); fuzzySets.add(FuzzySet.abfallendeRampe(fs.getName(), wertebereich.getMinimum(), fs.getT3(), fs.getT4())); } } List<Term> terme = fuzzyfiziere(fuzzySets, wert); terme = fasseGleicheTermeZusammen(terme); return new FuzzyVariable(name, terme); return fuzzySets; } private static List<Term> fuzzyfiziere(List<FuzzySet> fuzzySets, double wert) { Loading