/// <summary> /// Композиция /// </summary> private UnionOfTerms Composite(Problem problem, double[] aggregationResult) { var result = new UnionOfTerms(); InMemoryLogger.PrintMessage("Начало процедуры композиции"); int i = 0; foreach (var rule in problem.ProblemConditions.Rules) { var term = rule.Conclusion.Term.Clone(); term.AccessoryFunc.SetActivatedValue(aggregationResult[i]); result.Add(term); i++; } InMemoryLogger.PrintMessage("Процедура композиции завершена"); return(result); }
/// <summary> /// Дефаззификация /// </summary> private double Defuzzificate(UnionOfTerms compositionResult) { double x, y1 = 0.0, y2 = 0.0, step = 0.01; InMemoryLogger.PrintMessage("Начало процедуры дефаззификации"); for (x = 0.0; x <= 1.0; x += step) { y1 += x * compositionResult.MaxValue(x); } for (x = 0.0; x <= 1.0; x += step) { y2 += compositionResult.MaxValue(x); } InMemoryLogger.PrintMessage("Результат: " + (y1 / y2)); InMemoryLogger.PrintMessage("Процедура дефаззификации завершена"); return(y1 / y2); }