Ejemplo n.º 1
0
        void AddSugenoFuzzyRule(
            SugenoFuzzySystem fs,
            FuzzyVariable fv1,
            FuzzyVariable fv2,
            SugenoVariable sv,
            string value1,
            string value2,
            string result)
        {
            SugenoFuzzyRule rule = fs.EmptyRule();

            rule.Condition.Op = OperatorType.And;
            rule.Condition.ConditionsList.Add(rule.CreateCondition(fv1, fv1.GetTermByName(value1)));
            rule.Condition.ConditionsList.Add(rule.CreateCondition(fv2, fv2.GetTermByName(value2)));
            rule.Conclusion.Var  = sv;
            rule.Conclusion.Term = sv.GetFuncByName(result);
            fs.Rules.Add(rule);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Combine results of functions and rule evaluation
        /// </summary>
        /// <param name="ruleWeights">Rule weights (results of evaluation)</param>
        /// <param name="functionResults">Result of functions evaluation</param>
        /// <returns>Result of calculations</returns>
        public Dictionary <SugenoVariable, double> CombineResult(Dictionary <SugenoFuzzyRule, double> ruleWeights, Dictionary <SugenoVariable, Dictionary <ISugenoFunction, double> > functionResults)
        {
            Dictionary <SugenoVariable, double> numerators   = new Dictionary <SugenoVariable, double>();
            Dictionary <SugenoVariable, double> denominators = new Dictionary <SugenoVariable, double>();
            Dictionary <SugenoVariable, double> results      = new Dictionary <SugenoVariable, double>();

            //
            // Calculate numerator and denominator separately for each output
            //
            foreach (SugenoVariable var in Output)
            {
                numerators.Add(var, 0.0);
                denominators.Add(var, 0.0);
            }

            foreach (SugenoFuzzyRule rule in ruleWeights.Keys)
            {
                SugenoVariable var = rule.Conclusion.Var;
                double         z   = functionResults[var][rule.Conclusion.Term];
                double         w   = ruleWeights[rule];

                numerators[var]   += z * w;
                denominators[var] += w;
            }

            //
            // Calculate the fractions
            //
            foreach (SugenoVariable var in Output)
            {
                if (denominators[var] == 0.0)
                {
                    results[var] = 0.0;
                }
                else
                {
                    results[var] = numerators[var] / denominators[var];
                }
            }

            return(results);
        }