/// <summary> /// Prompt the learner modeling component to update its denominator masteries. /// </summary> /// <param name="session">Session</param> /// <param name="addTopic">Topic used in addition</param> /// <param name="subTopic">Topic used in subtraction</param> private void UpdateDenominatorMastery(StabilizationSession session, SceneTopic addTopic, SceneTopic subTopic) { if (this.learnerModelingComponent == null) { InitializeLearnerModelingComponent(); } //Update the denominator mastery List <int> correctAddition = new List <int>(session.GetDenominaorsIn(true, SessionTags.Operation.ADDITION)); List <int> correctSubtraction = new List <int> (session.GetDenominaorsIn(true, SessionTags.Operation.SUBTRACTION)); List <int> wrongAddition = new List <int> (session.GetDenominaorsIn(false, SessionTags.Operation.ADDITION)); List <int> wrongSubtraction = new List <int> (session.GetDenominaorsIn(false, SessionTags.Operation.SUBTRACTION)); List <int> denominators = new List <int> (session.GetAllDistinct()); float additionCount = 0f; float subtractionCount = 0f; float correctAdditionCount = 0f; float wrongAdditionCount = 0f; float correctSubtractionCount = 0f; float wrongSubtractionCount = 0f; float scoreAdd = 0f; float scoreSub = 0f; foreach (int denominator in denominators) { //number of times denominator was used correctly in addition correctAdditionCount = correctAddition.FindAll(x => x == denominator).Count; //number of times denominator was used wrongly in addition wrongAdditionCount = wrongAddition.FindAll(x => x == denominator).Count; //number of times denominator was used correctly in subtraction correctSubtractionCount = correctSubtraction.FindAll(x => x == denominator).Count; //number of times denominator was used wrongly in subraction wrongSubtractionCount = wrongSubtraction.FindAll(x => x == denominator).Count; //total occurences of denominator in addition additionCount = correctAdditionCount + wrongAdditionCount; //total occurences of denominator in subtraction subtractionCount = correctSubtractionCount + wrongSubtractionCount; //if denominator did occur in addition... if (additionCount != 0) { //correct over all occurences = score scoreAdd = correctAdditionCount / additionCount; // TODO: Removed this 3 // scoreAdd = scoreAdd - (float)(session.SessionTime () / session.GetSceneAvgSolveTime ()); //update the learner modeling component's mastery for that denominator in addTopic (addition topic) this.learnerModelingComponent.UpdateDenominatorMastery(denominator, scoreAdd, addTopic); } //if denominator did occur in subtraction... if (subtractionCount != 0) { //correct over all occurences = score scoreSub = correctSubtractionCount / subtractionCount; // TODO: Removed this 4 // scoreSub = scoreSub - (float)(session.SessionTime () / session.GetSceneAvgSolveTime ()); //update the learner modeling component's mastery for that denominator in subTopic (subtraction topic) this.learnerModelingComponent.UpdateDenominatorMastery(denominator, scoreSub, subTopic); } } }