Beispiel #1
0
        public void Calculate_Simple_Norm_Result()
        {
            //Arrange
            var namesHelper           = Substitute.For <IEducationCharacteristicNamesHelper>();
            var educationLineSummator = Substitute.For <ISummator <EducationLine> >();
            var idealResult           = Substitute.For <IIdealResult>();

            var educationLineCharacterizer = new EducationLineCharacterizer(namesHelper, educationLineSummator,
                                                                            idealResult);
            var educationLine = new EducationLine();

            var characteristicNames = new List <string>
            {
                "Русский",
                "Математика",
                "Информатика"
            };

            namesHelper.Names.Returns(characteristicNames);

            var complicatedSum = new Dictionary <string, double>();

            complicatedSum.Add("Русский", 0.4);
            complicatedSum.Add("Математика", 0.6);
            complicatedSum.Add("Информатика", 0.8);
            educationLineSummator.CalculateSimpleSum(educationLine).Returns(complicatedSum);

            var complicatedIdealSum = new Dictionary <string, double>();

            complicatedIdealSum.Add("Русский", 0.4);
            complicatedIdealSum.Add("Математика", 0.6);
            complicatedIdealSum.Add("Информатика", 0.8);
            idealResult.GetSimpleResult().Returns(Task.FromResult(complicatedIdealSum));

            //Act
            var resultTask = educationLineCharacterizer.Calculate(educationLine, false);

            resultTask.Wait();

            //Assert
            var correctAnswer = new Dictionary <string, double>();

            correctAnswer.Add("Русский", 1);
            correctAnswer.Add("Математика", 1);
            correctAnswer.Add("Информатика", 1);
            foreach (var item in resultTask.Result)
            {
                Assert.AreEqual(correctAnswer[item.Key], item.Value);
            }
        }
Beispiel #2
0
        //Критерий совпадения кластеров - заполнение направлений во временный список
        private async Task InitialiseSecondCriterion()
        {
            var totalAvailLines = 0;
            var queryBuilder    = new QueryBuilder();
            var educationCharacteristicNamesHelper = new EducationCharacteristicNamesHelper(queryBuilder);
            var entrantSummator      = new EntrantSummator(educationCharacteristicNamesHelper);
            var entrantCharacterizer = new EntrantCharacterizer(educationCharacteristicNamesHelper, entrantSummator,
                                                                new IdealEntrantResult(entrantSummator, queryBuilder));

            _entrantCharacteristics = await entrantCharacterizer.Calculate(_entrant);

            _maxEntrantClusterSum = _entrantCharacteristics.Values.Max();
            var educationLineSummator = new EducationLineSummator(educationCharacteristicNamesHelper);
            var edLineClusterizer     = new EducationLineCharacterizer(educationCharacteristicNamesHelper,
                                                                       educationLineSummator, new IdealEducationLineResult(educationLineSummator, queryBuilder));

            foreach (var edLine in _educationLines)
            {
                var edLineAcceptable = true;

                var edLineResult = await edLineClusterizer.Calculate(edLine);

                if (!edLineResult.Any())
                {
                    edLineAcceptable = false;
                }

                foreach (var item in edLineResult)
                {
                    if (!_entrantCharacteristics.ContainsKey(item.Key))
                    {
                        edLineAcceptable = false;
                    }
                }

                if (edLineAcceptable == false)
                {
                    var educationLine = new SecondCriterionUnit();
                    educationLine.DatabaseId = Convert.ToInt32(edLine.Id);
                    educationLine.SecondCriterionAcceptable = false;
                    educationLine.LocalPriority             = 0;

                    _secondCriterionContainer.Add(educationLine);
                }
                else
                {
                    var educationLine = new SecondCriterionUnit();
                    educationLine.DatabaseId = Convert.ToInt32(edLine.Id);
                    educationLine.SecondCriterionAcceptable = true;
                    educationLine.MatrixId = totalAvailLines;
                    educationLine.EducationLineClusters = edLineResult;
                    educationLine.LocalPriority         = 0;

                    totalAvailLines++;

                    _secondCriterionContainer.Add(educationLine);
                }
            }
            _secondCriterionMatrixSize = totalAvailLines;

            if (_secondCriterionContainer.Count > _totalEducationLines)
            {
                _totalEducationLines = _secondCriterionContainer.Count;
            }
        }
Beispiel #3
0
        //Критерий совпадения кластеров - заполнение направлений во временный список
        private void InitialiseSecondCriterion()
        {
            int totalAvailLines   = 0;
            var edLineClusterizer = new EducationLineCharacterizer(new EducationLineCalculationOptions());

            educationLineClusters = edLineClusterizer.Calculate(_educationLine);
            maxEdLineClusterSum   = educationLineClusters.Values.Max();

            //foreach (var item in educationLineClusters)
            //{
            //    if (item.Value == null)
            //    {
            //        Console.WriteLine("Removing : " + item.Key);
            //        educationLineClusters.Remove(item.Key);
            //    }
            //}

            var entrantCharacterizer = new EntrantCharacterizer(new EntrantCalculationOptions(false, true, true, true, true, true));


            foreach (Entrant entrant in _entrants)
            {
                bool userAcceptable = true;

                var entrantCharacteristics = entrantCharacterizer.Calculate(entrant);
                if (entrantCharacteristics.Count() <= 0)
                {
                    userAcceptable = false;
                }

                //foreach (var item in entrantCharacteristics)
                //{
                //    if (item.Value == null)
                //    {
                //        Console.WriteLine("Removing : " + item.Key);
                //        entrantCharacteristics.Remove(item.Key);
                //    }
                //}

                foreach (var item in educationLineClusters)
                {
                    if (!entrantCharacteristics.ContainsKey(item.Key))
                    {
                        userAcceptable = false;
                    }
                }

                if (userAcceptable == false)
                {
                    SecondCriterionUnit Entant = new SecondCriterionUnit();
                    Entant.databaseId = Convert.ToInt32(entrant.Id);
                    Entant.secondCriterionAcceptable = false;
                    Entant.localPriority             = 0;

                    SecondCriterionContainer.Add(Entant);
                }
                else
                {
                    SecondCriterionUnit Entant = new SecondCriterionUnit();
                    Entant.databaseId = Convert.ToInt32(entrant.Id);
                    Entant.secondCriterionAcceptable = true;
                    Entant.matrixId        = totalAvailLines;
                    Entant.entrantClusters = entrantCharacteristics;
                    Entant.localPriority   = 0;

                    totalAvailLines++;

                    SecondCriterionContainer.Add(Entant);
                }
            }
            secondCriterionMatrixSize = totalAvailLines;
        }
Beispiel #4
0
        //Критерий совпадения кластеров - заполнение направлений во временный список
        private void InitialiseSecondCriterion()
        {
            int totalAvailLines = 0;

            entrantCharacteristics = new EntrantCharacterizer(new EntrantCalculationOptions(false, true, true, true, true, true)).Calculate(_entrant);

            //foreach (var item in entrantCharacteristics)
            //{
            //    if (item.Value == null)
            //    {
            //        Console.WriteLine("Removing : " + item.Key);
            //        entrantCharacteristics.Remove(item.Key);
            //    }
            //}

            maxEntrantClusterSum = entrantCharacteristics.Values.Max();
            var edLineClusterizer = new EducationLineCharacterizer(new EducationLineCalculationOptions());

            foreach (EducationLine EdLine in _educationLines)
            {
                bool edLineAcceptable = true;

                var edLineResult = edLineClusterizer.Calculate(EdLine);

                if (edLineResult.Count() <= 0)
                {
                    edLineAcceptable = false;
                }

                //foreach (var item in edLineResult)
                //{
                //    if (item.Value == null)
                //    {
                //        Console.WriteLine("Removing : " + item.Key);
                //        edLineResult.Remove(item.Key);
                //    }
                //}

                foreach (var item in edLineResult)
                {
                    if (!entrantCharacteristics.ContainsKey(item.Key))
                    {
                        edLineAcceptable = false;
                    }
                }

                if (edLineAcceptable == false)
                {
                    SecondCriterionUnit EducationLine = new SecondCriterionUnit();
                    EducationLine.databaseId = Convert.ToInt32(EdLine.Id);
                    EducationLine.secondCriterionAcceptable = false;
                    EducationLine.localPriority             = 0;

                    SecondCriterionContainer.Add(EducationLine);
                }
                else
                {
                    SecondCriterionUnit EducationLine = new SecondCriterionUnit();
                    EducationLine.databaseId = Convert.ToInt32(EdLine.Id);
                    EducationLine.secondCriterionAcceptable = true;
                    EducationLine.matrixId = totalAvailLines;
                    EducationLine.educationLineClusters = edLineResult;
                    EducationLine.localPriority         = 0;

                    totalAvailLines++;

                    SecondCriterionContainer.Add(EducationLine);
                }
            }
            secondCriterionMatrixSize = totalAvailLines;

            if (SecondCriterionContainer.Count > totalEducationLines)
            {
                totalEducationLines = SecondCriterionContainer.Count;
            }
        }
Beispiel #5
0
        //Критерий совпадения кластеров - заполнение направлений во временный список
        private async void InitialiseSecondCriterion()
        {
            var totalAvailLines = 0;
            var queryBuilder    = new QueryBuilder();
            var educationCharacteristicNamesHelper = new EducationCharacteristicNamesHelper(queryBuilder);
            var educationLineSummator = new EducationLineSummator(educationCharacteristicNamesHelper);
            var edLineClusterizer     = new EducationLineCharacterizer(educationCharacteristicNamesHelper,
                                                                       educationLineSummator, new IdealEducationLineResult(educationLineSummator, queryBuilder));

            _educationLineClusters = await edLineClusterizer.Calculate(_educationLine);

            _maxEdLineClusterSum = _educationLineClusters.Values.Max();

            var entrantSummator      = new EntrantSummator(educationCharacteristicNamesHelper);
            var entrantCharacterizer = new EntrantCharacterizer(educationCharacteristicNamesHelper, entrantSummator,
                                                                new IdealEntrantResult(entrantSummator, queryBuilder));

            foreach (var entrant in _entrants)
            {
                var userAcceptable = true;

                var entrantCharacteristics = await entrantCharacterizer.Calculate(entrant);

                if (!entrantCharacteristics.Any())
                {
                    userAcceptable = false;
                }

                foreach (var item in _educationLineClusters)
                {
                    if (!entrantCharacteristics.ContainsKey(item.Key))
                    {
                        userAcceptable = false;
                    }
                }

                if (userAcceptable == false)
                {
                    var entant = new SecondCriterionUnit
                    {
                        DatabaseId = Convert.ToInt32(entrant.Id),
                        SecondCriterionAcceptable = false,
                        LocalPriority             = 0
                    };

                    _secondCriterionContainer.Add(entant);
                }
                else
                {
                    var entant = new SecondCriterionUnit();
                    entant.DatabaseId = Convert.ToInt32(entrant.Id);
                    entant.SecondCriterionAcceptable = true;
                    entant.MatrixId        = totalAvailLines;
                    entant.EntrantClusters = entrantCharacteristics;
                    entant.LocalPriority   = 0;

                    totalAvailLines++;

                    _secondCriterionContainer.Add(entant);
                }
            }
            _secondCriterionMatrixSize = totalAvailLines;
        }