Exemplo n.º 1
0
def make_debug_graph(num_nodes, graph_mat):
    # Create factor graph
    fg = graphs.FactorGraph()
    # Create variable nodes
    X = {}
    F = {}
    dist_fa = np.zeros([30, 2, 2])
    for k in range(30):
        dist_fa[k] = np.random.rand(2, 2)
    for i in range(num_nodes):
        X['x' + str(i + 1)] = nodes.VNode("x" + str(i + 1), rv.Discrete)

    fg.set_nodes(X.values())
    for i in range(len(graph_mat)):
        edge = graph_mat[i]
        nodez = [X["x" + str(edge[m])] for m in range(len(edge))]
        F['f' + str(i + 1)] = nodes.FNode("f" + str(i + 1),
                                          rv.Discrete(dist_fa[i], *nodez))
    fg.set_nodes(F.values())

    for i in range(len(graph_mat)):
        node_name = graph_mat[i]
        fg.set_edge(X['x' + str(node_name[0])], F['f' + str(i + 1)])
        fg.set_edge(F['f' + str(i + 1)], X['x' + str(node_name[1])])
    draw(fg, nx.circular_layout(fg))
    plt.show()
    print([attr["type"].value for (n, attr) in fg.nodes(data=True)])
    belief = inference.loopy_belief_propagation(
        fg, 1000, [*X.values()], order=[*F.values(), *X.values()])
    print(X['x1'].belief())
    print(X['x2'].belief())
    print(X['x3'].belief())
Exemplo n.º 2
0
def make_debug_graph_new():
    fg = graphs.FactorGraph()
    x1 = nodes.VNode('x1', rv.Discrete)
    x2 = nodes.VNode('x2', rv.Discrete)
    x3 = nodes.VNode('x3', rv.Discrete)
    dist_fa = [[0.1, 0.7], [0.3, 0.2]]
    dist_f2 = [0.3, 0.7]
    f1 = nodes.FNode('f1', rv.Discrete(dist_f2, x1))
    f2 = nodes.FNode('f2', rv.Discrete(dist_fa, x1, x2))
    #f3 = nodes.FNode('f3', rv.Discrete(dist_fa, x1,x2 ))
    f4 = nodes.FNode('f4', rv.Discrete(dist_fa, x2, x3))
    print(f1.factor)
    fg.set_nodes([x1, x2, x3])
    fg.set_nodes([f1, f2, f4])
    # Add edges to factor graph
    fg.set_edge(f1, x1)
    fg.set_edge(x1, f2)
    fg.set_edge(f2, x2)
    #fg.set_edge(x2, f3)
    #fg.set_edge(f3, x1)
    fg.set_edge(x2, f4)
    fg.set_edge(x3, f4)
    draw(fg, nx.circular_layout(fg))
    plt.show()
    belief = inference.loopy_belief_propagation(fg,
                                                10, [x1, x2, x3],
                                                order=[f1, f2, f4, x1, x2, x3])
Exemplo n.º 3
0
def make_arbit_graph(num_nodes, graph_mat):
    # Create factor graph
    fg = graphs.FactorGraph()
    # Create variable nodes
    X = {}
    F = {}
    dist_fa = np.zeros([len(graph_mat), 2, 2])
    for k in range(len(graph_mat)):
        dist_fa[k] = np.random.rand(2, 2)
    for i in range(num_nodes):
        X['x' + str(i + 1)] = nodes.VNode("x" + str(i + 1), rv.Discrete, P)

    fg.set_nodes(X.values())
    for i in range(len(graph_mat)):
        edge = graph_mat[i]
        nodez = [X["x" + str(edge[m])] for m in range(len(edge))]
        F['f' + str(i + 1)] = nodes.FNode("f" + str(i + 1),
                                          rv.Discrete(dist_fa[i], *nodez))
    fg.set_nodes(F.values())

    for i in range(len(graph_mat)):
        node_name = graph_mat[i]
        fg.set_edge(X['x' + str(node_name[0])], F['f' + str(i + 1)])
        fg.set_edge(F['f' + str(i + 1)], X['x' + str(node_name[1])])

    print([attr["type"].value for (n, attr) in fg.nodes(data=True)])
    draw(fg, nx.spectral_layout(fg))
    plt.show()
    print([*F.values(), *X.values()])
    #belief = inference.loopy_belief_propagation(fg, 1000, [*X.values()], order=[*F.values(), *X.values()])
    grid = inference.nash_propagation(fg,
                                      10,
                                      epsilon,
                                      1 / 10, [*X.values()],
                                      order=[*F.values(), *X.values()])
    ## COmpute the mixed strategy
    prob = []
    prob_i = 0
    print(len(grid.keys()))
    length = 0
    for i in grid.keys():
        if (np.where(grid[str(i)] == 1) != []):
            length = length + 1

        prob_i = np.where(grid[str(i)] == 1)
        print('new')
        print(prob_i)
Exemplo n.º 4
0
def make_graph():
    G = graphs.FactorGraph()
    x1 = nodes.VNode('x1', rv.Discrete, P)
    x2 = nodes.VNode('x2', rv.Discrete, P)
    x3 = nodes.VNode('x3', rv.Discrete, P)
    x4 = nodes.VNode('x4', rv.Discrete, P)
    x5 = nodes.VNode('x5', rv.Discrete, P)
    dist_fa = np.array([[20, 10], [20, 80]])
    dist_fb = np.array([[40, 30], [30, 50]])
    dist_fc = np.array([[30, 50], [40, 30]])
    dist_fd = np.array([[70, 10], [10, 20]])
    dist_fe = np.array([[120, 50], [80, 100]])
    dist_ff = np.array([[40, 100], [70, 30]])
    dist_fg = np.array([[20, 10], [50, 30]])
    fa = nodes.FNode('f1', rv.Discrete(dist_fa, x1, x2))
    fb = nodes.FNode('f2', rv.Discrete(dist_fb, x2, x3))
    fc = nodes.FNode('f3', rv.Discrete(dist_fc, x3, x4))
    fd = nodes.FNode('f4', rv.Discrete(dist_fd, x4, x1))
    fe = nodes.FNode('f5', rv.Discrete(dist_fe, x4, x5))
    ff = nodes.FNode('f6', rv.Discrete(dist_ff, x5, x3))
    fg = nodes.FNode('f7', rv.Discrete(dist_fg, x1, x3))

    G.set_nodes([x1, x2, x3, x4, x5])
    G.set_nodes([fa, fb, fc, fd, fe, ff, fg])
    # Add edges to factor graph
    G.set_edge(x1, fa)
    G.set_edge(fa, x2)
    G.set_edge(x2, fb)
    G.set_edge(fb, x3)
    G.set_edge(x3, fc)
    G.set_edge(fc, x4)
    G.set_edge(x4, fd)
    G.set_edge(fd, x1)
    G.set_edge(fe, x4)
    G.set_edge(x5, fe)
    G.set_edge(ff, x5)
    G.set_edge(x3, ff)
    G.set_edge(fg, x1)
    G.set_edge(x3, fg)
    draw(G, nx.spectral_layout(G))
    plt.show()
    inference.nash_propagation(
        G,
        20,
        epsilon,
        1 / 30, [x1, x2, x3, x4, x5],
        order=[fa, fb, fc, fd, fe, ff, fg, x1, x2, x3, x4, x5])