/// <summary>
    /// Update an observed node with the given score.
    /// </summary>
    /// <param name="node">Main Topic</param>
    /// <param name="operation">Operation</param>
    /// <param name="score">Score</param>
    public void UpdateNode(LearnerModel.Node node, LearnerModel.Operation operation, double score)
    {
        switch (node)
        {
        case LearnerModel.Node.Similar:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                this.bayesNet.fbSimilarAddition = (score + this.bayesNet.fbSimilarAddition) / 2;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                this.bayesNet.fbSimilarSubtraction = (score + this.bayesNet.fbSimilarSubtraction) / 2;
            }

            this.bayesNet.UpdateSimilarProbability();
            break;

        case LearnerModel.Node.Equivalent:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                this.bayesNet.fbEquivalentAddition = (score + this.bayesNet.fbEquivalentAddition) / 2;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                this.bayesNet.fbEquivalentSubtraction = (score + this.bayesNet.fbEquivalentSubtraction) / 2;
            }

            this.bayesNet.UpdateEquivalentProbability();
            break;

        case LearnerModel.Node.Dissimilar:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                this.bayesNet.fbDissimilarAddition = (score + this.bayesNet.fbDissimilarAddition) / 2;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                this.bayesNet.fbDissimilarSubtraction = (score + this.bayesNet.fbDissimilarSubtraction) / 2;
            }

            this.bayesNet.UpdateDissimilarProbability();
            break;
        }
    }
    /// <summary>
    /// Infer the probability of an observed node.
    /// </summary>
    /// <param name="node">Main Topic</param>
    /// <param name="operation">Operation</param>
    /// <returns></returns>
    public double GetRateofObservedNode(LearnerModel.Node node, LearnerModel.Operation operation)
    {
        double rate = 0d;

        switch (node)
        {
        case LearnerModel.Node.Similar:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                rate = this.bayesNet.fbSimilarAddition;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                rate = this.bayesNet.fbSimilarSubtraction;
            }
            break;

        case LearnerModel.Node.Equivalent:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                rate = this.bayesNet.fbEquivalentAddition;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                rate = this.bayesNet.fbEquivalentSubtraction;
            }
            break;

        case LearnerModel.Node.Dissimilar:
            if (operation == LearnerModel.Operation.ADDITION)
            {
                rate = this.bayesNet.fbDissimilarAddition;
            }
            else if (operation == LearnerModel.Operation.SUBTRACTION)
            {
                rate = this.bayesNet.fbDissimilarSubtraction;
            }
            break;
        }

        return(rate);
    }