private void Accept_Classificator_Click(object sender, RoutedEventArgs e)
        {
            if (settings.instanceOrType == 0)
            {
                MessageBox.Show("Выберите тип заполнения классификатора - по типу или по экземпляру.", "Некорректные данные!");
                return;
            }

            storage.instanceOrType = settings.instanceOrType;
            storage.classificator.Clear();
            foreach (var item in ruleItems)
            {
                Classificator classificator = new Classificator();
                classificator.BuiltInName  = item.builtInCategoryName;
                classificator.FamilyName   = item.familyNameValue;
                classificator.TypeName     = item.typeNameValue;
                classificator.paramsValues = item.valuesOfParams.Select(x => x.paramValue).ToList();
                storage.classificator.Add(classificator);
            }
            storage.instanseParams.Clear();
            storage.instanseParams.AddRange(settings.paramNameItems.Select(x => x.paramName).ToList());
            checkedExit = false;
            this.Close();
            classificatorForm.Show();
        }
Beispiel #2
0
        public void DeleteClassificator(int id, string host)
        {
            using (IUnitOfWork work = UnitOfWork.Begin())
            {
                IEnumerable <ClassificatorValue> cv1 = _classificatorValueRepository.FindByClassificatorId(id);

                foreach (var obj in cv1)
                {
                    _classificatorValueRepository.Delete(obj);
                }


                work.Commit();

                Classificator c = _classificatorRepository.FindById(id);

                var logClassificatorEntity = new ClassificatorEventEntity(c);

                _classificatorRepository.Delete(c);

                work.Commit();

                _logService.CreateLog(CurrentUser.Get().Id, "web", flag, host, CurrentUser.Get().CompanyId, logClassificatorEntity.GetDeleteMessage());
            }
        }
Beispiel #3
0
        public void Tests()
        {
            testedClassificator = new RadialNetwork(12, 2);
            Console.WriteLine("Instance crated");
            Assert.IsNotNull(testedClassificator);
            dictionary = new DictionaryFake(100);
            dictionary.Init(null);
            Console.WriteLine("Instance crated");
            Assert.IsNotNull(testedClassificator);
            DocumentClass.AddClass("zero");
            DocumentClass.AddClass("jeden");
            //testedClassificator.Learn(dictionary);
            int counter = 0;
            int total   = 100;

            for (int i = 0; i < total; i++)
            {
                double[] test = GenTestVector();
                Console.WriteLine(test[0] + " " + test[1]);
                int desired = desiredOutput(test);
                int get     = testedClassificator.Classificate(test);
                Console.WriteLine("Spodzienawy wynik: " + desired);
                Console.WriteLine("Otrzymany wynik: " + get);
                if (get == desired)
                {
                    Console.WriteLine("---------------------------------------OK!");
                    counter++;
                }
                Console.WriteLine();
            }
            Console.WriteLine("Skutecznosc rzedu: " + (double)counter / total * 100);
        }
Beispiel #4
0
        public void CalculateResultForRules(FuzzyTable testData, List <Rule> rules, ConfusionMatrix confusionMatrix, double tolerance = .5)
        {
            Classificator classificator = new Classificator();

            for (int i = 0; i < testData.GetTable().Rows.Count; i++)
            {
                var predictedResult         = classificator.Classify(testData, i, rules);
                var predicterPositiveResult = predictedResult[testData.PositiveColumn.Id];
                var predicterNegativeResult = predictedResult[testData.NegativeColumn.Id];
                var actualPositiveResult    = testData.GetPositiveColumn(i);
                var actualNegativeResult    = testData.GetNegativeColumn(i);

                if (Math.Abs(predicterPositiveResult - actualPositiveResult) < tolerance)
                {
                    confusionMatrix.TruePositiveCount++;
                }
                else
                {
                    confusionMatrix.FalseNegativeCount++;
                }

                if (Math.Abs(predicterNegativeResult - actualNegativeResult) < tolerance)
                {
                    confusionMatrix.TrueNegativeCount++;
                }
                else
                {
                    confusionMatrix.FalsePositiveCount++;
                }
            }
        }
    internal T Do <T>(params object[] f) where T : FBCompositor
    {
        this.children = new BNode[f.Length];
        for (int i = 0; i < f.Length; i++)
        {
            switch (Classificator.Classificate(f[i]))
            {
            case Classificator.NodeValue.BNode:
                children[i] = (BNode)f[i];
                break;

            case Classificator.NodeValue.FuncStatus:
                children[i] = new FBNode().SetAction <FBNode>((Func <FBStatus>)f[i]).Final(name + "_fnstatus");
                break;

            case Classificator.NodeValue.FuncBool:
                children[i] = new Encapsulator().Final <Encapsulator>(name + "_fn", (Func <bool>)f[i]);
                break;

            default:
                Debug.Log("undefined classification");
                break;
            }
        }
        return((T)this);
    }
Beispiel #6
0
        public void EditClassificator(int id, string name, string comment, string host)
        {
            using (IUnitOfWork work = UnitOfWork.Begin())
            {
                Classificator c = _classificatorRepository.FindById(id);
                var           logClassificatorEntity = new ClassificatorEventEntity(c);

                c.Description = name;
                c.Comments    = comment;

                work.Commit();
                logClassificatorEntity.SetNewClassificator(c);

                _logService.CreateLog(CurrentUser.Get().Id, "web", flag, host, CurrentUser.Get().CompanyId, logClassificatorEntity.GetEditMessage());
            }
        }
    internal T Do <T>(object f) where T : FBDecorator
    {
        switch (Classificator.Classificate(f))
        {
        case Classificator.NodeValue.BNode:
            child = (BNode)f;
            break;

        case Classificator.NodeValue.FuncStatus:
            child = new FBNode().SetAction <FBNode>((Func <FBStatus>)f);
            break;

        default:
            Debug.Log("undefined classification");
            break;
        }
        return((T)this);
    }
Beispiel #8
0
        public void CreateClassificator(string name, string comment, string host)
        {
            using (IUnitOfWork work = UnitOfWork.Begin())
            {
                Classificator c = DomainObjectFactory.CreateClassificator();

                c.Description = name;
                c.Comments    = comment;

                _classificatorRepository.Add(c);

                work.Commit();

                var classificatorLogEntity = new ClassificatorEventEntity(c);

                _logService.CreateLog(CurrentUser.Get().Id, "web", flag, host, CurrentUser.Get().CompanyId,
                                      classificatorLogEntity.GetCreateMessage());
            }
        }
Beispiel #9
0
        private void Open(object sender, RoutedEventArgs e)
        {
            for_listbox3.Clear();
            ListBox2.SelectedIndex = -1;
            lst.Clear();
            imgs.Clear();
            Imgs.Clear();
            Names_of_files.Clear();
            ListBox3.ItemsSource = for_listbox3;
            lst_for_class        = new List <int>();
            for_listbox2         = new ObservableCollection <string>();
            foreach (var elem in Classificator.classLabels)
            {
                lst_for_class.Add(0);
                for_listbox2.Add(elem + " ");
            }
            ListBox2.ItemsSource = for_listbox2;
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            var res = dialog.ShowDialog();

            if (res == System.Windows.Forms.DialogResult.OK)
            {
                folderName    = dialog.SelectedPath;
                Rec.IsEnabled = true;
            }
            cl = new Classificator(folderName);

            int k = 0;
            IEnumerable <string> dir = Directory.EnumerateFiles(folderName, "*.png").Concat(Directory.EnumerateFiles(folderName, "*.jpg")).ToList();

            foreach (var item in dir)
            {
                Imgs.Add(new Img(item, ""));
                map_to_class[item] = k;
                k++;
            }
            foreach (var elem in Classificator.classLabels)
            {
                map_to_image[elem] = new List <string>();
            }
        }
Beispiel #10
0
        /// <summary>
        /// !!! Перед использование не забудь вызвать первый раз FCService.Init()
        /// </summary>
        private static IClassificator GetClassificator(Entity ent, IClassTypeService classService)
        {
            IClassificator res = null;
            FCEntProps     fcEntProps;

            if (FCService.GetEntityProperties(ent.Id, out fcEntProps))
            {
                ClassType clType;
                if (classService == null)
                {
                    clType = new ClassType(fcEntProps.Class, fcEntProps.Class, null, 0);
                }
                else
                {
                    clType = classService?.GetClassType(fcEntProps.Class);
                }

                // Если класс проектируемого здания или есть параметр высоты, то это здание ???!!! Сомнительно. Нужна более строгая идентификайция зданий
                var height = fcEntProps.GetPropertyValue <double>(Building.PropHeight, 0);
                if (height != 0 || Building.IsBuildingClass(clType.ClassName))
                {
                    var building = new Building(ent, height, fcEntProps.GetProperties(), clType);
                    res = building;
                }
                else
                {
                    double area = GetArea(ent, clType.UnitFactor, clType.ClassName);
                    if (area != 0)
                    {
                        var classificator = new Classificator(ent, clType, area);
                        res = classificator;
                    }
                }
            }
            return(res);
        }
Beispiel #11
0
        public void StartRec(object sender, RoutedEventArgs e)
        {
            Rec.IsEnabled  = false;
            Stop.IsEnabled = !Rec.IsEnabled;

            Names_of_files = new List <string>();
            IEnumerable <string> dir = Directory.EnumerateFiles(folderName, "*.png").Concat(Directory.EnumerateFiles(folderName, "*.jpg")).ToList();

            foreach (var elem in dir)
            {
                var  byte_rep = ImageToByteArray(elem);
                bool flag     = false;
                foreach (var item in db.Images.Include(i => i.Det))
                {
                    var tre = item.Det;
                    flag = GetHashSHA1(item.Det.ByteRepresent) == GetHashSHA1(byte_rep);
                    if (flag)
                    {
                        if (item.Det.ByteRepresent.SequenceEqual <byte>(byte_rep))
                        {
                            break;
                        }
                        flag = false;
                    }
                }
                if (!flag)
                {
                    Names_of_files.Add(elem);
                }

                /*                    flag = GetHashSHA1(item.ByteRepresent) == GetHashSHA1(byte_rep);
                 *                  if (flag)
                 *                  {
                 *                      if (item.ByteRepresent.SequenceEqual<byte>(byte_rep))
                 *                      {
                 *                          break;
                 *                      }
                 *                      flag = false;
                 *                  }
                 *              }
                 *              if (!flag)
                 *              {
                 *                  Names_of_files.Add(elem);
                 *              }*/
            }
            if (Names_of_files.Count != 0)
            {
                //                cl = new Classificator(new List<string>());
                cl = new Classificator(Names_of_files);
                Thread thread1 = new Thread(() => cl.recognize());
                thread1.IsBackground = true;
                thread1.Start();
                Thread thread = new Thread(() =>
                {
                    func();
                }
                                           );
                thread.IsBackground = true;
                thread.Start();
            }
            Thread thread2 = new Thread(() =>
            {
                func_1();
            }
                                        );

            thread2.IsBackground = true;
            thread2.Start();
        }
Beispiel #12
0
        private static void DoResearch(Classificator classificator)
        {
            var data = GetDataLines();

            var curveInfos           = GetCurvesInfos(data);
            var classifiedCurveInfos = curveInfos.Select(curveInfo => new
            {
                curveInfo,
                curveClass = classificator.Classify(curveInfo)
            })
                                       .ToArray();

            var classesOfCurves = classifiedCurveInfos.GroupBy(info => info.curveInfo.DigitsCountOfFiledOrder)
                                  .OrderBy(g => g.Key)
                                  .Select(g =>
            {
                var classesInfo = g
                                  .AsEnumerable()
                                  .GroupBy(cci => cci.curveClass.ClassNumber)
                                  .OrderBy(gr => gr.Key)
                                  .Select(gr => new
                {
                    ClassNumber = gr.Key,
                    Count       = gr.Count()
                }).ToDictionary(x => x.ClassNumber, x => x.Count);

                return(new
                {
                    Dimension = g.Key,
                    ClassesInfo = classesInfo
                });
            })
                                  .ToArray();

            var classesNumber = classesOfCurves.Max(x => x.ClassesInfo.Count);
            var paddingLeft   = 8;

            Console.Write("Dim".PadLeft(paddingLeft, ' '));
            for (var i = 0; i < classesNumber; i++)
            {
                Console.Write($"#{i + 1}".PadLeft(paddingLeft, ' '));
            }

            Console.WriteLine();

            foreach (var classesOfCurve in classesOfCurves)
            {
                Console.Write($"{classesOfCurve.Dimension}".PadLeft(paddingLeft, ' '));
                for (var i = 0; i < classesNumber; i++)
                {
                    if (classesOfCurve.ClassesInfo.ContainsKey(i + 1))
                    {
                        Console.Write($"{classesOfCurve.ClassesInfo[i + 1]}".PadLeft(paddingLeft, ' '));
                    }
                    else
                    {
                        Console.Write("0".PadLeft(paddingLeft, ' '));
                    }
                }

                Console.WriteLine();
            }
        }
Beispiel #13
0
        private void ClassifierCategoriesForm_Load(object sender, EventArgs e)
        {
            // инициализация сомманды для считывания
            SQLiteCommand command = new SQLiteCommand();

            // определение подключения к БД
            command.Connection = new SQLiteConnection(_conection);
            // инициализация адаптера для считывания
            SQLiteDataAdapter adapter = new SQLiteDataAdapter();

            adapter.SelectCommand = command;

            #region Определение и заполнение таблиц, при необходимости

            // если таблице не присвоенно значение, то создать новую таблицу
            if (_classgroupTable == null)
            {
                _classgroupTable = Classgroup.CreateTable();
            }
            // если таблица новая (не имеет записей), то заполнить эту таблицу
            if (_classgroupTable.Rows.Count <= 0)
            {
                // назначить текст комманды считывания
                command.CommandText = Classgroup.GetSelectText();
                // заполнить таблицу
                adapter.Fill(_classgroupTable);
            }
            // если таблице не присвоенно значение, то создать новую таблицу
            if (_classificatorTable == null)
            {
                _classificatorTable = Classificator.CreateTable();
            }
            // если таблица новая (не имеет записей), то заполнить эту таблицу
            if (_classificatorTable.Rows.Count <= 0)
            {
                // назначить текст комманды считывания
                command.CommandText = Classificator.GetSelectText();
                // заполнить таблицу
                adapter.Fill(_classificatorTable);
            }
            // если таблице не присвоенно значение, то создать новую таблицу
            if (_classpercentTable == null)
            {
                _classpercentTable = Classpercent.CreateTable();
            }
            // если таблица новая (не имеет записей), то заполнить эту таблицу
            if (_classpercentTable.Rows.Count <= 0)
            {
                // назначить текст комманды считывания
                command.CommandText = Classpercent.GetSelectText();
                // заполнить таблицу
                adapter.Fill(_classpercentTable);
            }

            #endregion

            // создание объектов BindingSource
            _classgroupBS    = new BindingSource();
            _classificatorBS = new BindingSource();
            _classpercentBS  = new BindingSource();

            // Привязываем BindingSource-ы к таблицам
            _classgroupBS.DataSource    = _classgroupTable;
            _classificatorBS.DataSource = _classificatorTable;
            _classpercentBS.DataSource  = _classpercentTable;
            //_privilegeBS.DataSource = _privilegeTable;

            // отключаем автогенерацию столбцов в GridView-ерах
            this.classgroupView.AutoGenerateColumns    = false;
            this.classificatorView.AutoGenerateColumns = false;
            this.classpercentView.AutoGenerateColumns  = false;

            // Привязываем BindingSource-ы к отображателями
            this.classgroupView.DataSource    = _classgroupBS;
            this.classificatorView.DataSource = _classificatorBS;
            this.classpercentView.DataSource  = _classpercentBS;
            // назначение обработчиков событий при смене активных (выделенных) записей
            _classgroupBS.CurrentChanged    += new EventHandler(_classgroupBS_CurrentChanged);
            _classificatorBS.CurrentChanged += new EventHandler(_classificatorBS_CurrentChanged);
            // сделать активной первую запись
            _classificatorBS.MoveFirst();
        }
 public void SetNewClassificator(Classificator classificator)
 {
     Mapper.Map(classificator, NewValue);
 }
 public ClassificatorEventEntity(Classificator classificator)
 {
     OldValue = new ClassificatorEntity();
     NewValue = new ClassificatorEntity();
     Mapper.Map(classificator, OldValue);
 }