public static List <Term> GenerateTerms(LinguisticVariable var)
        {
            List <Term> terms = new List <Term>();

            for (int i = 0; i < var.Terms.Count; i++)
            {
                terms.Add(var.Terms[i]);
            }
            foreach (Rule rule in var.Rules)
            {
                foreach (Term term in var.Terms)
                {
                    terms.Add(rule.Activate(term));
                }
            }
            return(terms);
        }
Beispiel #2
0
        private void showToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double a = 5;
            double b = 50;
            double h = 1;

            List <KeyValuePair <double, double> >[] arr
                = new List <KeyValuePair <double, double> > [3];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = new List <KeyValuePair <double, double> >();
            }

            for (double x = a; x <= b; x += h)
            {
                arr[0].Add(new KeyValuePair <double, double>(x, SemanticRuleCold(x)));
                arr[1].Add(new KeyValuePair <double, double>(x, SemanticComfortable(x)));
                arr[2].Add(new KeyValuePair <double, double>(x, SemanticHot(x)));
            }

            List <Term> terms = new List <Term>();

            terms.Add(new Term("Холодно", new FuzzySets.ContinuousFuzzySet <double, double>(arr[0])));
            terms.Add(new Term("Комфортно", new FuzzySets.ContinuousFuzzySet <double, double>(arr[1])));
            terms.Add(new Term("Жарко", new FuzzySets.ContinuousFuzzySet <double, double>(arr[2])));

            List <Rule> rules = new List <Rule>();

            rules.Add(new Rule("Не", new Rule.SemanticRuleDelegate(SemanticRule1)));
            rules.Add(new Rule("Очень", new Rule.SemanticRuleDelegate(SemanticRule2)));
            rules.Add(new Rule("Более-менее", new Rule.SemanticRuleDelegate(SemanticRule3)));

            LinguisticVariable var      = new LinguisticVariable("Температура в комнате", terms, rules);
            List <Term>        NewTerms = LinguisticVariableHelper.GenerateTerms(var);

            chart1.Series.Clear();
            chart1.ResetAutoValues();
            for (int i = 0; i < 3; i++)
            {
                chart1.Series.Add(NewTerms[i].Name);
                chart1.Series[NewTerms[i].Name].ChartType   = SeriesChartType.Spline;
                chart1.Series[NewTerms[i].Name].BorderWidth = 3;
                Dictionary <double, double> .Enumerator it
                    = NewTerms[i].FuzzySet.GetEnumerator();
                while (it.MoveNext())
                {
                    chart1.Series[NewTerms[i].Name].Points.AddXY(it.Current.Key, it.Current.Value);
                }
            }

            chart2.Series.Clear();
            chart2.ResetAutoValues();
            for (int i = 3; i < 6; i++)
            {
                chart2.Series.Add(NewTerms[i].Name);
                chart2.Series[NewTerms[i].Name].ChartType   = SeriesChartType.Spline;
                chart2.Series[NewTerms[i].Name].BorderWidth = 3;
                Dictionary <double, double> .Enumerator it
                    = NewTerms[i].FuzzySet.GetEnumerator();
                while (it.MoveNext())
                {
                    chart2.Series[NewTerms[i].Name].Points.AddXY(it.Current.Key, it.Current.Value);
                }
            }

            chart3.Series.Clear();
            chart3.ResetAutoValues();
            for (int i = 6; i < 9; i++)
            {
                chart3.Series.Add(NewTerms[i].Name);
                chart3.Series[NewTerms[i].Name].ChartType   = SeriesChartType.Spline;
                chart3.Series[NewTerms[i].Name].BorderWidth = 3;
                Dictionary <double, double> .Enumerator it
                    = NewTerms[i].FuzzySet.GetEnumerator();
                while (it.MoveNext())
                {
                    chart3.Series[NewTerms[i].Name].Points.AddXY(it.Current.Key, it.Current.Value);
                }
            }

            chart4.Series.Clear();
            chart4.ResetAutoValues();
            for (int i = 9; i < NewTerms.Count; i++)
            {
                chart4.Series.Add(NewTerms[i].Name);
                chart4.Series[NewTerms[i].Name].ChartType   = SeriesChartType.Spline;
                chart4.Series[NewTerms[i].Name].BorderWidth = 3;
                Dictionary <double, double> .Enumerator it
                    = NewTerms[i].FuzzySet.GetEnumerator();
                while (it.MoveNext())
                {
                    chart4.Series[NewTerms[i].Name].Points.AddXY(it.Current.Key, it.Current.Value);
                }
            }
        }