static void Main(string[] args) { var points = new LinguisticType("Рейтинговые баллы"); points.CreateTerm("Мало", 20, 5, TermType.Left); points.CreateTerm("Средне", 40, 20); points.CreateTerm("Много", 70, 10, TermType.Right); var skips = new LinguisticType("Пропуски"); skips.CreateTerm("Мало", 0, 10, TermType.Left); skips.CreateTerm("Средне", 5, 5); skips.CreateTerm("Много", 10, 10, TermType.Right); var studentPoints = points.CreateVariable("Баллы студента"); studentPoints.Value = points.GetValue(10.0); var studentSkips = skips.CreateVariable("Пропуски студента"); studentSkips.Value = skips.GetValue(20.0); var statement1 = new OrStatement( new AtomicStatement(studentPoints, points["Мало"]), new AtomicStatement(studentSkips, skips["Много"])); var call = new LinguisticType("Необходимость звонка", 0, 10); call.CreateTerm("Срочно звонить", 0, 4, TermType.Left); call.CreateTerm("Поговорить на собрании", 5, 4); call.CreateTerm("Не звонить", 10, 4, TermType.Right); var statement2 = new AndStatement( new AtomicStatement(studentPoints, points["Много"]), new AtomicStatement(studentSkips, skips["Мало"])); var ruleset = new MISORuleSet(call); ruleset.AddRule(statement1, call["Срочно звонить"]); ruleset.AddRule(statement2, call["Не звонить"]); Console.WriteLine(studentPoints); Console.WriteLine(studentSkips); Console.WriteLine(ruleset); Console.WriteLine(call.GetValue(ruleset.GetResult().Defuzzify())); }
private static LinguisticType LoadLinguisticType(string fileName) { var typeParameters = JObject.Parse(File.ReadAllText(fileName)); var name = (string)typeParameters["name"]; var minValue = typeParameters.ContainsKey("min") ? (double)typeParameters["min"] : 0; var maxValue = typeParameters.ContainsKey("max") ? (double)typeParameters["max"] : int.MaxValue; var terms = (JArray)typeParameters["terms"]; var type = new LinguisticType(name, minValue, maxValue); for (int i = 0; i < terms.Count; i++) { var term = terms[i]; var termName = (string)term["name"]; var termCenter = (double)term["center"]; var termWidth = (double)term["width"]; if (i == 0) { type.CreateTerm(termName, termCenter, termWidth, TermType.Left); } else if (i == terms.Count - 1) { type.CreateTerm(termName, termCenter, termWidth, TermType.Right); } else { type.CreateTerm(termName, termCenter, termWidth); } } return(type); }