def test_cycle(self):
     xy_factor = Factor(
         [self.random_variables[0], self.random_variables[1]])
     xz_factor = Factor(
         [self.random_variables[0], self.random_variables[2]])
     yz_factor = Factor(
         [self.random_variables[1], self.random_variables[2]])
     graphical_model = GraphicalModel()
     graphical_model.add_factor(xy_factor).add_factor(xz_factor).add_factor(
         yz_factor)
     marginal_inference = MpMarginalInference(graphical_model)
     marginal_inference.get_marginal_factor([self.random_variables[0]], {})
Exemple #2
0
 def test_add_factors(self):
     graphical_model = GraphicalModel()
     factor1 = Factor([RandomVariable('x', (1, 2))])
     factor2 = Factor(
         [RandomVariable('y', (2, 3, 4)),
          RandomVariable('z', (2, ))])
     factor3 = Factor(
         [RandomVariable('x', (1, 2)),
          RandomVariable('z', (2, ))])
     graphical_model.add_factor(factor1).add_factor(factor2).add_factor(
         factor3)
     print(graphical_model.random_variables)
 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
Exemple #4
0
def generate_complete(nb_vars, delta):
    model = GraphicalModel()
    interaction = delta * np.random.uniform(
        -1.0, 1.0, nb_vars*(nb_vars-1))
    bias = np.random.uniform(-0.1, 0.1, [nb_vars])

    for i in range(nb_vars):
        model.add_variable(ith_object_name('V', i))

    for i in range(nb_vars):
        for j in range(i+1, nb_vars):
            beta = interaction[i * nb_vars + j ]
            log_values = np.array([beta, -beta, -beta, beta]).reshape([2,2])
            factor = Factor(
                name = ijth_object_name('F', i, j),
                variables = [ith_object_name('V', i), ith_object_name('V', j)],
                log_values = log_values)
            model.add_factor(factor)

    for i in range(nb_vars):
        factor = Factor(
            name = ith_object_name('B', i),
            variables = [ith_object_name('V', i)],
            log_values = np.array([bias[i], -bias[i]]))
        model.add_factor(factor)

    return 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]))
Exemple #8
0
def generate_uai(model_name):
    model = GraphicalModel()
    model.name=model_name

    with open(UAI_PATH+model_name+'.uai') as f:
        a = f.readlines()

    content = []
    for c in a:
        content.extend(c.split())

    cnt = 1
    nb_vars = int(content[cnt])
    cardinalities = dict()
    for t in range(nb_vars):
        cnt += 1
        newvar = 'V' + str(t)
        model.add_variable(newvar)
        cardinalities[newvar] = int(content[cnt])

    cnt += 1
    nfactors = int(content[cnt])

    factor_variables = dict()
    for t in range(nfactors):
        cnt += 1
        newfac_name = 'F' + str(t)
        factor_size = int(content[cnt])
        factor_variables[newfac_name] = []
        for t2 in range(factor_size):
            cnt += 1
            factor_variables[newfac_name].append('V' + str(content[cnt]))

    for t in range(nfactors):
        cnt += 1
        value_num = int(content[cnt])
        newfac_name = 'F' + str(t)
        values = []
        for vt2 in range(value_num):
            cnt += 1
            values.append(float(content[cnt]))

        values = np.reshape(
            values,
            [cardinalities[var] for var in factor_variables[newfac_name]])
        factor = Factor(
            name = newfac_name,
            variables = factor_variables[newfac_name],
            values = values)
        model.add_factor(factor)

    return model
Exemple #9
0
def generate_grid(nb_vars, delta):
    model = GraphicalModel()

    grid_size = int(nb_vars**0.5)
    interaction = delta * np.random.uniform(-1.0, 1.0, 2*grid_size*(grid_size-1))
    bias = np.random.uniform(-0.1, 0.1, [grid_size,grid_size])

    for i in range(grid_size):
        for j in range(grid_size):
            model.add_variable(ijth_object_name('V', i,j))

    edge_set = []
    for x in range(grid_size*grid_size):
        q, m = divmod(x, grid_size)
        if m != grid_size-1:
            edge_set.append([x,x+1])

        if q != grid_size-1:
            edge_set.append([x,x+grid_size])

    for i, e in enumerate(edge_set):
        beta = interaction[i]

        q1, m1 = divmod(e[0], grid_size)
        V1 = ijth_object_name('V', q1,m1)

        q2, m2 = divmod(e[1],grid_size)
        V2 = ijth_object_name('V', q2,m2)

        log_values = np.array([beta, -beta, -beta, beta]).reshape([2,2])
        factor = Factor(name = ith_object_name('F', i),
                        variables = [V1, V2],
                        log_values = log_values)
        model.add_factor(factor)

    for i in range(grid_size):
        for j in range(grid_size):
            log_values = np.array([bias[i,j], -bias[i,j]])
            model.add_factor(Factor(name = ith_object_name('B', i*grid_size + j),
                                 variables = [ijth_object_name('V', i,j)],
                                 log_values = log_values))

    return model