def simulate(): random.seed(1234) #num_neighbors_options = [3, 10, 20] num_neighbors_options = [3, 10, 20] # reverse order because of plot_error_history #num_iterations_options = [1000, 200, 20] num_iterations_options = [1000] runs_per_config = 3 total_runs = len(num_neighbors_options) * len(num_iterations_options) * runs_per_config runs_done = 0 rerr = [None]*(len(num_neighbors_options)*len(num_iterations_options)) error_history = [None]*(len(num_neighbors_options)*len(num_iterations_options)) conf = [None]*(len(num_neighbors_options)*len(num_iterations_options)) curr_conf = 0 move_length_history = [None]*(len(num_neighbors_options)*len(num_iterations_options)) for num_neighbors in num_neighbors_options: for num_iterations in num_iterations_options: c = Configuration(num_nodes, num_neighbors, num_iterations) conf_rerr = [0]*num_nodes conf_error_history = [0]*num_iterations conf_move_len = [0]*num_iterations conf[curr_conf] = "K: {}, i: {}".format(num_neighbors, num_iterations) update_runs_completed(runs_done, total_runs) for run in xrange(runs_per_config): v = Vivaldi(init_graph, c) v.run() predicted = v.getRTTGraph() temp_rerr = v.getRelativeError(predicted) listadd(conf_rerr, temp_rerr) listadd(conf_error_history, v.error_history) listadd(conf_move_len, v.move_len_history) runs_done += 1 update_runs_completed(runs_done, total_runs) listdiv(conf_rerr, runs_per_config) listdiv(conf_error_history, runs_per_config) listdiv(conf_move_len, runs_per_config) rerr[curr_conf] = conf_rerr error_history[curr_conf] = conf_error_history move_length_history[curr_conf] = conf_move_len curr_conf += 1 finish_runs_completed(runs_per_config) return { 'rerr' : rerr, 'error_history': error_history, 'move_length_history': move_length_history }, conf
infile.close() # These parameters are part of the Configuration. # Modify them according to your need. num_neighbors = 20 num_iterations = 200 # build a configuration and load the matrix into the graph c = Configuration(num_nodes, num_neighbors, num_iterations) init_graph = buildgraph(rows) print "Running Vivaldi on a %d size matrix" % num_nodes print "Num neighbors = %d " % num_neighbors print "Num iterations = %d " % num_iterations v = Vivaldi(init_graph, c) v.run() # get predicted graph predicted = v.getRTTGraph() # get relative errors (one value per node) rerr = v.getRelativeError(predicted) # average of node movements average = sum(v.movements) / len(v.movements) # variance of node movements variance = sum((average - value) ** 2 for value in v.movements) / len(v.movements) print "Position variation:" print "Maximum: %.2f"%max(v.movements)
num_neighbors = 10 num_iterations = 200 num_dimension = 3 # build a configuration and load the matrix into the graph c = Configuration(num_nodes, num_neighbors, num_iterations, d=num_dimension) init_graph = buildgraph(rows) print "Running Vivaldi on a %d size matrix" % num_nodes print "Num dimensions = %d " % c.num_dimension print "Num neighbors = %d " % num_neighbors print "Num iterations = %d " % num_iterations # run vivaldi: here, only the CDF of the relative error is retrieved. # Modify to retrieve what's requested. v = Vivaldi(init_graph, c) v.run() predicted = v.getRTTGraph() rerr = v.getRelativeError(predicted) table([100*x for x in rerr], "RELATIVE ERROR (%)") # print predicted # print rerr # for i in v.positions: # print "%4d %4d" % (int(i[0]), int(i[1])) # Example (using pylab plotting function): # x = [i[0] for i in v.positions] # y = [i[1] for i in v.positions]