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); }
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)); }