示例#1
0
 def test_get_max_marginalized(self):
     init_factor = Factor(self.random_variables)
     init_factor.add_value([1, 3, 2], 10).add_value([1, 4, 2],
                                                    5).add_value([1, 5, 2],
                                                                 2)
     init_factor.add_value([2, 4, 2], 20).add_value([2, 5, 2], 30)
     factor, assignment = init_factor.get_max_marginalized(
         [self.random_variables[0]])
     marginalized_variables = [
         self.random_variables[1], self.random_variables[2]
     ]
     self.assertEqual(20, factor.get_value({'y': 4, 'z': 2}))
     self.assertEqual(30, factor.get_value({'y': 5, 'z': 2}))
     self.assertEqual(10, factor.get_value({'y': 3, 'z': 2}))
     variable_permutation = list(
         map(lambda x: factor.random_variables.index(x),
             marginalized_variables))
     mapped_assignment = {}
     for key, value in assignment.items():
         mapped_key = tuple(
             map(lambda x: key[variable_permutation[x]], range(len(key))))
         mapped_assignment[mapped_key] = value
     self.assertEqual({
         (3, 2): (1, ),
         (4, 2): (2, ),
         (5, 2): (2, )
     }, mapped_assignment)
     factor, assignment = init_factor.get_max_marginalized(
         self.random_variables)
     self.assertEqual(30, factor.get_value([]))
     self.assertEqual({(): (2, 5, 2)}, assignment)
示例#2
0
 def test_get_multiplied(self):
     factor1 = Factor([self.random_variables[0], self.random_variables[1]])
     factor2 = Factor([self.random_variables[1], self.random_variables[2]])
     factor1.add_value([1, 3], 10).add_value([1, 4], 20).add_value([2, 4],
                                                                   30)
     factor2.add_value([3, 2], 5).add_value([4, 2], 2)
     product_factor = factor1.get_multiplied(factor2)
     self.assertEqual(product_factor.get_value({
         'x': 1,
         'y': 3,
         'z': 2
     }), 50)
     self.assertEqual(product_factor.get_value({
         'x': 1,
         'y': 4,
         'z': 2
     }), 40)
     self.assertEqual(product_factor.get_value({
         'x': 2,
         'y': 4,
         'z': 2
     }), 60)
     self.assertEqual(product_factor.get_value({'x': 1, 'y': 5, 'z': 2}), 0)
     self.assertEqual(product_factor.get_value({'x': 2, 'y': 5, 'z': 2}), 0)
     self.assertEqual(product_factor.get_value({'x': 2, 'y': 5, 'z': 2}), 0)
示例#3
0
 def test_get_value(self):
     factor = Factor(self.random_variables)
     factor.add_value([1, 3, 2], 10).add_value([2, 4, 2],
                                               20).add_value([2, 5, 2], 30)
     self.assertEqual(factor.get_value([1, 3, 2]), 10)
     self.assertEqual(factor.get_value([2, 4, 2]), 20)
     self.assertEqual(factor.get_value([2, 5, 2]), 30)
     self.assertEqual(factor.get_value([1, 4, 2]), 0)
     self.assertEqual(factor.get_value([2, 3, 2]), 0)
示例#4
0
 def test_get_inverse(self):
     factor = Factor(self.random_variables)
     factor.add_value([1, 3, 2], 10).add_value([2, 4, 2],
                                               20).add_value([2, 5, 2], 30)
     factor = factor.get_inverse()
     self.assertEqual(factor.get_value([1, 3, 2]), 1 / 10)
     self.assertEqual(factor.get_value([2, 4, 2]), 1 / 20)
     self.assertEqual(factor.get_value([2, 5, 2]), 1 / 30)
     self.assertEqual(factor.get_value([1, 4, 2]), float("inf"))
     self.assertEqual(factor.get_value([2, 3, 2]), float("inf"))
示例#5
0
 def test_get_constant_multiplied(self):
     factor = Factor(self.random_variables)
     factor.add_value([1, 3, 2], 10).add_value([2, 4, 2],
                                               20).add_value([2, 5, 2], 30)
     factor = factor.get_constant_multiplied(2)
     self.assertEqual(factor.get_value([1, 3, 2]), 20)
     self.assertEqual(factor.get_value([2, 4, 2]), 40)
     self.assertEqual(factor.get_value([2, 5, 2]), 60)
     self.assertEqual(factor.get_value([1, 4, 2]), 0)
     self.assertEqual(factor.get_value([2, 3, 2]), 0)
示例#6
0
 def test_get_normalized(self):
     factor = Factor(self.random_variables)
     factor.add_value([1, 3, 2], 10).add_value([2, 4, 2],
                                               20).add_value([2, 5, 2], 30)
     factor = factor.get_normalized()
     self.assertAlmostEquals(1 / 6, factor.get_value([1, 3, 2]))
     self.assertAlmostEquals(1 / 3, factor.get_value([2, 4, 2]))
     self.assertAlmostEquals(1 / 2, factor.get_value([2, 5, 2]))
     self.assertAlmostEquals(0, factor.get_value([1, 4, 2]))
     self.assertAlmostEquals(0, factor.get_value([1, 5, 2]))
     self.assertAlmostEquals(0, factor.get_value([2, 3, 2]))
示例#7
0
 def test_get_sum_marginalized(self):
     init_factor = Factor(self.random_variables)
     init_factor.add_value([1, 3, 2], 10).add_value([1, 4, 2],
                                                    5).add_value([1, 5, 2],
                                                                 2)
     init_factor.add_value([2, 4, 2], 20).add_value([2, 5, 2], 30)
     factor = init_factor.get_sum_marginalized([self.random_variables[0]])
     self.assertEqual(25, factor.get_value({'y': 4, 'z': 2}))
     self.assertEqual(32, factor.get_value({'y': 5, 'z': 2}))
     self.assertEqual(10, factor.get_value({'y': 3, 'z': 2}))
     factor = init_factor.get_sum_marginalized(self.random_variables)
     self.assertEqual(67, factor.get_value([]))
示例#8
0
 def test_get_with_evidences(self):
     init_factor = Factor(self.random_variables)
     init_factor.add_value([1, 3, 2], 10).add_value([2, 4, 2],
                                                    20).add_value([2, 5, 2],
                                                                  30)
     factor = init_factor.get_with_evidences({self.random_variables[0]: 2})
     self.assertEqual({(2, 3, 2), (2, 4, 2), (2, 5, 2)},
                      set(factor.get_random_variables_assignments()))
     self.assertEqual(factor.get_value([2, 4, 2]), 20)
     self.assertEqual(factor.get_value([2, 5, 2]), 30)
     factor = init_factor.get_with_evidences({
         self.random_variables[0]: 2,
         self.random_variables[1]: 4
     })
     self.assertEqual({(2, 4, 2)},
                      set(factor.get_random_variables_assignments()))
     self.assertEqual(factor.get_value([2, 4, 2]), 20)
 def _generate_two_variables_model(self):
     x_factor = Factor([self.random_variables[0]])
     x_factor.add_value([1], 1).add_value([2], 2)
     y_factor = Factor([self.random_variables[1]])
     y_factor.add_value([3], 5).add_value([4], 10).add_value([5], 15)
     xy_factor = Factor(
         [self.random_variables[0], self.random_variables[1]])
     xy_factor.add_value([1, 3], 10).add_value([1, 4], 10).add_value([2, 5],
                                                                     20)
     graphical_model = GraphicalModel()
     graphical_model.add_factor(x_factor).add_factor(y_factor).add_factor(
         xy_factor)
     return graphical_model
 def _generate_three_variables_model(self):
     xy_factor = Factor(
         [self.random_variables[0], self.random_variables[1]])
     xy_factor.add_value([1, 3], 5).add_value([1, 4], 20).add_value([2, 5],
                                                                    30)
     xz_factor = Factor(
         [self.random_variables[0], self.random_variables[2]])
     xz_factor.add_value([1, 2], 10).add_value([2, 2], 20)
     yz_factor = Factor(
         [self.random_variables[1], self.random_variables[2]])
     yz_factor.add_value([3, 2], 10).add_value([4, 2], 20).add_value([5, 2],
                                                                     30)
     graphical_model = GraphicalModel()
     graphical_model.add_factor(xy_factor).add_factor(xz_factor).add_factor(
         yz_factor)
     return graphical_model
 def test_two_variables(self):
     x_factor = Factor([self.random_variables[0]])
     x_factor.add_value([1], 1).add_value([2], 2)
     y_factor = Factor([self.random_variables[1]])
     y_factor.add_value([3], 5).add_value([4], 10).add_value([5], 15)
     xy_factor = Factor(
         [self.random_variables[0], self.random_variables[1]])
     xy_factor.add_value([1, 3], 10).add_value([1, 4], 10).add_value([2, 5],
                                                                     20)
     graphical_model = GraphicalModel()
     graphical_model.add_factor(x_factor).add_factor(y_factor).add_factor(
         xy_factor)
     marginal_inference = MpMarginalInference(graphical_model)
     marginal_factor = marginal_inference.get_marginal_factor(
         self.random_variables[0])
     self.assertAlmostEqual(0.2, marginal_factor.get_value([1]))
     self.assertAlmostEqual(0.8, marginal_factor.get_value([2]))
 def test_marginal_y_three_variables(self):
     x_factor = Factor([self.random_variables[0]])
     x_factor.add_value([1], 1).add_value([2], 2)
     xy_factor = Factor(
         [self.random_variables[0], self.random_variables[1]])
     xy_factor.add_value([1, 3], 5).add_value([1, 4], 20).add_value([2, 5],
                                                                    30)
     xz_factor = Factor(
         [self.random_variables[0], self.random_variables[2]])
     xz_factor.add_value([1, 2], 12).add_value([2, 2], 20)
     graphical_model = GraphicalModel()
     graphical_model.add_factor(x_factor).add_factor(xy_factor).add_factor(
         xz_factor)
     marginal_inference = MpMarginalInference(graphical_model)
     marginal_factor = marginal_inference.get_marginal_factor(
         self.random_variables[1])
     self.assertAlmostEqual(0.04, marginal_factor.get_value([3]))
     self.assertAlmostEqual(0.16, marginal_factor.get_value([4]))
     self.assertAlmostEqual(0.8, marginal_factor.get_value([5]))
示例#13
0
 def _create_default_factor(random_variable):
     factor = Factor([random_variable])
     for value in random_variable.values:
         factor.add_value([value], 1)
     return factor