Exemple #1
0
def make_next_generation(population, pizza):
    mating_pool = population[:int(c_par * P)]

    next_generation = []
    for _ in range(int(c_rec * P) // 2):
        A, B = random.sample(mating_pool, 2)
        C, D = A.recombine(B, pizza)
        next_generation += [C, D]

    next_generation += mating_pool

    for _ in range(int(c_mut * P)):
        # A = random.choice(next_generation)
        A = mating_pool[0]
        B = A.copy()
        levels = random.choice([1, 2, 3])
        B.mutate(pizza, levels)
        next_generation.append(B)

    for _ in range(int(c_ran * P)):
        A = Individual({}, slices, n_col, n_row, L, H)
        A.fill_layout(pizza)
        next_generation.append(A)

    next_generation.sort(key=lambda x: x.efficiency(), reverse=True)
    return next_generation
Exemple #2
0
        for pos, k in s_list:
            _lay[tuple(pos)] = k
        A = Individual(_lay, slices, n_col, n_row, L, H)
        population.append(A)

    return population


pizza, n_row, n_col, L, H = read_setup(inp_fpath)
slices = generate_possible_slices(L, H)

if resume == False:
    population = []
    for i in range(P):
        A = Individual({}, slices, n_col, n_row, L, H)
        A.fill_layout(pizza)
        population.append(A)
    population.sort(key=lambda x: x.efficiency(), reverse=True)
else:
    print("Continuing previous optimization.")
    population = load_population(
        res_path + "generations_backup/G_%s.json" % i2s(i_start, 4), slices,
        n_col, n_row, L, H, pizza)
    print(len(population), P)
    if len(population) < P:
        print(
            "Loaded population is smaller than the given max population.\nExtending it with random individuals."
        )
        while len(population) < P:
            A = Individual({}, slices, n_col, n_row, L, H)
            A.fill_layout(pizza)