AIMA.Core.Probability.EnumerationAsk.enumerateAll C# (CSharp) Method

enumerateAll() private static method

private static enumerateAll ( BayesNet net, List unprocessedVariables, bool>.Dictionary evidenceVariables ) : double
net BayesNet
unprocessedVariables List
evidenceVariables 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;

                }
            }
        }