Esempio n. 1
0
        internal void Evaluate_ValidRuleAndConditions_ReturnsExpectedFuzzyOutput()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();
            var fanSpeed  = StubLinguisticVariableFactory.PumpSpeed();

            var fuzzyRule = new FuzzyRuleBuilder(PumpSpeedRule.Rule0)
                            .If(ConditionBuilder.If(waterTemp.Is(WaterTemp.Frozen)))
                            .Or(ConditionBuilder.If(waterTemp.Is(WaterTemp.Freezing)))
                            .Then(fanSpeed.Is(PumpSpeed.Off))
                            .Build();

            var dataPoint = new DataPoint(waterTemp.Subject, 0);

            var data = new Dictionary <Label, DataPoint> {
                { dataPoint.Variable, dataPoint }
            };

            // Act
            var result = fuzzyRule.Evaluate(data, new FuzzyEvaluator());

            // Assert
            Assert.Equal(fanSpeed.Subject, result[0].Subject);
            Assert.Equal(fanSpeed.GetState(0), result[0].State);
            Assert.Equal(UnitInterval.One(), result[0].FiringStrength);
            Assert.Equal(fanSpeed.GetSet(PumpSpeed.Off), result[0].OutputFunction);
        }
        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);
        }
Esempio n. 3
0
 public UnitInterval Evaluate(UnitInterval membershipA, UnitInterval membershipB)
 {
     return(1 - (membershipA * membershipB) > 0
         ? UnitInterval.Create(
                ((membershipA + membershipB) - (2 * (membershipA * membershipB)))
                / (1 - (membershipA * membershipB)))
         : UnitInterval.One());
 }
Esempio n. 4
0
        internal void One_ReturnsUnitIntervalWithValueOne()
        {
            // Arrange
            // Act
            var result = UnitInterval.One();

            // Assert
            Assert.Equal(1, result.Value);
        }
        internal void MaxY_ReturnsExpectedResult()
        {
            // Arrange
            var function = SingletonFunction.Create(1);

            // Act
            var result = function.MaxY;

            // Assert
            Assert.Equal(UnitInterval.One(), result);
        }
Esempio n. 6
0
        internal void ToString_ReturnsExpectedResults()
        {
            // Arrange
            // Act
            var result1 = UnitInterval.Zero().ToString();
            var result2 = UnitInterval.One().ToString();

            // Assert
            Assert.Equal("0", result1);
            Assert.Equal("1", result2);
        }
Esempio n. 7
0
        internal void GetHashCode_ReturnsExpectedResults()
        {
            // Arrange
            // Act
            var result1 = UnitInterval.Zero().GetHashCode();
            var result2 = UnitInterval.One().GetHashCode();

            // Assert
            Assert.Equal(0, result1);
            Assert.Equal(1072693248, result2);
        }
Esempio n. 8
0
        internal void Equals_WhenValueNull_ReturnsFalse()
        {
            // Arrange
            var unitInterval = UnitInterval.One();

            // Act
            var result = unitInterval.Equals(null);

            // Assert
            Assert.False(result);
        }
Esempio n. 9
0
        internal void Equals_WhenValueNotEqual_ReturnsFalse()
        {
            // Arrange
            var unitInterval = UnitInterval.One();

            // Act
            var result1 = unitInterval.Equals(UnitInterval.Zero());
            var result2 = unitInterval.Equals(0);

            // Assert
            Assert.False(result1);
            Assert.False(result2);
        }
Esempio n. 10
0
        internal void Equals_WhenValueEqual_ReturnsTrue()
        {
            // Arrange
            var unitInterval = UnitInterval.One();

            // Act
            var result1 = unitInterval.Equals(UnitInterval.One());
            var result2 = unitInterval.Equals(1.0);

            // Assert
            Assert.True(result1);
            Assert.True(result2);
        }
Esempio n. 11
0
        internal void MaxY_ReturnsExpectedResult()
        {
            // Arrange
            // Arrange
            var points = new FuzzyPoint[]
            {
                new FuzzyPoint(2, 0),
                new FuzzyPoint(3, 1)
            };

            var function = new PiecewiseLinearFunction(points);

            // Act
            var result = function.MaxY;

            // Assert
            Assert.Equal(UnitInterval.One(), result);
        }
Esempio n. 12
0
        /// <summary>
        /// Returns the final evaluation result of the aggregated collection of evaluations.
        /// </summary>
        /// <param name="evaluations">
        /// The evaluations.
        /// </param>
        /// <returns>
        /// A <see cref="UnitInterval"/>.
        /// </returns>
        public UnitInterval Evaluate(IEnumerable <Evaluation> evaluations)
        {
            var result = UnitInterval.One();

            foreach (var evaluation in evaluations)
            {
                if (evaluation.Connective.Equals(LogicOperators.And()) ||
                    evaluation.Connective.Equals(LogicOperators.If()))
                {
                    result = this.And(result, evaluation.Result);
                }

                if (evaluation.Connective.Equals(LogicOperators.Or()))
                {
                    result = this.Or(result, evaluation.Result);
                }
            }

            return(result);
        }
        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));
        }
Esempio n. 14
0
 public UnitInterval Evaluate(UnitInterval membershipA, UnitInterval membershipB)
 {
     return(Math.Min(membershipA.Value, membershipB.Value).Equals(0)
         ? UnitInterval.Create(Math.Max(membershipA.Value, membershipB.Value))
         : UnitInterval.One());
 }
Esempio n. 15
0
 /// <summary>
 /// Prevents a default instance of the <see cref="ConditionBuilder"/> class from being created.
 /// </summary>
 /// <returns>
 /// A <see cref="ConditionBuilder"/>.
 /// </returns>
 private ConditionBuilder()
 {
     this.Weight = UnitInterval.One();
 }