internal void Defuzzify_WithTwoTriangles_ReturnsExpectedResult()
        {
            // Arrange
            var fuzzySet1 = new FuzzySet("left", TriangularFunction.Create(1, 2, 3));
            var fuzzySet2 = new FuzzySet("right", TriangularFunction.Create(3, 4, 5));

            var fuzzyOutput = new List <FuzzyOutput>
            {
                new FuzzyOutput(
                    Label.Create("Balance"),
                    fuzzySet1,
                    UnitInterval.One()),

                new FuzzyOutput(
                    Label.Create("Balance"),
                    fuzzySet2,
                    UnitInterval.One())
            };

            var centroidDefuzzifier = new CentroidDefuzzifier();

            // Act
            var result = centroidDefuzzifier.Defuzzify(fuzzyOutput);

            // Assert
            Assert.Equal("Balance", result.Subject.Value);
            Assert.Equal(3, result.Value);
        }
Exemple #2
0
 private void SetSystemOutput(FuzzyOutput fuzzyOutput)
 {
     if (fuzzyOutput.OutputList.Count != 0)
     {
         _systemOutputValue      = _centroidDefuzzifier.Defuzzify(fuzzyOutput, new MinimumNorm());
         _systemOutputPercentage = fuzzyOutput.OutputList.Max(x => x.FiringStrength);
         _systenOutputName       = fuzzyOutput.OutputList.First(x => x.FiringStrength == _systemOutputPercentage).Label;
     }
     else
     {
         _systemOutputValue      = float.NaN;
         _systenOutputName       = "STOP";
         _systemOutputPercentage = 1;
     }
 }
        internal void Defuzzify_WithTriangle_ReturnsExpectedResult()
        {
            // Arrange
            var fuzzySet = new FuzzySet("centre", TriangularFunction.Create(-1, 0, 1));

            var fuzzyOutput = new List <FuzzyOutput>
            {
                new FuzzyOutput(
                    Label.Create("Balance"),
                    fuzzySet,
                    UnitInterval.Create(0.5))
            };

            var centroidDefuzzifier = new CentroidDefuzzifier();

            // Act
            var result = centroidDefuzzifier.Defuzzify(fuzzyOutput);

            // Assert
            Assert.Equal("Balance", result.Subject.Value);
            Assert.Equal(0, result.Value);
        }
        internal void Defuzzify_WhenSubjectsUnrelated_Throws()
        {
            // Arrange
            var fuzzySet = new FuzzySet("centre", TriangularFunction.Create(-1, 0, 1));

            var fuzzyOutput = new List <FuzzyOutput>
            {
                new FuzzyOutput(
                    Label.Create("Subject1"),
                    fuzzySet,
                    UnitInterval.One()),
                new FuzzyOutput(
                    Label.Create("Subject2"),
                    fuzzySet,
                    UnitInterval.One())
            };

            var centroidDefuzzifier = new CentroidDefuzzifier();

            // Act
            // Assert
            Assert.Throws <InvalidOperationException>(() => centroidDefuzzifier.Defuzzify(fuzzyOutput));
        }