コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
 public Term(string name, ContinuousFuzzySet <double, double> set)
 {
     this.name = name;
     this.set  = set;
 }