public double probabilityOf(Dictionary<String, bool> conditions) { double prob = 0.0; foreach (Row row in rows) { bool rowMeetsAllConditions = true; foreach (string key in conditions.Keys) { if (!(row.matches(key, conditions[key]))) { rowMeetsAllConditions = false; break; } } if (rowMeetsAllConditions) { prob += row.probability; } } return prob; }
public static double[] ask(Query q, ProbabilityDistribution pd) { double[] probDist = new double[2]; Dictionary<String, bool> h = q.getEvidenceVariables(); // true probability h[q.getQueryVariable()] = true; probDist[0] = pd.probabilityOf(h); // false probability h[q.getQueryVariable()] = false; probDist[1] = pd.probabilityOf(h); return Util.normalize(probDist); }