Exemple #1
0
def compare_algorithms(test_maze):

    algo_comparison_df = pd.DataFrame(columns=column_name_list)

    # BFS
    maze = copy.deepcopy(test_maze)
    result_dict = bfs_traversal(maze, len(maze))
    path = maze_runner.get_path(dim - 1, dim - 1, maze)
    df_entry = pd.DataFrame(
        [(len(path), result_dict["total_steps"],
          result_dict["max_fringe_length"], result_dict["avg_fringe_length"])],
        columns=column_name_list,
        index=['BFS'])
    algo_comparison_df = algo_comparison_df.append(df_entry)

    # DFS
    maze = copy.deepcopy(test_maze)
    result_dict = dfs_traversal(maze, len(maze))
    path = maze_runner.get_path(dim - 1, dim - 1, maze)
    df_entry = pd.DataFrame(
        [(len(path), result_dict["total_steps"],
          result_dict["max_fringe_length"], result_dict["avg_fringe_length"])],
        columns=column_name_list,
        index=['DFS'])
    algo_comparison_df = algo_comparison_df.append(df_entry)

    # BD-BFS
    maze = copy.deepcopy(test_maze)
    result_dict = bd_bfs(maze, len(maze))
    df_entry = pd.DataFrame(
        [(result_dict["path_length"], result_dict["total_steps"],
          result_dict["max_fringe_length"], result_dict["avg_fringe_length"])],
        columns=column_name_list,
        index=['BD-BFS'])
    algo_comparison_df = algo_comparison_df.append(df_entry)

    # a-star with manhattan heuristic
    maze = copy.deepcopy(test_maze)
    result_dict = a_star_traversal(maze, "manhattan")
    path = maze_runner.get_path(dim - 1, dim - 1, maze)
    df_entry = pd.DataFrame(
        [(len(path), result_dict["total_steps"],
          result_dict["max_fringe_length"], result_dict["avg_fringe_length"])],
        columns=column_name_list,
        index=['astar_manhattan'])
    algo_comparison_df = algo_comparison_df.append(df_entry)

    # a-star with euclidian heuristic
    maze = copy.deepcopy(test_maze)
    result_dict = a_star_traversal(maze, "euclidian")
    path = maze_runner.get_path(dim - 1, dim - 1, maze)
    df_entry = pd.DataFrame(
        [(len(path), result_dict["total_steps"],
          result_dict["max_fringe_length"], result_dict["avg_fringe_length"])],
        columns=column_name_list,
        index=['astar_euclidian'])
    algo_comparison_df = algo_comparison_df.append(df_entry)

    return algo_comparison_df
def test_population(new_maze_population):
    print "--------------------"
    print "Population Solvability Check"
    for curr_maze_count in range(new_maze_population.qsize()):
        curr_maze = new_maze_population.queue[curr_maze_count]
        curr_maze_result_dict = \
         a_star_traversal(copy.deepcopy(curr_maze[1]), "manhattan")
        if not curr_maze_result_dict["is_solvable"]:
            print "ERROR!!!"
            maze_runner.visualize_maze(copy.deepcopy(curr_maze[1]))
        print curr_maze_result_dict["is_solvable"]
    print "--------------------"
Exemple #3
0
def get_avg_times_and_total_tries(dim, p):
    total_time = 0
    avg_time = 0.0
    success_count = 0
    max_avg_time = 0
    totaltries = 0

    for i in xrange(0, 100):
        while (True):
            test_maze = get_maze(dim, p)
            totaltries = totaltries + 1
            startTime = time.time()
            result_dict = a_star_traversal(test_maze, "manhattan")
            end_time = time.time()
            if result_dict["is_solvable"]:
                time_taken = end_time - startTime
                avg_time = avg_time + (time_taken -
                                       avg_time) / (success_count + 1)
                total_time += time_taken
                success_count = success_count + 1
                # print "Success count: " + str(success_count)
                break

    return avg_time, total_time, totaltries
Exemple #4
0
import maze_runner
from a_star import a_star_traversal

dim = 50
steps_p = []
p_list = [0, 0.1, 0.15, 0.2, 0.25, 0.3]

for p in p_list:
    steps = 0
    for i in range(10):
        while (True):
            test_maze = maze_runner.get_maze(dim, p)
            result_dict = a_star_traversal(test_maze, "manhattan")
            if result_dict["is_solvable"]:
                curr_steps = len(result_dict["closed_set"])
                steps += curr_steps
                break
    steps_p.append(steps / 10)
steps_p = steps_p

pyplot.xlabel("P")
pyplot.ylabel("Exploration Steps")
pyplot.title("Exploration Steps v/s p for dim=50")
pyplot.plot(p_list, steps_p, marker='o')
plt.show()
# priority queue with fitness (i.e. hardness) associated with each maze
maze_population = PriorityQueue()
population_size = 50
total_crossovers = 50
mutation_rate = 0.02
generations = 500
population_fitness_vector = []
column_list = ['best_fitness', 'avg_fitness']
generation_stats_df = pd.DataFrame(columns=column_list)

for i in range(population_size):
    while True:
        maze = maze_runner.get_maze(dim, p)

        # find path using a_star
        result_dict = a_star_traversal(copy.deepcopy(maze), "manhattan")

        # calculate fitness using the max number of nodes explored
        maze_fitness = -result_dict["total_steps"]
        if result_dict["is_solvable"]:
            break

    maze_population.put((maze_fitness, copy.deepcopy(maze)))
    population_fitness_vector.append(-maze_fitness)

print "initial population generated"

for generation_count in range(generations):
    print "Generation: ", generation_count
    for crossover_count in range(total_crossovers):
        # keep generating child mazes until we find a solvable one