我在执行生成新人口时遇到了这个问题。我有一组矩阵,我定义了一个适应度函数,我需要适应度值尽可能低。所以我实现了重新创建种群的功能,只保留之前最好的个体,如下所示:
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 中的第一个人。
我哪里错了?谢谢!