Commit ac2e53d1 authored by Falko Schumann's avatar Falko Schumann

Sonderfall runder Wertebereich entfernt

parent 6e2b548a
......@@ -95,13 +95,6 @@ public final class FuzzySet {
return new FuzzySet(name, Double.NaN, t2, t3, Double.NaN);
}
public static FuzzySet runderWertebereich(String name, double t1, double t2, double t3, double t4) {
if (t1 > t2 || t2 <= t3 || t3 > t4) {
throw new IllegalArgumentException("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: " + t1 + ", " + t2 + ", " + t3 + ", " + t4);
}
return new FuzzySet(name, t1, t2, t3, t4);
}
public String getName() {
return name;
}
......@@ -122,10 +115,6 @@ public final class FuzzySet {
return t4;
}
public boolean ueberschneidetAnfangUndEndeDesWertebereichs() {
return t1 <= t2 && t2 > t3 && t3 <= t4;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
......
......@@ -128,24 +128,11 @@ public final class LinguistischeVariable {
// 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
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.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()));
}
}
return fuzzySets;
}
private static List<Term> fuzzyfiziere(List<FuzzySet> fuzzySets, double wert) {
return fuzzySets.stream()
.map(fs -> bestimmeTerm(fs, wert))
......
......@@ -153,42 +153,6 @@ public class FuzzySetTests {
FuzzySet.trapezMitGleitendenUebergaengen("mittel", 75.1, 75.0);
}
@Test
public void runderWertebereich_Normalfall() {
FuzzySet fuzzySet = FuzzySet.runderWertebereich("Nord", 330.0, 359.0, 0.0, 30.0);
assertEquals("name", "Nord", fuzzySet.getName());
assertEquals("t1", 330.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 359.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 0.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 30.0, fuzzySet.getT4(), 0.001);
}
@Test
public void runderWertebereich_T1ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 360.0, 359.0, 0.0, 30.0");
FuzzySet.runderWertebereich("Nord", 360.0, 359.0, 0.0, 30.0);
}
@Test
public void runderWertebereich_T2ZuKlein_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 330.0, 10.0, 20.0, 30.0");
FuzzySet.runderWertebereich("Nord", 330.0, 10.0, 20.0, 30.0);
}
@Test
public void runderWertebereich_T3ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 330.0, 359.0, 31.0, 30.0");
FuzzySet.runderWertebereich("Nord", 330.0, 359.0, 31.0, 30.0);
}
@Test
public void formattierterText() {
FuzzySet fuzzySet = FuzzySet.trapez("mittel", 25.0, 35.0, 75.0, 85.0);
......
......@@ -185,29 +185,6 @@ public class LinguistischeVariableTests {
fuzzyVariable);
}
@Test
public void fuzzyfiziere_RunderWertebereich() {
LinguistischeVariable linguistischeVariable = new LinguistischeVariable(
"Windrichtung",
new Wertebereich(0.0, 359.0),
FuzzySet.runderWertebereich("Nord", 305.0, 325.0, 35.0, 55.0),
FuzzySet.trapez("Ost", 35.0, 55.0, 125.0, 145.0),
FuzzySet.trapez("Süd", 125.0, 145.0, 215.0, 235.0),
FuzzySet.trapez("West", 215.0, 235.0, 305.0, 325.0)
);
FuzzyVariable fuzzyVariable = linguistischeVariable.fuzzyfiziere(30.0);
assertEquals(
new FuzzyVariable("Windrichtung",
new Term("Nord", Zugehoerigkeit.von(1.0)),
new Term("Ost", Zugehoerigkeit.von(0.0)),
new Term("Süd", Zugehoerigkeit.von(0.0)),
new Term("West", Zugehoerigkeit.von(0.0))
),
fuzzyVariable);
}
@Test
@Ignore("Defuzzyfizierung noch nicht implementiert")
public void defuzzyfiziere_Normalfall() {
......
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