Exemplo n.º 1
0
    /// <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);
            }
        }
    }