/// <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); }
/// <summary> /// Infer the probability of an unobserved node. /// </summary> /// <param name="node">Main Topic</param> /// <returns>Node Probability</returns> public double Infer(LearnerModel.Node node) { double probability = 0; switch (node) { case LearnerModel.Node.Similar: probability = learnerModel.ProbOf(l => l.Similar).Value; Debug.Log("Similar: " + probability); break; case LearnerModel.Node.Equivalent: probability = learnerModel.ProbOf(l => l.Equivalent).Value; Debug.Log("Equivalent: " + probability); break; case LearnerModel.Node.Dissimilar: probability = learnerModel.ProbOf(l => l.Dissimilar).Value; Debug.Log("Dissimilar: " + probability); break; } return(probability); }
/// <summary> /// Infer the probability that the specified main topic is mastered. /// </summary> /// <param name="node">Main Topic</param> /// <returns>Probability</returns> public double Infer(LearnerModel.Node node) { return(this.bayesNet.Infer(node)); }