示例#1
0
def main():
    # test
    num_nodes = 8
    G = r_tree(num_nodes)
    plot_graph(G, 0, 'environment_debug_graph.png')
    env = n_environment(G, [0], 1)
    for x in range(1, num_nodes):
        print(env.step(x))

    env.reset()
    print('Reset env =========================')
    while not env.done:
        print(env.step(random.randint(0, num_nodes - 1)))
        print()
def sanity_test():
    # Run a quick sanity check
    num_nodes = 7
    G = r_tree(num_nodes)
    plot_graph(G, get_root(G), 'environment_debug_graph.png')
    env = environment(G, [get_root(G)], 1)
    while not env.done:
        print(env.step(random.randint(0, 10)))
        print()

    env.reset()
    print('Reset env =========================')
    while not env.done:
        print(env.step(random.randint(0, 10)))
        print()
示例#3
0
def main():
    num_nodes = 7
    resources = 1
    G = r_tree(num_nodes)

    plot_graph(G, 0, 'environment_debug_graph.png')
    utils = [0 for _ in range(num_nodes)]
    for key, val in nx.get_node_attributes(G, 'util').items():
        utils[key] = val
    demand = [0 for _ in range(num_nodes)]
    for key, val in nx.get_node_attributes(G, 'demand').items():
        demand[key] = val

    N = len(utils)
    S = int(np.ceil(np.sum(demand) / resources))
    obj_func = create_u_t(G, utils, demand, resources)

    print(obj_func(np.zeros(N * S)))
示例#4
0
def generate_graph(nodes=20,
                   utils=[1, 4],
                   demands=[1, 2],
                   load_dir=None,
                   type='random_tree',
                   seed=None):
    # Generate random tree
    if type == 'random_tree':
        if load_dir:
            graph = nx.read_gpickle(
                'experiments/{0}_rtree.gpickle'.format(nodes))
        else:
            graph = r_tree(nodes, utils, demands)
        save = 'experiments/{0}_rtree.txt'.format(nodes)
        real_node_num = nodes

    # Generate random graph by adding edges according to some p-value (0.2)
    elif type == 'random_graph':
        if load_dir:
            graph = nx.read_gpickle(
                'experiments/{0}_rgraph.gpickle'.format(nodes))
        else:
            graph = r_graph(nodes, 0.2, utils, demands, seed)
        save = 'experiments/{0}_rgraph.txt'.format(nodes)
        real_node_num = nodes

    # Generate random nodes x nodes 2-d grid graph
    elif type == 'grid':
        if load_dir:
            graph = nx.read_gpickle(
                'experiments/{0}x{0}.gpickle'.format(nodes))
        else:
            graph = r_2d_graph(nodes, nodes, utils, demands)
        save = 'experiments/{0}x{0}.txt'.format(nodes)
        real_node_num = nodes**2

    # Generate adversarial examples for the ratio heuristic
    elif type == 'adversarial':
        graph = adv_graph(nodes, utils, demands)
        save = 'experiments/{0}_adv_graph.txt'.format(nodes)
        real_node_num = nodes

    # Read a normal gml file and randomly pick utils, demands
    elif type == 'gml':
        # WARNING: Turn off fix_nodes_around_adv for normal use. This fixes the
        # nodes adjacent to vertex(num_nodes - 2) to be bad for the ratio heuristic.
        # For use in conjunction with 'gml_adversarial'.
        graph = read_gml(load_dir, utils, demands, fix_nodes_around_adv=False)
        save = 'experiments/{0}.txt'.format('gml')
        real_node_num = len(graph)

    # Read a gml file and randomly pick utils, demands but also
    # embed an adversarial example somewhere in the graph.
    elif type == 'gml_adversarial':
        graph = read_gml_adversarial(load_dir, utils, demands)
        save = 'experiments/{0}_adv_graph.txt'.format('gml')
        real_node_num = len(graph)

    elif type == 'gnp_adversarial':
        graph = gnp_adversarial(nodes, utils, demands)
        save = 'experiments/{0}_gnp_adv_graph.txt'.format(nodes)
        real_node_num = nodes

    else:
        raise NotImplementedError

    # Real number of nodes may be different from input node num (in the case of grid graph)
    return graph, save, real_node_num
示例#5
0
def main():
    tree = r_tree(nodes=8)
    root = get_root(tree)
    ratio_heuristic(tree, [root], 1)