private List<Factor> sumOut(RandomVariable var, List<Factor> factors,
BayesianNetwork bn)
{
List<Factor> summedOutFactors = new List<Factor>();
List<Factor> toMultiply = new List<Factor>();
foreach (Factor f in factors)
{
if (f.contains(var))
{
toMultiply.Add(f);
}
else
{
// This factor does not contain the variable
// so no need to sum out - see AIMA3e pg. 527.
summedOutFactors.Add(f);
}
}
summedOutFactors.Add(pointwiseProduct(toMultiply).sumOut(var));
return summedOutFactors;
}