Exemplo n.º 1
0
    /// <summary>
    /// Prompt the learner modeling component to update its node probabilities.
    /// </summary>
    /// <param name="session">Session</param>
    /// <param name="addTopic">Topic used in addition</param>
    /// <param name="subTopic">Topic used in subtraction</param>
    private void UpdateNode(StabilizationSession session, SceneTopic addTopic, SceneTopic subTopic)
    {
        if (this.learnerModelingComponent == null)
        {
            InitializeLearnerModelingComponent();
        }
        //count the correct and wrong attempts for addition
        float correctAdditionCount = (float)session.Count(true, SessionTags.Operation.ADDITION);
        float wrongAdditionCount   = (float)session.Count(false, SessionTags.Operation.ADDITION);

        //add them together to get total addition attempts
        float additionCount = correctAdditionCount + wrongAdditionCount;

        //if there are addition attempts...
        if (additionCount != 0)
        {
            //get score by dividing correct attempts over total attempts
            float score = correctAdditionCount / additionCount;
            Debug.Log("num den for score IS " + correctAdditionCount + "   " + additionCount);
//			score = score - (float)(session.SessionTime () / session.GetSceneAvgSolveTime ());
//			Debug.LogError ("SCORE MINUS IS "+(session.SessionTime () / session.GetSceneAvgSolveTime ()));
//			score = score;
            Debug.Log("SCORE IS " + score);
            //depending on topic, update the respective node
            switch (addTopic)
            {
            case SceneTopic.SIMILAR_ADD:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Similar, LearnerModel.Operation.ADDITION, score);
                break;

            case SceneTopic.EQUIVALENT_ADD:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Equivalent, LearnerModel.Operation.ADDITION, score);
                break;

            case SceneTopic.DISSIMILAR_ADD:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Dissimilar, LearnerModel.Operation.ADDITION, score);
                break;
            }
        }

        //count the correct and wrong attempts for subtraction
        float correctSubtractionCount = (float)session.Count(true, SessionTags.Operation.SUBTRACTION);
        float wrongSubtractionCount   = (float)session.Count(false, SessionTags.Operation.SUBTRACTION);

        //add them together to get total subtraction attempts
        float subtractionCount = correctSubtractionCount + wrongSubtractionCount;

        //if there are subtraction attempts...
        if (subtractionCount != 0)
        {
            //get score by dividing correct attempts over total attempts
            float score = correctSubtractionCount / subtractionCount;

            // TODO Also removed
//			score = score - (float)(session.SessionTime () / session.GetSceneAvgSolveTime ());
            //depending on topic, update the respective node
            switch (subTopic)
            {
            case SceneTopic.SIMILAR_SUB:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Similar, LearnerModel.Operation.SUBTRACTION, score);
                break;

            case SceneTopic.EQUIVALENT_SUB:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Equivalent, LearnerModel.Operation.SUBTRACTION, score);
                break;

            case SceneTopic.DISSIMILAR_SUB:
                this.learnerModelingComponent.UpdateNode(LearnerModel.Node.Dissimilar, LearnerModel.Operation.SUBTRACTION, score);
                break;
            }
        }
    }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new session. Subset sum set is cleared.
 /// </summary>
 private void InitSession()
 {
     additionRight.Clear();
     this.currentSession = new StabilizationSession(topic, sceneAvgSolveTime);
 }
Exemplo n.º 3
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);
            }
        }
    }
Exemplo n.º 4
0
    /// <summary>
    /// Takes all currently registered ghost blocks and checks their values to determine what topic the puzzle is.
    /// Also updates the stability number line based on the currently registered blocks' values.
    /// </summary>
    private void UpdateSession()
    {
        List <int>  denominators = new List <int> ();
        FractionSet fset         = new FractionSet();
        bool        similar      = true;
        bool        oddEquiv     = true;
        bool        evenEquiv    = true;

        int currentDenom = (int)hollowBlocks [0].GetDenominator();

        for (int i = 0; i < hollowBlocks.Count; i++)
        {
            denominators.Add((int)hollowBlocks[i].GetDenominator());
            FractionData fraction = hollowBlocks [i].GetFraction();

            if (i > 0)
            {
                if (similar && currentDenom == fraction.denominator)
                {
                    similar = true;
                }
                else
                {
                    similar = false;
                }

                if (evenEquiv && currentDenom % 2 == 0 && (currentDenom % fraction.denominator == 0 || fraction.denominator % currentDenom == 0 || (General.SimplifyFraction(fraction.numerator, fraction.denominator) [0] == 1.0f && General.SimplifyFraction(fraction.numerator, fraction.denominator) [1] == 2.0f)))
                {
                    evenEquiv = true;
                }
                else
                {
                    evenEquiv = false;
                }

                if (oddEquiv && currentDenom % 3 == 0 && (currentDenom % fraction.denominator == 0 || fraction.denominator % currentDenom == 0 || (General.SimplifyFraction(fraction.numerator, fraction.denominator) [0] == 1.0f && General.SimplifyFraction(fraction.numerator, fraction.denominator) [1] == 3.0f) || (General.SimplifyFraction(fraction.numerator, fraction.denominator) [0] == 2.0f && General.SimplifyFraction(fraction.numerator, fraction.denominator) [1] == 3.0f)))
                {
                    oddEquiv = true;
                }
                else
                {
                    oddEquiv = false;
                }

//				if (similar && fraction.denominator == (int)hollowBlocks [i - 1].GetDenominator ())
//					similar = true;
//				else
//					similar = false;
//
//				if (evenEquiv && (fraction.denominator % 2) == ((int)hollowBlocks [i - 1].GetDenominator () % 2))
//					evenEquiv = true;
//				else
//					evenEquiv = false;
//
//				if (oddEquiv && (fraction.denominator % 3) == ((int)hollowBlocks [i - 1].GetDenominator () % 3))
//					oddEquiv = true;
//				else
//					oddEquiv = false;
            }

            fset.fractions.Add(fraction);
        }

        if (similar)
        {
            topic = SessionTopic.SIMILAR;
        }
        else if (evenEquiv || oddEquiv)
        {
            topic = SessionTopic.EQUIVALENT;
        }
        else
        {
            topic = SessionTopic.DISSIMILAR;
        }

        this.currentSession = new StabilizationSession(topic, this.sceneAvgSolveTime);

        if (numberLine == null)
        {
            this.numberLine = FindObjectOfType <StabilityNumberLine> ();
        }

        FractionData target = this.stabilityController.UpdateStabilityNumberLine(hollowBlocks);

//		FractionData target = new FractionData ();
//		target.numerator = (int)numberLine.GetTargetNumerator ();
//		target.denominator = (int)numberLine.GetTargetDenominator ();

        foreach (FractionSet s in SubsetSumFractions.SubsetSum(fset, target))
        {
            additionRight.Add(s);
        }
    }