1

我在执行生成新人口时遇到了这个问题。我有一组矩阵,我定义了一个适应度函数,我需要适应度值尽可能低。所以我实现了重新创建种群的功能,只保留之前最好的个体,如下所示:

def new_generation(old_generation, real_coords, elit_rate = ELIT, mutation_rate = MUTATION_RATE, half = HALF, mtype = "strong"):
fit = [fitness(individual, real_coords) for individual in old_generation]
idx = np.argsort(fit)
print(idx)
new_gen = []
for i in range(n_population):
    if i < ELIT:
        new_gen.append(old_generation[idx[i]]) 
    else: 
        new_gen.append(crossover(old_generation[idx[np.random.randint(0,n_population)]], old_generation[idx[np.random.randint(0,n_population)]]))

for i in range(n_population):    
    if np.random.rand() < mutation_rate:
        if i > ELIT:
            new_gen[i] = mutate(new_gen[i],mtype)
print("new gen")
print([fitness(individual, real_coords) for individual in new_gen])
return new_gen

我的问题是,我得到的新一代并没有真正与第一代健康度最低的人一起订购!(ELIT 为 10,n_population 为 100)

我认为我的问题在于我所做的部分:

for i in range(n_population):
    if i < ELIT:
        new_gen.append(old_generation[idx[i]])

因为在我的脑海中,这应该保证我拥有我想要的 new_gen 中的第一个人。

我哪里错了?谢谢!

4

0 回答 0