Ejemplo n.º 1
0
def run_simulation():
    num_generation = 25
    num_population = 20
    num_drones = 9

    limit = 10
    limit_x = limit
    limit_y = limit
    limit_z = limit

    maximum_drone_per_box = 4

    p_c = 0.6
    p_m = 0.25
    alpha = 0.5

    collision_penalty = 10000

    starting_cube = {'x': 0, 'y': 0, 'z': 0}
    goal_cube = {'x': 9, 'y': 9, 'z': 9}

    print('S18 ECE457A Project simulation (Group12)')
    my_ga = GeneticAlgorithm()
    print('GA parameters -- num_generation:{0}, num_population:{1}'.format(
        num_generation, num_population))

    universe = Universe(limit_x, limit_y, limit_z, starting_cube, goal_cube,
                        maximum_drone_per_box, p_c, p_m, alpha)

    print('Creating universe with x:{0} y:{1} z:{2}'.format(
        limit_x, limit_y, limit_z))
    print('                       num_drones:{0}'.format(num_drones))
    print('                       P_crossover:{0} P_mutation:{1}'.format(
        p_c, p_m))
    print('                       alpha for crossover:{0}'.format(alpha))
    print(
        '                       maximum_drones_per_box:{0}, collision_penalty:{1}'
        .format(maximum_drone_per_box, collision_penalty))

    print('\nLower score is better!\n')

    very_first_generation = Generation(0)
    for _ in range(num_population):
        universe.reset()
        universe.init_drones(num_drones)
        universe.gen_solutions()
        universe.compute_cost_and_collision()
        score = universe.compute_score(collision_penalty)
        a_solution = Solution(score, universe.drones, universe.num_collision)
        very_first_generation.add_population(a_solution)
    my_ga.add_a_generation(very_first_generation)

    for i in range(1, num_generation):
        prev_generation = my_ga.generations[i - 1]
        generation = Generation(i, prev_generation)
        for _ in range(num_population):
            universe.reset()
            universe.init_drones(num_drones)
            # universe.gen_children(prev_generation.best, prev_generation.second_best)
            universe.gen_children2(prev_generation.best,
                                   prev_generation.second_best, num_drones)
            universe.compute_cost_and_collision()
            score = universe.compute_score(collision_penalty)
            a_solution = Solution(score, universe.drones,
                                  universe.num_collision)
            generation.add_population(a_solution)
        my_ga.add_a_generation(generation)