Example #1
0
        internal void Build_WithComplexCondition_ReturnsExpectedFuzzyRule()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var rule1 = new FuzzyRuleBuilder("Rule1")
                        .If(ConditionBuilder
                            .If(waterTemp.Is("cold"))
                            .And(waterTemp.Not("freezing"))
                            .Or(waterTemp.Not("frozen")))
                        .And(ConditionBuilder
                             .If(waterTemp.Is("warm"))
                             .And(waterTemp.Not("hot"))
                             .Or(waterTemp.Not("boiling")))
                        .And(ConditionBuilder
                             .If(waterTemp.Is("frozen"))
                             .And(waterTemp.Is("warm")))
                        .Then(waterTemp.Not("frozen"))
                        .Build();

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

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

            var result = rule1.Evaluate(data, new FuzzyEvaluator());

            var temp = waterTemp.GetState(2);

            // Assert
            //Assert.Equal(new FuzzyState("warm"), temp);
            //Assert.True(result);
        }
Example #2
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 IsMember_WhenVariableDoesNotContainMember_ReturnsTrue()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.IsMember(FuzzyState.Create("vapour"));

            // Assert
            Assert.False(result);
        }
        internal void GetState_ReturnsExpectedState(double input, Enum state)
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.GetState(input);

            // Assert
            Assert.Equal(FuzzyState.Create(state), result);
        }
        internal void GetMembership_ReturnsExpectedDouble(double input, Enum label, double membershipValue)
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.GetMembership(label, input);

            // Assert
            Assert.Equal(UnitInterval.Create(membershipValue), result);
        }
        internal void GetUpperBound_ReturnsExpectedDouble()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.UpperBound;

            // Assert
            Assert.Equal(200, result);
        }
        internal void GetLabel_ReturnsExpectedLabel()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.Subject;

            // Assert
            Assert.Equal(Label.Create(InputVariable.WaterTemp), result);
        }
        internal void GetMembers_ReturnsTheListOfMembers()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.GetMembers();

            // Assert
            Assert.Equal(6, result.Count);
        }
        internal void GetSet_ReturnsTheFuzzySet()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.GetSet(WaterTemp.Frozen);

            // Assert
            Assert.Equal(FuzzyState.Create("frozen"), result.State);
        }
        internal void IsMember_WhenVariableContainsMember_ReturnsTrue()
        {
            // Arrange
            var temperature = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var result = temperature.IsMember(WaterTemp.Frozen);

            // Assert
            Assert.True(result);
        }
Example #11
0
        internal void ValidateProposition_WhenStateNotAMemberOfLinguisticVariable_Throws()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            // Invalid fuzzy state.
            var fuzzyState = FuzzyState.Create(PumpSpeed.Off);

            // Act
            // Assert
            Assert.Throws <InvalidOperationException>(() => new Proposition(waterTemp, LogicOperators.Is(), fuzzyState));
        }
Example #12
0
        internal void ToString_ReturnsExpectedString()
        {
            // Arrange
            var waterTemp  = StubLinguisticVariableFactory.WaterTemp();
            var conclusion = new Conclusion(waterTemp, LogicOperators.Is(), FuzzyState.Create(WaterTemp.Cold));

            // Act
            var result = conclusion.ToString();

            // Assert
            Assert.Equal("THEN WaterTemp IS cold", result);
        }
Example #13
0
        internal void Validate_WhenFirstConditionConnectiveNotIf_Throws()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();
            var fanSpeed  = StubLinguisticVariableFactory.PumpSpeed();

            var fuzzyRule = new FuzzyRuleBuilder("Rule0")
                            .And(ConditionBuilder.If(waterTemp.Is(WaterTemp.Frozen)))
                            .Then(fanSpeed.Is(PumpSpeed.Off));

            // Act
            // Assert
            var ex = Assert.Throws <InvalidOperationException>(() => fuzzyRule.Build());

            this.output.WriteLine(ex.Message);
        }
Example #14
0
        internal void WithWeight_SetsWeightToExpectedValue()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            var condition = ConditionBuilder
                            .If(waterTemp.Is(WaterTemp.Boiling))
                            .WithWeight(0.5)
                            .Build();

            // Act
            condition.SetWeight(UnitInterval.Create(0.5));

            // Assert
            Assert.Equal(0.5, condition.Weight.Value);
        }
Example #15
0
        internal void ToString_ReturnsExpectedString()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();
            var premise   = new Premise(
                LogicOperators.If(),
                waterTemp,
                LogicOperators.Is(),
                FuzzyState.Create(WaterTemp.Cold));

            // Act
            var result = premise.ToString();

            // Assert
            Assert.Equal("IF WaterTemp IS cold", result);
        }
Example #16
0
        internal void Evaluate_WhenInvalidData_Throws()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            var condition = ConditionBuilder.If(waterTemp.Is(WaterTemp.Boiling)).Build();

            var dataPoint = new DataPoint(Label.Create(InputVariable.Pressure), 3000);

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

            // Act
            // Assert
            Assert.Throws <InvalidOperationException>(() => condition.Evaluate(data, new FuzzyEvaluator()));
        }
Example #17
0
        internal void ToString_ReturnsExpectedString()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            var condition = ConditionBuilder
                            .If(waterTemp.Not(WaterTemp.Boiling))
                            .And(waterTemp.Not(WaterTemp.Freezing))
                            .And(waterTemp.Not(WaterTemp.Frozen))
                            .Build();

            // Act
            var result = condition.ToString();

            // Assert
            Assert.Equal("IF WaterTemp NOT boiling AND WaterTemp NOT freezing AND WaterTemp NOT frozen", result);
        }
Example #18
0
        internal void Build_WhenConditionsAndConclusionsAreValid_ReturnsExpectedRuzzyRule()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();
            var pumpSpeed = StubLinguisticVariableFactory.PumpSpeed();

            // Act
            var fuzzyRule = new FuzzyRuleBuilder(PumpSpeedRule.Rule0)
                            .If(waterTemp.Is(WaterTemp.Warm))
                            .And(waterTemp.Not(WaterTemp.Frozen))
                            .Then(pumpSpeed.Is(PumpSpeed.Moderate))
                            .Build();

            // Assert
            Assert.Equal(Label.Create(PumpSpeedRule.Rule0), fuzzyRule.Label);
            Assert.Equal(2, fuzzyRule.Conditions.Count);
            Assert.Equal(1, fuzzyRule.Conclusions.Count);
        }
Example #19
0
        internal void Build_ValidConditionsAndConclusions_ReturnsExpectedFuzzyRule()
        {
            // Arrange
            var waterTemp = StubLinguisticVariableFactory.WaterTemp();

            // Act
            var rule1 = new FuzzyRuleBuilder(PumpSpeedRule.Rule0)
                        .If(ConditionBuilder
                            .If(waterTemp.Not(WaterTemp.Cold))
                            .And(waterTemp.Not(WaterTemp.Freezing))
                            .And(waterTemp.Not(WaterTemp.Frozen)))
                        .And(ConditionBuilder.If(waterTemp.Is(WaterTemp.Warm)))
                        .Or(ConditionBuilder.If(waterTemp.Not(WaterTemp.Frozen)).And(waterTemp.Not(WaterTemp.Boiling)))
                        .Then(waterTemp.Not(WaterTemp.Boiling))
                        .Then(waterTemp.Not(WaterTemp.Frozen))
                        .Build();

            // Assert
            Assert.Equal(3, rule1.Conditions.Count);
            Assert.Equal(2, rule1.Conclusions.Count);
        }