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); }
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; }