protected void test_RollingPairFairDiceModel(ProbabilityModel model) {
Assert.assertTrue(model.isValid());
// Ensure each dice has 1/6 probability
for (int d = 1; d <= 6; d++) {
AssignmentProposition ad1 = new AssignmentProposition(
ExampleRV.DICE_1_RV, d);
AssignmentProposition ad2 = new AssignmentProposition(
ExampleRV.DICE_2_RV, d);
Assert.assertEquals(1.0 / 6.0, model.prior(ad1), DELTA_THRESHOLD);
Assert.assertEquals(1.0 / 6.0, model.prior(ad2), DELTA_THRESHOLD);
}
// Ensure each combination is 1/36
for (int d1 = 1; d1 <= 6; d1++) {
for (int d2 = 1; d2 <= 6; d2++) {
AssignmentProposition ad1 = new AssignmentProposition(
ExampleRV.DICE_1_RV, d1);
AssignmentProposition ad2 = new AssignmentProposition(
ExampleRV.DICE_2_RV, d2);
ConjunctiveProposition d1AndD2 = new ConjunctiveProposition(
ad1, ad2);
Assert.assertEquals(1.0 / 6.0, model.prior(ad1),
DELTA_THRESHOLD);
Assert.assertEquals(1.0 / 6.0, model.prior(ad2),
DELTA_THRESHOLD);
// pg. 485 AIMA3e
Assert.assertEquals(1.0 / 36.0, model.prior(ad1, ad2),
DELTA_THRESHOLD);
Assert.assertEquals(1.0 / 36.0, model.prior(d1AndD2),
DELTA_THRESHOLD);
Assert.assertEquals(1.0 / 6.0, model.posterior(ad1, ad2),
DELTA_THRESHOLD);
Assert.assertEquals(1.0 / 6.0, model.posterior(ad2, ad1),
DELTA_THRESHOLD);
}
}
// Test Sets of events defined via constraint propositions
IntegerSumProposition total11 = new IntegerSumProposition("Total11",
new FiniteIntegerDomain(11), ExampleRV.DICE_1_RV,
ExampleRV.DICE_2_RV);
Assert.assertEquals(2.0 / 36.0, model.prior(total11), DELTA_THRESHOLD);
EquivalentProposition doubles = new EquivalentProposition("Doubles",
ExampleRV.DICE_1_RV, ExampleRV.DICE_2_RV);
Assert.assertEquals(1.0 / 6.0, model.prior(doubles), DELTA_THRESHOLD);
SubsetProposition evenDice1 = new SubsetProposition("EvenDice1",
new FiniteIntegerDomain(2, 4, 6), ExampleRV.DICE_1_RV);
Assert.assertEquals(0.5, model.prior(evenDice1), DELTA_THRESHOLD);
SubsetProposition oddDice2 = new SubsetProposition("OddDice2",
new FiniteIntegerDomain(1, 3, 5), ExampleRV.DICE_2_RV);
Assert.assertEquals(0.5, model.prior(oddDice2), DELTA_THRESHOLD);
// pg. 485 AIMA3e
AssignmentProposition dice1Is5 = new AssignmentProposition(
ExampleRV.DICE_1_RV, 5);
Assert.assertEquals(1.0 / 6.0, model.posterior(doubles, dice1Is5),
DELTA_THRESHOLD);
Assert.assertEquals(1.0, model.prior(ExampleRV.DICE_1_RV),
DELTA_THRESHOLD);
Assert.assertEquals(1.0, model.prior(ExampleRV.DICE_2_RV),
DELTA_THRESHOLD);
Assert.assertEquals(1.0,
model.posterior(ExampleRV.DICE_1_RV, ExampleRV.DICE_2_RV),
DELTA_THRESHOLD);
Assert.assertEquals(1.0,
model.posterior(ExampleRV.DICE_2_RV, ExampleRV.DICE_1_RV),
DELTA_THRESHOLD);
// Test a disjunctive proposition pg.489
// P(a OR b) = P(a) + P(b) - P(a AND b)
// = 1/6 + 1/6 - 1/36
AssignmentProposition dice2Is5 = new AssignmentProposition(
ExampleRV.DICE_2_RV, 5);
DisjunctiveProposition dice1Is5OrDice2Is5 = new DisjunctiveProposition(
dice1Is5, dice2Is5);
Assert.assertEquals(1.0 / 6.0 + 1.0 / 6.0 - 1.0 / 36.0,
model.prior(dice1Is5OrDice2Is5), DELTA_THRESHOLD);