def test_line(): model = line_potts_model(gr_size=40, al_size=3, seed=0) gt = model.infer(algorithm='path_dp') result = model.infer(algorithm='mean_field') assert_results_close(result, gt, log_pf_tol=3.0, mp_mse_tol=1e-2)
def test_grid(): model = grid_potts_model(4, 5, al_size=2, seed=0) gt = model.infer(algorithm='path_dp') result = model.infer(algorithm='mean_field', max_iter=1000) assert_results_close(result, gt, log_pf_tol=5.0, mp_mse_tol=0.05)
def test_tree(): model = tree_potts_model(gr_size=50, al_size=3, seed=0) gt = model.infer(algorithm='tree_dp') result = model.infer(algorithm='mean_field') assert_results_close(result, gt, log_pf_tol=10.0, mp_mse_tol=0.03)
def test_clique(): model = clique_potts_model(gr_size=5, al_size=3, seed=0) gt = model.infer(algorithm='bruteforce') result = model.infer(algorithm='mean_field') assert_results_close(result, gt, log_pf_tol=1.0, mp_mse_tol=1e-4)
def test_small_forest(): edges = [[0, 1], [1, 2], [1, 3], [4, 5], [6, 7]] field = np.random.random((8, 2)) inter = np.random.random((5, 2, 2)) model = PairWiseFiniteModel.create(field, edges, inter) assert_results_close(model.infer(algorithm='message_passing'), model.infer(algorithm='bruteforce'))
def test_clique(): model = clique_potts_model(gr_size=5, al_size=3, seed=0) gt = infer_bruteforce(model) result = model.infer(algorithm='path_dp') assert_results_close(result, gt)
def test_marg_probs_potts_tree_1000x5(): libdai = LibDaiInterop() if not libdai.is_libdai_ready(): return model = tree_potts_model(1000, 5) true_result = model.infer() libdai_result = libdai.infer(model, "BP") assert_results_close(true_result, libdai_result, log_pf_tol=1e-8)
def test_grid(): model = grid_potts_model(10, 5, al_size=2) true_result = model.infer(algorithm='path_dp') result_bp = BP.infer(model) assert_results_close(true_result, result_bp, log_pf_tol=0.1, mp_mse_tol=2e-3)
def test_long_line_compare_with_tree(): # Test to ensure Tree DP and Path DP are consistent. gr_size = 1000 al_size = 3 model = line_potts_model(gr_size=gr_size, al_size=al_size, seed=111) result1 = model.infer(algorithm='path_dp') result2 = model.infer(algorithm='tree_dp') assert_results_close(result1, result2)
def test_libdai_bp_regression(): model = random_generic_model(num_variables=20, num_factors=20, max_domain_size=4, max_factor_size=3) default_opts = { 'tol': 1e-9, 'logdomain': 0, 'updates': 'SEQFIX', 'verbose': 0 } configs = [ { **default_opts }, { **default_opts, 'logdomain': 1 }, { **default_opts, 'updates': 'SEQMAX' }, { **default_opts, 'updates': 'PARALL' }, { **default_opts, 'updates': 'SEQRND' }, { **default_opts, 'maxiter': 0 }, { **default_opts, 'maxiter': 1 }, { **default_opts, 'maxiter': 5, 'logdomain': 1 }, { **default_opts, 'maxiter': 50 }, { **default_opts, 'damping': 0.1, 'logdomain': 0, 'maxiter': 5 }, { **default_opts, 'damping': 0.2, 'logdomain': 1, 'maxiter': 10 }, ] for options in configs: result_libdai = libdai.infer(model, algorithm='BP', options=options) result_bp = BP.infer(model, options) assert_results_close(result_libdai, result_bp)
def test_cycle3(): np.random.seed(0) model = PairWiseFiniteModel(3, 3) for i, j in [(0, 1), (1, 2), (0, 2)]: model.add_interaction(i, j, np.random.random(size=(3, 3))) gt = model.infer(algorithm='bruteforce') result = model.infer(algorithm='mean_field') assert_results_close(result, gt, log_pf_tol=0.1, mp_mse_tol=1e-4)
def test_isolated_exact(): np.random.seed(0) gr_size = 1000 al_size = 5 model = PairWiseFiniteModel(gr_size, al_size) model.set_field(np.random.random((gr_size, al_size))) gt = model.infer(algorithm='bruteforce') result = model.infer(algorithm='mean_field') assert_results_close(result, gt)
def test_random_forest_compare_with_tree_dp(): # Generate tree on 50 edges, then leave only 40 random edges. gr_size, al_size = 50, 5 edges = list(networkx.random_tree(gr_size).edges()) random.shuffle(edges) edges = edges[0:40] model = PairWiseFiniteModel(gr_size, 5) model.set_field(np.random.random((gr_size, al_size))) for v1, v2 in edges: model.add_interaction(v1, v2, np.random.random((al_size, al_size))) assert_results_close(model.infer(algorithm='message_passing'), model.infer(algorithm='tree_dp'))
def test_inference_all_methods(): # Sanity check that all algorithms work on very simple model. all_methods = [ 'auto', 'bruteforce', 'mean_field', 'message_passing', 'tree_dp', 'path_dp', 'junction_tree' ] model = PairWiseFiniteModel(2, 2) model.add_interaction(0, 1, np.array([[0, 0], [0, 1]])) m = np.array([2, 1 + np.exp(1)]) expected_result = InferenceResult(np.log(3 + np.exp(1)), np.array([m, m]) / np.sum(m)) for method in all_methods: result = model.infer(algorithm=method) assert_results_close(result, expected_result, log_pf_tol=1.0, mp_mse_tol=0.1)
def test_inference_tree_100x5(): model = tree_potts_model(gr_size=100, al_size=5, seed=0) ground_truth = model.infer(algorithm='tree_dp') result = infer_junction_tree(model) assert_results_close(result, ground_truth)
def test_grid_3x3(): model = grid_potts_model(3, 3, al_size=2, seed=123) gt = model.infer(algorithm='bruteforce') result = model.infer(algorithm='path_dp') assert_results_close(result, gt)
def test_tree_exact(): model = tree_potts_model(gr_size=50, al_size=3, seed=0) assert_results_close(model.infer(algorithm='message_passing'), model.infer(algorithm='tree_dp'))
def test_tree(): model = tree_potts_model(gr_size=100, al_size=3) true_result = model.infer(algorithm='tree_dp') result_bp = BP.infer(model) assert_results_close(true_result, result_bp, log_pf_tol=2e-9)
def test_fully_isolated(): model = PairWiseFiniteModel(10, 2) model.set_field(np.random.random(size=(10, 2))) ground_truth = model.infer(algorithm='bruteforce') result = model.infer(algorithm='tree_dp') assert_results_close(result, ground_truth)
def test_vert15_alph2(): model = tree_potts_model(gr_size=10, al_size=2, seed=123) ground_truth = model.infer(algorithm='bruteforce') result = model.infer(algorithm='tree_dp') assert_results_close(result, ground_truth)
def test_potts_grid(): model = grid_potts_model(6, 5, al_size=3) true_result = model.infer(algo='parth_dp') model = inferlo.GenericGraphModel.from_model(model) bw_result = BackwardBucketElimination.infer(model) assert_results_close(true_result, bw_result)
def test_inference_clique_10x2(): model = clique_potts_model(gr_size=10, al_size=2, seed=0) ground_truth = model.infer(algorithm='bruteforce') result = infer_junction_tree(model) assert_results_close(result, ground_truth)
def test_inference_cross_50x2x2(): model = cross_potts_model(length=50, width=2, al_size=2) ground_truth = model.infer(algorithm='path_dp') result = infer_junction_tree(model) assert_results_close(result, ground_truth)
def test_inference_grid_4x50x2(): model = grid_potts_model(4, 50, al_size=2, seed=0) ground_truth = model.infer(algorithm='path_dp') result = infer_junction_tree(model) assert_results_close(result, ground_truth)