Exemplo n.º 1
0
        public void TestFuzzyRule()
        {
            IMemebershipFunction coldFx, warmFx, hotFx;

            this.GetMembershipFunctions(out coldFx, out warmFx, out hotFx);

            FuzzyVariable <Temperature> cold = new FuzzyVariable <Temperature>(Temperature.Cold, coldFx);
            FuzzyVariable <Temperature> warm = new FuzzyVariable <Temperature>(Temperature.Warm, warmFx);
            FuzzyVariable <Temperature> hot  = new FuzzyVariable <Temperature>(Temperature.Hot, hotFx);

            var exp = cold.AsExpression().And(warm).Or(hot.AsExpression().Not());
            FuzzyRule <Command> rule = new FuzzyRule <Command>(Command.Heat, exp);

            float         inputTemp = 10;
            FuzzyValueSet valueSet  = new FuzzyValueSet();

            valueSet.Set(cold.fX(inputTemp));
            valueSet.Set(warm.fX(inputTemp));
            valueSet.Set(hot.fX(inputTemp));
            // 0.6666 AND 0.3333 OR NOT 0.0

            var result = rule.Evaluate(valueSet);

            Assert.AreEqual(1.0f, result.membershipDegree, 0.000005f);
        }
Exemplo n.º 2
0
        public void FuzzyNot_01()
        {
            FuzzyValue <Temperature> val01 = new FuzzyValue <Temperature>(Temperature.Cold, 0.8f);
            FuzzyValue <Temperature> val02 = new FuzzyValue <Temperature>(Temperature.Warm, 0.25f);
            FuzzyValueSet            set   = new FuzzyValueSet();

            set.Set(val01);
            set.Set(val02);
            FuzzyNot exp    = new FuzzyNot(new FuzzyVariableExpression <Temperature>(Temperature.Cold));
            var      result = exp.Evaluate(set);

            Assert.AreEqual(0.2f, result, 0.000005);
        }
Exemplo n.º 3
0
        public void TestMaxAvDefuzzer()
        {
            var           desirability = this.GetDesirabilitySet();
            FuzzyValueSet mergedValues = new FuzzyValueSet();

            mergedValues.Set(new FuzzyValue <Desirability>(Desirability.Undesirable, 0.33f));
            mergedValues.Set(new FuzzyValue <Desirability>(Desirability.Desirable, 0.2f));
            mergedValues.Set(new FuzzyValue <Desirability>(Desirability.VeryDesirable, 0.67f));

            IDefuzzer <Desirability> defuzzer = new MaxAvDefuzzer <Desirability>();
            var result = defuzzer.Defuzze(desirability, mergedValues);

            Assert.AreEqual(60.625f, result, 0.0005f);
        }
Exemplo n.º 4
0
        public void TestFuzzySet_DiffEnum_A()
        {
            FuzzyValueSet            set     = new FuzzyValueSet();
            FuzzyValue <Temperature> value01 = new FuzzyValue <Temperature>()
            {
                linguisticVariable = Temperature.Hot, membershipDegree = 0.5f
            };
            FuzzyValue <Command> value02 = new FuzzyValue <Command>()
            {
                linguisticVariable = Command.Heat, membershipDegree = 1f
            };

            set.Set(value02);
            set.Set(value01);
            var result = set.Get(Temperature.Hot);

            Assert.AreEqual(Temperature.Hot, result.linguisticVariable);
            Assert.AreEqual(0.5f, result.membershipDegree);
        }
Exemplo n.º 5
0
        public void TestFuzzySet_Simple()
        {
            FuzzyValueSet            set   = new FuzzyValueSet();
            FuzzyValue <Temperature> value = new FuzzyValue <Temperature>()
            {
                linguisticVariable = Temperature.Hot, membershipDegree = 0.5f
            };

            set.Set(value);
            var result = set.Get(Temperature.Hot);

            Assert.AreEqual(Temperature.Hot, result.linguisticVariable);
            Assert.AreEqual(0.5f, result.membershipDegree);
        }
Exemplo n.º 6
0
        public void MergeValues(FuzzyValue <T>[] values, FuzzyValueSet mergedOutputs)
        {
            this.CollapseOutputs(values);
            float                  maxValue = 0.0f;
            FuzzyValue <T>         value;
            List <FuzzyValue <T> > duplicateList = null;

            for (int i = 0; i < this.outputEnumValues.Length; i++)
            {
                maxValue      = 0.0f;
                duplicateList = this.duplicateOutputs[EnumKey.From(this.outputEnumValues[i])];
                for (int j = 0; j < duplicateList.Count; j++)
                {
                    value = duplicateList[j];
                    if (value.membershipDegree > maxValue) //Or-ing outputs
                    {
                        maxValue = value.membershipDegree;
                    }
                }
                mergedOutputs.Set(new FuzzyValue <T>(this.outputEnumValues[i], maxValue));
                duplicateList.Clear();
            }
        }