public void testInferenceOnBurglaryAlarmNetwork() {
BayesianNetwork bn = BayesNetExampleFactory
.constructBurglaryAlarmNetwork();
// AIMA3e. pg. 514
CategoricalDistribution d = bayesInference
.ask(new RandomVariable[] { ExampleRV.ALARM_RV },
new AssignmentProposition[] {
new AssignmentProposition(
ExampleRV.BURGLARY_RV, false),
new AssignmentProposition(
ExampleRV.EARTHQUAKE_RV, false),
new AssignmentProposition(
ExampleRV.JOHN_CALLS_RV, true),
new AssignmentProposition(
ExampleRV.MARY_CALLS_RV, true) }, bn);
// System.out.println("P(Alarm | ~b, ~e, j, m)=" + d);
Assert.assertEquals(2, d.getValues().length);
Assert.assertEquals(0.5577689243027888, d.getValues()[0],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
Assert.assertEquals(0.44223107569721115, d.getValues()[1],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
// AIMA3e pg. 523
// P(Burglary | JohnCalls = true, MaryCalls = true) = <0.284, 0.716>
d = bayesInference
.ask(new RandomVariable[] { ExampleRV.BURGLARY_RV },
new AssignmentProposition[] {
new AssignmentProposition(
ExampleRV.JOHN_CALLS_RV, true),
new AssignmentProposition(
ExampleRV.MARY_CALLS_RV, true) }, bn);
// System.out.println("P(Burglary | j, m)=" + d);
Assert.assertEquals(2, d.getValues().length);
Assert.assertEquals(0.2841718353643929, d.getValues()[0],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
Assert.assertEquals(0.7158281646356071, d.getValues()[1],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
// AIMA3e pg. 528
// P(JohnCalls | Burglary = true)
d = bayesInference.ask(
new RandomVariable[] { ExampleRV.JOHN_CALLS_RV },
new AssignmentProposition[] { new AssignmentProposition(
ExampleRV.BURGLARY_RV, true) }, bn);
// System.out.println("P(JohnCalls | b)=" + d);
Assert.assertEquals(2, d.getValues().length);
Assert.assertEquals(0.8490169999999999, d.getValues()[0],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
Assert.assertEquals(0.15098299999999998, d.getValues()[1],
ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD);
}