/** * Defuzzify a set using the Mean of Maximums aproximation function * if it fails it returns -1 (which may be a valid answer) */ /// <summary> /// Defizzify a FuzzySet and get its MEAN OF MAXIMUMS /// </summary> /// <param name="fs"></param> /// <returns>Mean of Maximums</returns> public static double DeFuzzifyMOM(FuzzySet fs) { if (fs == null) { return -1; } if (fs.Invalid()) { fs.Err = 10; return -1; } double m = fs.GetMaxSetValue(); double sumTop = 0; double sumBottom = 0; double w; int i; for (i = 0; i < fs.GetNumPoints(); i++) { if (AEqual(fs.SetValue[i], m)) { w = fs.WorldValue[i]; sumTop = sumTop + w; sumBottom = sumBottom + 1; } } if (AEqual(0, sumBottom)) { fs.Err = 15; return -1; } return sumTop / sumBottom; }