示例#1
0
f1 = FactorNode(cpd=f1_cpd, graph=fg, name='f1', ordered_variables=(a, b))
f2 = FactorNode(cpd=f2_cpd, graph=fg, name='f2', ordered_variables=(a, c))
f3 = FactorNode(cpd=f3_cpd, graph=fg, name='f3', ordered_variables=(b, c))

fg.add_var_nodes([a, b, c])
fg.add_factor_nodes([f1, f2, f3])
fg.add_edge(a, f1)
fg.add_edge(f1, b)
fg.add_edge(b, f3)
fg.add_edge(f3, c)
fg.add_edge(a, f2)
fg.add_edge(f2, c)
pos = {a: (-3, 0), b: (0, 3), c: (3, 0), f1: (-1.5, 1.5), f2: (0, 0), f3: (1.5, 1.5)}
fg.save_graph_fig(num=1, pos=pos)
# fg.sum_product(node=b)
fg.loopy_sum_product(iterations=20, epsilon=1e-5, plot_errors=True)


beliefs = fg.get_beliefs()
for k in beliefs:
    print(f"marginal prob. of node {k}:{beliefs[k]}")

print()
fg.loopy_max_sum(iterations=20, epsilon=1e-5, plot_errors=True)
map_beliefs = fg.get_beliefs()
for k in map_beliefs:
    print(f"conf. of node {k} for max joint prob.:{np.argmax(map_beliefs[k])}")


print(fg.get_beliefs())
示例#2
0
    x2: (0, 7.5),
    fb: (4, 7.5),
    x3: (7.5, 7.5),
    fc: (0, 3),
    x4: (0, 0)
}
fg.save_graph_fig(num=1, pos=pos, fig_name='tree-1')

fg.sum_product(x3)
# fg.max_product(x3)
# fg.max_sum(x3)
# fg.loopy_sum_product(iterations=5, plot_errors=True)
# fg.loopy_max_product(iterations=5)
# fg.loopy_max_sum(iterations=5)

beliefs = fg.get_beliefs()
for k in beliefs:
    print(f"marginal prob. of node {k}:{beliefs[k]}")

fg.max_sum(x3)
map_beliefs = fg.get_beliefs()
for k in map_beliefs:
    print(f"conf. of node {k} for max joint prob.:{np.argmax(map_beliefs[k])}")

fg.loopy_sum_product(iterations=20, epsilon=1e-5, plot_errors=True)
lbp_beliefs = fg.get_beliefs()
error = [
    np.linalg.norm(b - lb)
    for b, lb in zip(beliefs.values(), lbp_beliefs.values())
]
error = sum(error) / len(error)