def generic_solver_multi(maze_num): maze_map = mazes[maze_num] selected_type = request.args.get('search_type') # change string to enum selected_type = search_type.A_Star if selected_type == "a_star" else selected_type selected_type = search_type.DFS if selected_type == "dfs" else selected_type selected_type = search_type.BFS if selected_type == "bfs" else selected_type selected_type = search_type.GFS if selected_type == "gfs" else selected_type s = search(selected_type, maze_map) targets_dict = s.get_path() distance = s.get_cost() targets_ordered = list(targets_dict.keys()) path = multi_point_path(targets_dict) # points = path_id_to_points(maze_map, path) for k in targets_dict.keys(): path_ids = targets_dict[k] path = [maze_map.graph.nodes[id_] for id_ in path_ids] points = path_to_points(path) targets_dict[k] = points return json.dumps({"points": targets_dict, "order": targets_ordered, "cost": distance}, cls=EnhancedJSONEncoder)
def map_sol_a_star(maze_num): maze_map = mazes[maze_num] start_node = maze_map.get_node_by_map_point(maze_map.player) target_node = maze_map.get_node_by_map_point(maze_map.traget[0]) path, cost = a_star_one_target(start_node, target_node) points = path_to_points(path) distance = path_to_distance(path) return json.dumps({"points": points, "cost": distance}, cls=EnhancedJSONEncoder)
def map_sol_bfs(maze_num): maze_map = mazes[maze_num] starting_point = maze_map.get_node_by_map_point(maze_map.player).id sol = BFS_Solver(starting_point, maze_map.graph, maze_map) BFS(maze_map.graph, starting_point, sol.solver, sol.steps_counter) path_dict = sol.get_result() path_ids = path_dict[next(iter(path_dict))] path = [maze_map.graph.nodes[id_] for id_ in path_ids] distance = path_to_distance(path) points = path_to_points(path) return json.dumps({"points":points,"cost":distance}, cls=EnhancedJSONEncoder)
def map_sol_gfs(maze_num): maze_map = mazes[maze_num] starting_point = maze_map.get_node_by_map_point(maze_map.player).id graph = maze_map.graph sol = GFS_Solver(graph, starting_point) informed_multi_target_solver( GFS, graph, starting_point, maze_map, sol.solve, sol.steps_counter) path_dict = sol.get_path() path_ids = path_dict[next(iter(path_dict))] path = [maze_map.graph.nodes[id_] for id_ in path_ids] distance = path_to_distance(path) points = path_to_points(path) return json.dumps({"points": points, "cost": distance}, cls=EnhancedJSONEncoder)
def map_sol_dfs(maze_num): maze_map = mazes[maze_num] adjc_dict = maze_map.graph.get_adjacency_dict() start_node = maze_map.get_node_by_map_point(maze_map.player) target_node = maze_map.get_node_by_map_point(maze_map.traget[0]) path_ids = dfs_single_target(start_node.id, target_node.id, adjc_dict) path = [maze_map.graph.nodes[id_] for id_ in path_ids] # cost = path_to_distance(path) route = path_to_points(path) distance = path_to_distance(path) points = route return json.dumps({"points": points, "cost": distance}, cls=EnhancedJSONEncoder)
def map_sol_multi_a_star(maze_num): maze_map = mazes[maze_num] starting_point = maze_map.get_node_by_map_point(maze_map.player).id targets_dict = a_star_multi_target(maze_map, maze_map.player.node_id) targets_ordered = list(targets_dict.keys()) path = multi_point_path(targets_dict) res_nodes = [maze_map.graph.nodes[id_] for id_ in path] distance = path_to_distance(res_nodes) #convert to points for k in targets_dict.keys(): path_ids = targets_dict[k] path = [maze_map.graph.nodes[id_] for id_ in path_ids] points = path_to_points(path) targets_dict[k] = points return json.dumps({"points": targets_dict, "order": targets_ordered, "cost": distance}, cls=EnhancedJSONEncoder)
def map_sol_multi(maze_num): maze_map = mazes[maze_num] starting_point = maze_map.get_node_by_map_point(maze_map.player).id graph = maze_map.graph sol = GFS_Solver(graph, starting_point) informed_multi_target_solver( GFS, graph, starting_point, maze_map, sol.solve, sol.steps_counter) targets_dict = sol.get_path() # targets_dict.keys() targets_ordered = list(targets_dict.keys()) distance = sol.res_path_cost() #convert to points for k in targets_dict.keys(): path_ids = targets_dict[k] path = [maze_map.graph.nodes[id_] for id_ in path_ids] points = path_to_points(path) targets_dict[k] = points return json.dumps({"points": targets_dict,"order":targets_ordered, "cost": distance}, cls=EnhancedJSONEncoder)