Пример #1
0
def test_load_from_json():
    dg = BayesianNetwork()
    with open('one_parent_net.json', 'r') as f:
        json_ = json.load(f)
        dg.load_graph_from_json(json_)

    assert len(dg) == 2

    parents = dg.get_parents('parent')
    assert len(parents) == 0

    parents = dg.get_parents('child')
    assert len(parents) == 1

    factor = dg.get_value('parent', 'factor')
    f = Factor(scope=np.array([0]),
               card=np.array([2]),
               val=np.array([0.57, 0.43]))
    assert is_equal(f, factor)

    factor = dg.get_value('child', 'factor')
    f = Factor(scope=np.array([1, 0]),
               card=np.array([2, 2]),
               val=np.array([0.40, 0.60, 0.13, 0.87]))
    assert is_equal(f, factor)
Пример #2
0
def test_another_marg():
    f1 = Factor(scope=np.array([0]),
                card=np.array([2], dtype=np.int32),
                val=np.array([0.57, 0.43]))

    f2 = Factor(scope=np.array([1, 0]),
                card=np.array([2, 2], dtype=np.int32),
                val=np.array([0.4, 0.6, 0.13, 0.87]))

    f = get_product(f1, f2)
    f_marg = get_marg(f, 1)

    assert np.array_equal(f_marg.scope, np.array([0]))
    assert np.array_equal(f_marg.card, np.array([2]))
    assert np.allclose(f_marg.val, np.array([0.57, 0.43]))
Пример #3
0
def f1():
    '''
       f1
    [1   phi]
     --------
     0   0.11
     1   0.89
    '''
    return Factor(scope=np.array([1]),
                  card=np.array([2]),
                  val=np.array([0.11, 0.89]))
Пример #4
0
def f4():
    '''
       f4
    [4  5  phi]
    ------------
    [0  0  0.39]
    [1  0  0.61]
    [0  1  0.06]
    [1  1  0.94]
    '''
    return Factor(scope=np.array([4, 5]),
                  card=np.array([2, 2]),
                  val=np.array([0.39, 0.61, 0.06, 0.94]))
Пример #5
0
def f3():
    '''
       f3
    [3  2  phi]
    ------------
    [0  0  0.39]
    [1  0  0.61]
    [0  1  0.06]
    [1  1  0.94]
    '''
    return Factor(scope=np.array([3, 2]),
                  card=np.array([2, 2]),
                  val=np.array([0.39, 0.61, 0.06, 0.94]))
Пример #6
0
def f2():
    '''
       f2
    [2  1  phi]
    ------------
    [0  0  0.59]
    [1  0  0.41]
    [0  1  0.22]
    [1  1  0.78]
    '''
    return Factor(scope=np.array([2, 1]),
                  card=np.array([2, 2]),
                  val=np.array([0.59, 0.41, 0.22, 0.78]))
Пример #7
0
    def load_graph_from_json(self, json_):
        self._dg = nx.DiGraph()
        for node_name, value in json_.iteritems():

            # Have we seen this node name before?
            if node_name not in self._to_index:
                self._to_index[node_name] = self._index
                self._to_name[self._index] = node_name
                self._index += 1

            for p in value['parents']:
                if p not in self._to_index:
                    self._to_index[p] = self._index
                    self._to_name[self._index] = p
                    self._index += 1

            p_indx = [self._to_index[p] for p in value['parents']]
            c_indx = self._to_index[node_name]

            scope = np.array([c_indx] + p_indx)
            card = np.ones(scope.shape[0], dtype=np.int32) * 2

            N = np.prod(card)
            val = np.empty((N,))
            for v in value['values']:
                A = np.array(v['states'])
                A = A.reshape((-1, A.shape[0]))
                i = assign_to_indx(A, card)[0]
                val[i] = v['value']

            # What are the parents?
            f = Factor(scope=scope,
                       card=card,
                       val=val)
            f = log(f)

            var_scope = set([node_name] + value['parents'])
            self.add_node(node_name=node_name,
                          attr_dict={'factor': f,
                                     'scope': var_scope})

            self.add_parents(node_name, value['parents'])
Пример #8
0
def test_is_equal_scope_out_of_order(f2):
    '''
        f2
    [2  1  phi]
    ------------
    [0  0  0.59]
    [1  0  0.41]
    [0  1  0.22]
    [1  1  0.78]

       f2_
    [1  2  phi]
    ------------
    [0  0  0.59]
    [1  0  0.22]
    [0  1  0.41]
    [1  1  0.78]
    '''
    f2_ = Factor(scope=np.array([1, 2]),
                 card=np.array([2, 2]),
                 val=np.array([0.59, 0.22, 0.41, 0.78]))

    assert is_equal(f2, f2_)
    assert is_equal(f2_, f2)