Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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'))
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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'))
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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'))
Exemple #18
0
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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)
Exemple #23
0
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)
Exemple #24
0
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)