private void создатьToolStripMenuItem_Click(object sender, EventArgs e) { double left = 0; double right = 0; double step = 0; ContinuousFuzzySet <double, double> ConSet = null; DiscreteFuzzyStringSet DiscSet = null; Params p = new Params(); if (radioButton2.Checked) { try { if (comboBox1.SelectedIndex == 1 || comboBox1.SelectedIndex == 0) { p.TryParse(textBox5.Text, textBox6.Text); } else if (comboBox1.SelectedIndex == 2) { p.TryParse(textBox5.Text, textBox6.Text, textBox7.Text); } } catch (Exception) { MessageBox.Show("Неверный аргумент!", "Ошибка"); return; } try { Double.TryParse(textBox1.Text, out left); Double.TryParse(textBox2.Text, out right); Double.TryParse(textBox3.Text, out step); } catch (Exception) { MessageBox.Show("Неверный аргумент!", "Ошибка"); return; } ConSet = CreateContinuousSet(left, right, step, p.a, p.b, p.c); ElementsCache.Add(ConSet); } else if (radioButton1.Checked) { string[] src = textBox4.Text.Split(new string[] { " ", ".", ",", ":", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); if (comboBox2.SelectedIndex < 0 && comboBox3.SelectedIndex < 0 && comboBox4.SelectedIndex < 0 && comboBox1.SelectedIndex != 3) { MessageBox.Show("Неверный аргумент!", "Ошибка"); return; } DiscSet = CreateDiscreteStringSet(comboBox2.SelectedIndex, comboBox3.SelectedIndex, comboBox4.SelectedIndex, src); ElementsCache.Add(DiscSet); } listBox1.Items.Add("set #" + ElementsCache.Count.ToString()); }
Accumulation(ContinuousFuzzySet <double, double>[] sets) { ContinuousFuzzySet <double, double> set = sets[0]; for (int i = 1; i < sets.Length; i++) { set = FuzzyOperations.SimpleUnion(set, sets[i]); } return(set); }
private void ViewSet(ContinuousFuzzySet <string, double> set, Chart chart1) { chart1.Series.Clear(); chart1.Series.Add("Fuzzy Set"); chart1.Series["Fuzzy Set"].ChartType = SeriesChartType.Column; IEnumerator <KeyValuePair <string, double> > it = set.GetEnumerator(); while (it.MoveNext()) { KeyValuePair <string, double> pair = it.Current; chart1.Series[0].Points.AddXY(pair.Key, pair.Value); } }
public double Process(double[] InputData) { if (rules == null) { throw new Exception("Rules are not defined!"); } double[] y = Fuzzification(InputData); ContinuousFuzzySet <double, double>[] sets = ActivateConclusion(y); ContinuousFuzzySet <double, double> ResultSet = Accumulation(sets); double result = Defuzzification(ResultSet); return(result); }
private void ViewSet(ContinuousFuzzySet <double, double> set, Chart chart1) { chart1.Series.Clear(); chart1.Series.Add("Fuzzy Set"); chart1.Series["Fuzzy Set"].ChartType = SeriesChartType.Spline; chart1.Series["Fuzzy Set"].BorderDashStyle = ChartDashStyle.Solid; chart1.Series["Fuzzy Set"].BorderWidth = 3; IEnumerator <KeyValuePair <double, double> > it = set.GetEnumerator(); while (it.MoveNext()) { KeyValuePair <double, double> pair = it.Current; chart1.Series[0].Points.AddXY(pair.Key, pair.Value); } }
public Term Activate(Term t) { Dictionary <double, double> .Enumerator it = t.FuzzySet.GetEnumerator(); List <KeyValuePair <double, double> > list = new List <KeyValuePair <double, double> >(); while (it.MoveNext()) { double x = it.Current.Key; double y = SemanticRule(t.FuzzySet[x]); list.Add(new KeyValuePair <double, double>(x, y)); } ContinuousFuzzySet <double, double> FuzzySet = new ContinuousFuzzySet <double, double>(list); return(new Term(Quantifier + " " + t.Name, FuzzySet)); }
private void графикToolStripMenuItem_Click(object sender, EventArgs e) { chart1.ResetAutoValues(); int id = listBox1.SelectedIndex; ContinuousFuzzySet <double, double> ConSet = null; DiscreteFuzzyStringSet DiskSet = null; if (ElementsCache.GetAt(id).GetType() == typeof(ContinuousFuzzySet <double, double>)) { ConSet = (ContinuousFuzzySet <double, double>)ElementsCache.GetAt(id); ViewSet(ConSet, chart1); } else if (ElementsCache.GetAt(id).GetType() == typeof(DiscreteFuzzyStringSet)) { DiskSet = (DiscreteFuzzyStringSet)ElementsCache.GetAt(id); ViewSet(DiskSet, chart1); } }
private double Defuzzification(ContinuousFuzzySet <double, double> set) { double s1 = 0; double s2 = 0; Dictionary <double, double> .Enumerator it = set.GetEnumerator(); while (it.MoveNext()) { s1 += it.Current.Key * it.Current.Value; s2 += it.Current.Value; } if (s2 == 0) { return(0.5 * (set.Keys.Max() + set.Keys.Min())); } else { return(s1 / s2); } }
ActivateConclusion(double[] y) { int i = 0; ContinuousFuzzySet <double, double>[] sets = new ContinuousFuzzySet <double, double> [y.Length]; foreach (Rule rule in rules) { int j = rule.Conclusion.TermId; ContinuousFuzzySet <double, double> S0 = rule.Conclusion.Variable.Terms[j].FuzzySet; Dictionary <double, double> .Enumerator it = S0.GetEnumerator(); List <KeyValuePair <double, double> > list = new List <KeyValuePair <double, double> >(); while (it.MoveNext()) { double key = it.Current.Key; double value = Math.Min(y[i], it.Current.Value); list.Add(new KeyValuePair <double, double>(key, value)); } sets[i++] = new ContinuousFuzzySet <double, double>(list); } return(sets); }
private ContinuousFuzzySet <double, double> CreateContinuousSet(double left, double right, double step, double a, double b, double c) { ContinuousFuzzySet <double, double> set = null; switch (comboBox1.SelectedIndex) { case (int)FunctionTypes.SFunction: FuzzySetCreator <double, double> .MemberShipFunction3 Sfunc = new FuzzySetCreator <double, double> .MemberShipFunction3(FuzzyHelper.SFunction); set = FuzzySetCreator <double, double> .CreateInstance(Sfunc, left, right, step, a, b); break; case (int)FunctionTypes.ZFunction: FuzzySetCreator <double, double> .MemberShipFunction3 Zfunc = new FuzzySetCreator <double, double> .MemberShipFunction3(FuzzyHelper.ZFunction); set = FuzzySetCreator <double, double> .CreateInstance(Zfunc, left, right, step, a, b); break; case (int)FunctionTypes.PFunction: FuzzySetCreator <double, double> .MemberShipFunction4 Pfunc = new FuzzySetCreator <double, double> .MemberShipFunction4(FuzzyHelper.PFunction); set = FuzzySetCreator <double, double> .CreateInstance(Pfunc, left, right, step, a, b, c); break; case (int)FunctionTypes.Custom: List <KeyValuePair <double, double> > DataList = CreateContiniousSet(left, right, step, textBox4); set = FuzzySetCreator <double, double> .CreateInstance(DataList); break; } return(set); }
public Term(string name, ContinuousFuzzySet <double, double> set) { this.name = name; this.set = set; }