コード例 #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);
        }
コード例 #2
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);
        }
コード例 #3
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);
        }