示例#1
0
        public double Defuzzify(string flvName, DefuzzifyType type)
        {
            // Clear DOMs of all consequents.
            SetConfidencesOfConsequentsToZero();

            for (int i = 0; i < Rules.Count; i++)
            {
                Console.WriteLine($"{Rules[i]}");
                Rules[i].Calculate();
            }

            Console.WriteLine();

            // custom code - get maximum consequences of ruleset
            // it's trash though, fix later
            // uses the MaxAV method using pure garbage code that.. works
            // pointers and C# just don't mix...

            List <OutputSet> outputSet = new List <OutputSet>();

            for (int i = 0; i < Rules.Count; i++)
            {
                FuzzyTermSet consequence = (FuzzyTermSet)Rules[i].Consequence;
                string       name        = consequence.VariableName;
                double       value       = consequence.GetDOM();
                double       represents  = consequence.Set.Represents;

                if (outputSet.Exists(os => os.Name == name))
                {
                    outputSet.Find(os => os.Name == name).SetMax(value);
                }
                else
                {
                    outputSet.Add(new OutputSet(name, value, represents));
                }
            }

            double calculatedMaxAV = 0.0;
            double divisor         = 0.0;

            foreach (OutputSet set in outputSet)
            {
                calculatedMaxAV += (set.RepresentativeValue * set.Value);
                divisor         += set.Value;
            }
            calculatedMaxAV /= divisor;
            return(calculatedMaxAV);
        }
示例#2
0
        public double DeFuzzify(string flv, DefuzzifyType method)
        {
            ResetConfidenceOfConsequence();

            foreach (FuzzyRule rule in _rules)
            {
                rule.Calculate();
            }

            switch (method)
            {
            case DefuzzifyType.MaxAv:
                return _variables[flv].DeFuzzifyMaxAv();
            }
            return 0;
        }