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]], {})
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
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]))
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
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