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()
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)))
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
def main(): tree = r_tree(nodes=8) root = get_root(tree) ratio_heuristic(tree, [root], 1)