예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }