public void TestMethod1() { var setA = new FuzzySet(); var listA = new List<IFuzzyElement> { new FuzzyElement { X = 6, Value = 0.30 }, new FuzzyElement { X = 7, Value = 0.60 }, new FuzzyElement { X = 8, Value = 1 } }; setA.AddElements(listA); var setB = new FuzzySet(); var listB = new List<IFuzzyElement> { new FuzzyElement { X = 5, Value = 1 }, new FuzzyElement { X = 6, Value = 0.60 }, new FuzzyElement { X = 7, Value = 0.20 } }; setB.AddElements(listB); var list = new List<IFuzzySet> { setA, setB }; var defuzzifier = new CenterOfSumDefuzzifier(Functions.Union); var result = defuzzifier.Defuzzifier(list).Round(3); Assert.AreEqual(result, 6.486); }
public void GetCartesianProductLarsenProductTest() { var setA = new FuzzySet(); var list = new List<IFuzzyElement> { new FuzzyElement { X = -1, Value = 0.33 }, new FuzzyElement { X = 0, Value = 0.67 }, new FuzzyElement { X = 1, Value = 1.0 }, new FuzzyElement { X = 2, Value = 0.75 }, new FuzzyElement { X = 3, Value = 0.5 }, new FuzzyElement { X = 4, Value = 0.25 } }; setA.AddElements(list); var setB = new FuzzySet(); list = new List<IFuzzyElement> { new FuzzyElement { X = -4, Value = 0.5 }, new FuzzyElement { X = -3, Value = 1.0 }, new FuzzyElement { X = -2, Value = 0.67 }, new FuzzyElement { X = -1, Value = 0.33 } }; setB.AddElements(list); var result = Relations.GetCartesianProduct(setA, setB, Implications.LarsenProductImplication, () => new FuzzyRow()); Assert.AreEqual(result.ElementAt(0).ElementAt(0).Value, (new FuzzyElement { X = 2, Value = 0.165 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(1).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(2).Value.Round(4), (new FuzzyElement { X = 2, Value = 0.2211 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(3).Value.Round(4), (new FuzzyElement { X = 2, Value = 0.1089 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(0).Value, (new FuzzyElement { X = 2, Value = 0.335 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(1).Value, (new FuzzyElement { X = 2, Value = 0.67 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(2).Value.Round(4), (new FuzzyElement { X = 2, Value = 0.4489 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(3).Value.Round(4), (new FuzzyElement { X = 2, Value = 0.2211 }).Value); }
public void GetCartesianProductMamdaniMinTest() { var setA = new FuzzySet(); var list = new List<IFuzzyElement> { new FuzzyElement { X = 2, Value = 0.5 }, new FuzzyElement { X = 3, Value = 1.0 }, new FuzzyElement { X = 4, Value = 0.5 } }; setA.AddElements(list); var setB = new FuzzySet(); list = new List<IFuzzyElement> { new FuzzyElement { X = 5, Value = 0.33 }, new FuzzyElement { X = 6, Value = 0.67 }, new FuzzyElement { X = 7, Value = 1.0 }, new FuzzyElement { X = 8, Value = 0.67 }, new FuzzyElement { X = 9, Value = 0.33 } }; setB.AddElements(list); var result = Relations.GetCartesianProduct(setA, setB, Implications.MamdaniMinImplication, () => new FuzzyRow()); Assert.AreEqual(result.ElementAt(0).ElementAt(0).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(1).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(2).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(3).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(0).ElementAt(4).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(0).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(1).Value, (new FuzzyElement { X = 2, Value = 0.67 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(2).Value, (new FuzzyElement { X = 2, Value = 1.0 }).Value); Assert.AreEqual(result.ElementAt(1).ElementAt(3).Value, (new FuzzyElement { X = 2, Value = 0.67 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(4).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(0).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(1).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(2).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(3).Value, (new FuzzyElement { X = 2, Value = 0.5 }).Value); Assert.AreEqual(result.ElementAt(2).ElementAt(4).Value, (new FuzzyElement { X = 2, Value = 0.33 }).Value); }
public void IntersectionTest() { var setA = new FuzzySet(); var listA = new List<IFuzzyElement> { new FuzzyElement { X = 6, Value = 0.33 }, new FuzzyElement { X = 7, Value = 0.67 }, new FuzzyElement { X = 8, Value = 1 }, new FuzzyElement { X = 9, Value = 0.67 }, new FuzzyElement { X = 10, Value = 0.33 } }; setA.AddElements(listA); var setB = new FuzzySet(); var listB = new List<IFuzzyElement> { new FuzzyElement { X = 3, Value = 0.20 }, new FuzzyElement { X = 4, Value = 0.60 }, new FuzzyElement { X = 5, Value = 1 }, new FuzzyElement { X = 6, Value = 0.60 }, new FuzzyElement { X = 7, Value = 0.20 } }; setB.AddElements(listB); var result = setA.Intersection(setB); Assert.AreEqual(result.Elements.Count, 2); Assert.AreEqual(result.Elements[6.0].Value, 0.33); Assert.AreEqual(result.Elements[7.0].Value, 0.2); }
public void UnionTest() { var setA = new FuzzySet(); var listA = new List<IFuzzyElement> { new FuzzyElement { X = 6, Value = 0.33 }, new FuzzyElement { X = 7, Value = 0.67 }, new FuzzyElement { X = 8, Value = 1 }, new FuzzyElement { X = 9, Value = 0.67 }, new FuzzyElement { X = 10, Value = 0.33 } }; setA.AddElements(listA); var setB = new FuzzySet(); var listB = new List<IFuzzyElement> { new FuzzyElement { X = 3, Value = 0.20 }, new FuzzyElement { X = 4, Value = 0.60 }, new FuzzyElement { X = 5, Value = 1 }, new FuzzyElement { X = 6, Value = 0.60 }, new FuzzyElement { X = 7, Value = 0.20 } }; setB.AddElements(listB); var result = setA.Union(setB); Assert.AreEqual(result.Elements.Count, 8); Assert.AreEqual(result.Elements[3.0].Value, 0.2); Assert.AreEqual(result.Elements[4.0].Value, 0.6); Assert.AreEqual(result.Elements[5.0].Value, 1.0); Assert.AreEqual(result.Elements[6.0].Value, 0.6); Assert.AreEqual(result.Elements[7.0].Value, 0.67); Assert.AreEqual(result.Elements[8.0].Value, 1.0); Assert.AreEqual(result.Elements[9.0].Value, 0.67); Assert.AreEqual(result.Elements[10.0].Value, 0.33); }