コード例 #1
0
        public static void _FUZZY_SETS(List <Fuzzy_sets> _Fuzzy_sets, ref int i, ref string line)
        {
            Fuzzy_sets F_s = new Fuzzy_sets
            {
                Name = (Additional_functions.Trim(line, ref i, '(', ')')).Trim()
            };
            string temp = Additional_functions.ClearLine(ref i, line).Replace('\n', ' ').Replace('\r', ' ').Replace(" ", "");

            try{
                string[] Functions = temp.Split(',');
                int      k         = 0;
                foreach (var f in Functions)
                {
                    F_s.Functions.Add(new Trapeze(
                                          Additional_functions.ToLine(Additional_functions.Trim(f, ref k, '[', ']'), Additional_functions.Trim(f, ref k, '[', ']')),
                                          Additional_functions.ToLine(Additional_functions.Trim(f, ref k, '[', ']'), Additional_functions.Trim(f, ref k, '[', ']'))
                                          ));
                    k = 0;
                }
                _Fuzzy_sets.Add(F_s);
            }
            catch {
                Stored_Exceptions.Add(new Exception("Error: _Fuzzy_sets exception, fuzzy sets number " + _Fuzzy_sets.Count + 1));
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: FeyverkSoft/FuzzySets
        /// <summary>
        /// Считываем и распознаём множества из строкового представления
        /// </summary>
        /// <param name="text">Входная строка</param>
        public void read(String text)
        {
            Mass.Clear();                                                                                                              //очищаем предыдущее чтение
            Error_Log_textBox.Text += "[info] Начали распознавание множеств. ";                                                        //логи
            String[] _Temp = text.Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace(".", ",").Split(';'); //режем по строчкам множеств
            Error_Log_textBox.Text += "Предположительное количество: " + _Temp.Length + "\r\n";                                        //логи
            foreach (String s in _Temp)                                                                                                //пробегаем
            {
                try                                                                                                                    //отлов исключений и ошибок, {самая забагованная часть кода :D}
                {
                    Fuzzy_sets <Double> _F_Temp = ConvertTo_Fuzzy_Sets(s);                                                             //преобразуем строку в нечёткое
                    if (_F_Temp == null)
                    {
                        break;
                    }

                    #region Добавление недостающих элементов из унивёрсума

                    List <Double> Universum = Read_Universum(Universal.Text); //универсальное множество

                    foreach (var u in Universum)                              //Добавляем те элементы которые были в универсальном но неоказались в нашем множестве
                    {
                        bool flag = false;
                        foreach (Element_Fuzzy_sets <Double> _F in _F_Temp)
                        {
                            if (_F.Element == u)
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (!flag)
                        {
                            _F_Temp.Add(u);
                        }
                    }
                    #endregion

                    Mass.Add(new Fuzzy_sets <Double>(_F_Temp, _F_Temp.Name));
                    Error_Log_textBox.Text += "[info] Множество: \"" + _F_Temp.Name + "\" распознано \r\n";//логи
                }
                catch (System.Exception ex)
                {
                    Error_Log_textBox.Text += "[Ошибка] " + ex.Message + " произошла на \"" + s + "\" \r\n";//логи
                }
            }
            Error_Log_textBox.Text += "[info] Распознано: " + Mass.Count + " из " + _Temp.Length + "\r\n";//логи
        }
コード例 #3
0
ファイル: Graphics1.cs プロジェクト: FeyverkSoft/FuzzySets
        void plot(Fuzzy_sets <Double> e, Brush _Brush)
        {
            Int32 _Height = pictureBox1.Height, _Width = pictureBox1.Width; //размеры холста

            Point[] _p = new Point[e.Count];                                //линии
            //сортировка элементов по оси х
            Fuzzy_sets <Double> _T = e.Sort_from_Element;

            for (int i = 0; i < e.Count; i++)
            {
                _p[i].X = (int)((int)(e[i].Element * ((_Width / 2d) / MAX)));            //добавляем точку x для контура
                _p[i].Y = (int)((int)((e[i].Accessory_Function) * (_Height - 25) + 25)); //точку y для контура
                gr.FillEllipse(_Brush, (int)(e[i].Element * ((_Width / 2d) / MAX)) - 3, (int)((e[i].Accessory_Function) * (_Height - 25) + 22), 6, 6);
            }
            if (checkBox1.Checked)
            {
                gr.DrawLines(new Pen(_Brush), _p);
            }
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: FeyverkSoft/FuzzySets
        /// <summary>
        /// Преобразует указанную строку в нечеткое множество
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        Fuzzy_sets <Double> ConvertTo_Fuzzy_Sets(String s)
        {
            String[] Name_F = s.Split('=');                                                                            //отделяем название от описания
            Error_Log_textBox.Text += "[info] Распознаём: \"" + Name_F[0] + "\"\r\n";                                  //логи
            if (Name_F.Length != 2)                                                                                    //если длинна не 2 элемента, 0 элемент это имя множества, 1 элемент строка с описанием множества
            {
                Error_Log_textBox.Text += "[Ошибка] Неверный синтаксис описания множества: \"" + Name_F[0] + "\"\r\n"; //логи
                return(null);
            }

            String[]            Fuzzu_elem = Name_F[1].Split('+');               //режем строку с описанием множества по плюсам
            Fuzzy_sets <Double> _F_Temp    = new Fuzzy_sets <Double>(Name_F[0]); //текущее создаваемое нечёткое множество

            foreach (String el in Fuzzu_elem)                                    //добавляем все элементы множества
            {
                _F_Temp.Add(Convert.ToDouble(el.Split('/')[1]), Convert.ToDouble(el.Split('/')[0]));
            }
            return(_F_Temp);
        }
コード例 #5
0
ファイル: Form1.cs プロジェクト: FeyverkSoft/FuzzySets
        private void построитьГрафикToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CheckedListBox CheckedListBoxs = (contextMenuStrip1.SourceControl as CheckedListBox);

            if (CheckedListBoxs != null)
            {
                //Список множеств для отправки на постройку
                List <Fuzzy_sets <Double> > Selected_Items = new List <Fuzzy_sets <Double> >();
                foreach (var it in CheckedListBoxs.CheckedItems)//пробегаемся по отмеченным
                {
                    Fuzzy_sets <Double> _temp = (it as Fuzzy_sets <Double>);
                    if (_temp != null)//если преобразовалось то добавляем в список отправки
                    {
                        Selected_Items.Add(_temp);
                    }
                    else
                    {
                        String _temp1 = (it as String);
                        if (_temp1 != null)
                        {
                            try
                            {
                                Fuzzy_sets <Double> D = ConvertTo_Fuzzy_Sets(_temp1);
                                if (D != null)
                                {
                                    Selected_Items.Add(D);
                                }
                            }
                            catch
                            {
                                Error_Log_textBox.Text += "[Ошибка] Данное " + _temp1 + " вычисление нельзя построить!!!!. \r\n";//логи
                            };
                        }
                    }
                }
                if (Selected_Items.Count != 0)            //если количество больше 0
                {
                    new Graphics1(Selected_Items).Show(); //отправляем на построение
                }
            }
        }
コード例 #6
0
 public Fuzzy_sets(Fuzzy_sets F_s)
 {
     Name      = F_s.Name;
     Functions = new List <Trapeze>(F_s.Functions);
 }
コード例 #7
0
ファイル: Fuzzy_Object.cs プロジェクト: FeyverkSoft/FuzzySets
 /// <summary>
 /// Конструктор класса
 /// </summary>
 /// <param name="Fuzzy">Нечеткое множество</param>
 /// <param name="Name">Название множества</param>
 public Fuzzy_Object(Fuzzy_sets <T> Fuzzy, String Name = "")
 {
     this.Name = Name;
     this.Sets = Fuzzy;
 }