Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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)