def version1_entry(world, starts, goals, start_time, max_time, weights, cache): agents = [ version1.Agent(world, starts[i], goals[i], weights=weights, caching=cache) for i in range(len(starts)) ] return version1.version1(agents, start_time, max_time, False)
def eval_weights(algorithm, weights, num_problems, max_agents): # Generate problems problems = [] while len(problems) < num_problems: for i in range(2, max_agents): problems.append(util.generate_problem(i, 16, 16, OBSTACLES)) if len(problems) == num_problems: break actual = [] optimal = [] for world, starts, goals in problems: start_time = timeit.default_timer() optimal.append(0) agents = [ version1.Agent(world, starts[i], goals[i], weights=weights) for i in range(len(starts)) ] # Calculate the sum length of the paths try: for agent in agents: agent.plan(start_time=start_time, max_time=MAX_TIME) optimal[-1] += len(agent.path) except (odid.TimeExceeded, rra_star.NoValidPathExists, util.NoPathsFoundException, version1b.ConflictNotSolved): actual.append(float('inf')) continue # Do the actual cooperative planning try: res = algorithm.entry(world, starts, goals, start_time, MAX_TIME, **algorithm.kwargs) actual.append(sum(len(path) for path in res['paths'])) except (odid.TimeExceeded, rra_star.NoValidPathExists, util.NoPathsFoundException, version1b.ConflictNotSolved): actual.append(float('inf')) diff = [ res[1] - res[0] for res in zip(optimal, actual) if res[1] != float('inf') ] print(diff) if len(diff) == 0: return float('inf') return sum(diff) / len(diff)
def main(runs, max_agents): # Generate problems problems = [] while len(problems) < runs: for i in range(2, max_agents): problems.append(util.generate_problem(i, 16, 16, 0.2)) if len(problems) == runs: break f = open('poc_bench.csv', 'w') i = 0 f.write('num,od,poc,version1\n') global_start_time = timeit.default_timer() for problem in problems: f.write(f'{i},') i += 1 # Run OD+ID start_time = timeit.default_timer() try: odid.odid2(len(problem[1]), *problem, start_time=start_time, max_time=MAX_TIME) end_time = timeit.default_timer() f.write(f'{end_time-start_time},') except odid.TimeExceeded: end_time = timeit.default_timer() print('OD+ID failed') f.write('NA,') except (rra_star.NoValidPathExists, util.NoPathsFoundException): print('No valid path exists') f.write('NA,') finally: print(f'OD time: {(end_time - start_time) * 1000:5.3f}ms') # Run proof of concept start_time = timeit.default_timer() try: agents = [ poc.Agent(problem[0], problem[1][i], problem[2][i]) for i in range(len(problem[1])) ] poc.poc(agents, start_time=start_time, max_time=MAX_TIME) end_time = timeit.default_timer() f.write(f'{end_time-start_time},') except odid.TimeExceeded: end_time = timeit.default_timer() print('POC failed') f.write('NA,') except (rra_star.NoValidPathExists, util.NoPathsFoundException): print('No valid path exists') f.write('NA,') finally: print(f'POC time: {(end_time - start_time) * 1000:5.3f}ms') # Run Version 1 start_time = timeit.default_timer() try: agents = [ version1.Agent(problem[0], problem[1][i], problem[2][i]) for i in range(len(problem[1])) ] version1.version1(agents, start_time, MAX_TIME, False) end_time = timeit.default_timer() f.write(f'{end_time-start_time}\n') except odid.TimeExceeded: end_time = timeit.default_timer() print('Version1 failed') f.write('NA\n') except (rra_star.NoValidPathExists, util.NoPathsFoundException): print('No valid path exists') f.write('NA\n') finally: print(f'Version1 time: {(end_time - start_time) * 1000:5.3f}ms') # Write latest results to file f.flush() global_end_time = timeit.default_timer() print(f'Final time: {(global_end_time - global_start_time) * 1000:5.3f}ms') f.close()