public probabilityOf ( String Y, bool value, bool>.Dictionary |
||
Y | String | |
value | bool | |
evidence | bool>.Dictionary | |
return | double |
private static double enumerateAll(BayesNet net, List<string> unprocessedVariables, Dictionary<String, bool> evidenceVariables) { if (unprocessedVariables.Count == 0) { return 1.0; } else { String Y = (String)unprocessedVariables[0]; if (evidenceVariables.ContainsKey(Y)) { double probYGivenParents = net.probabilityOf(Y, evidenceVariables[Y], evidenceVariables); double secondTerm = enumerateAll(net, Util .rest(unprocessedVariables), evidenceVariables); return probYGivenParents * secondTerm; } else { double sigma = 0.0; Dictionary<String, bool> clone1 = cloneEvidenceVariables(evidenceVariables); clone1.Add(Y, true); double probYTrueGivenParents = net.probabilityOf(Y, true, clone1); double secondTerm = enumerateAll(net, Util .rest(unprocessedVariables), clone1); double trueProbabilityY = probYTrueGivenParents * secondTerm; Dictionary<String, bool> clone2 = cloneEvidenceVariables(evidenceVariables); clone2.Add(Y, false); double probYFalseGivenParents = net.probabilityOf(Y, false, clone2); secondTerm = enumerateAll(net, Util.rest(unprocessedVariables), clone2); double falseProbabilityY = probYFalseGivenParents * secondTerm; // System.Console.Write(secondTerm + " ) )"); sigma = trueProbabilityY + falseProbabilityY; return sigma; } } }
private static double enumerateAll(BayesNet net, List <string> unprocessedVariables, Dictionary <String, bool> evidenceVariables) { if (unprocessedVariables.Count == 0) { return(1.0); } else { String Y = (String)unprocessedVariables[0]; if (evidenceVariables.ContainsKey(Y)) { double probYGivenParents = net.probabilityOf(Y, evidenceVariables[Y], evidenceVariables); double secondTerm = enumerateAll(net, Util .rest(unprocessedVariables), evidenceVariables); return(probYGivenParents * secondTerm); } else { double sigma = 0.0; Dictionary <String, bool> clone1 = cloneEvidenceVariables(evidenceVariables); clone1.Add(Y, true); double probYTrueGivenParents = net.probabilityOf(Y, true, clone1); double secondTerm = enumerateAll(net, Util .rest(unprocessedVariables), clone1); double trueProbabilityY = probYTrueGivenParents * secondTerm; Dictionary <String, bool> clone2 = cloneEvidenceVariables(evidenceVariables); clone2.Add(Y, false); double probYFalseGivenParents = net.probabilityOf(Y, false, clone2); secondTerm = enumerateAll(net, Util.rest(unprocessedVariables), clone2); double falseProbabilityY = probYFalseGivenParents * secondTerm; // System.Console.Write(secondTerm + " ) )"); sigma = trueProbabilityY + falseProbabilityY; return(sigma); } } }