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); } }
//Критерий совпадения кластеров - заполнение направлений во временный список 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; } }
//Критерий совпадения кластеров - заполнение направлений во временный список 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; }
//Критерий совпадения кластеров - заполнение направлений во временный список 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; } }
//Критерий совпадения кластеров - заполнение направлений во временный список 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; }