Beispiel #1
0
    def infer(self, algorithm='auto', **kwargs):
        """Calculates partition function.

        Available algorithms
            * ``auto`` - Automatic.
            * ``edge_elimination`` - Edge elimination.

        :param algorithm: Which algorithm to use. String.
        :return: Partition function.
        """
        if algorithm == 'auto':
            return infer_edge_elimination(self)
        elif algorithm == 'edge_elimination':
            return infer_edge_elimination(self)
        else:
            raise ValueError('Unknown algorithm %s' % algorithm)
Beispiel #2
0
def test_infer_compare_with_pairwise_tree():
    pw_model = tree_potts_model(gr_size=50, al_size=5, seed=0)
    true_pf = np.exp(pw_model.infer(algorithm='tree_dp').log_pf)
    nfg_model = inferlo.NormalFactorGraphModel.from_model(pw_model)

    pf = infer_edge_elimination(nfg_model)

    assert np.allclose(true_pf, pf)
Beispiel #3
0
def test_infer_compare_with_pairwise_grid_5x5():
    pw_model = grid_potts_model(5, 5, al_size=2, seed=0)
    true_pf = np.exp(pw_model.infer(algorithm='path_dp').log_pf)
    nfg_model = inferlo.NormalFactorGraphModel.from_model(pw_model)

    pf = infer_edge_elimination(nfg_model)

    assert np.allclose(true_pf, pf)
Beispiel #4
0
def test_infer_disconnected():
    pw_model = PairWiseFiniteModel(5, al_size=2)
    pw_model.set_field(np.random.random(size=(5, 2)))
    pw_model.add_interaction(2, 3, np.random.random(size=(2, 2)))
    true_pf = np.exp(pw_model.infer(algorithm='bruteforce').log_pf)
    nfg_model = inferlo.NormalFactorGraphModel.from_model(pw_model)

    pf = infer_edge_elimination(nfg_model)

    assert np.allclose(true_pf, pf)
Beispiel #5
0
def test_ifer_clique_3vars():
    al_size = 5
    np.random.seed(10)
    domain = inferlo.DiscreteDomain.range(al_size)
    model = inferlo.NormalFactorGraphModel(3, domain)
    f01 = np.random.random(size=(al_size, al_size))
    f12 = np.random.random(size=(al_size, al_size))
    f20 = np.random.random(size=(al_size, al_size))
    model *= inferlo.DiscreteFactor(model, [0, 1], f01)
    model *= inferlo.DiscreteFactor(model, [1, 2], f12)
    model *= inferlo.DiscreteFactor(model, [2, 0], f20)
    model.build()

    z = infer_edge_elimination(model)

    assert np.allclose(z, model.part_func_bruteforce())
Beispiel #6
0
def test_infer_small_line():
    np.random.seed(10)
    domain = inferlo.DiscreteDomain.range(5)
    model = inferlo.NormalFactorGraphModel(3, domain)
    f0 = np.random.random(size=(5,))
    f01 = np.random.random(size=(5, 5))
    f12 = np.random.random(size=(5, 5))
    f2 = np.random.random(size=(5,))
    model *= inferlo.DiscreteFactor(model, [0], f0)
    model *= inferlo.DiscreteFactor(model, [0, 1], f01)
    model *= inferlo.DiscreteFactor(model, [1, 2], f12)
    model *= inferlo.DiscreteFactor(model, [2], f2)
    model.build()

    z = infer_edge_elimination(model)

    assert np.allclose(z, f0 @ f01 @ f12 @ f2)