for mutant in offspring if randomrandom mutation_probability if randomrandom05 #反转变异 均匀变异--按照01固定的概率对每个基因进行随机变异 mutant = reverse_mutationmutant indpb=0
上述代码存在一个问题,即对变异后的个体进行赋值操作并不会影响原始的offspring列表中的元素。这是因为在Python中,对列表中的元素进行赋值操作并不会改变原始列表中的元素,而是创建了一个新的对象。
因此,即使成功进行了变异操作,但是对mutant的赋值操作并不会对offspring列表中的元素产生影响,所以offspring列表中的元素并没有成功变异产生新的子代染色体。
要解决这个问题,可以使用索引来直接修改offspring列表中的元素。修改后的代码如下:
for i, mutant in enumerate(offspring):
if random.random() < mutation_probability:
if random.random() < 0.5:
offspring[i] = reverse_mutation(mutant, indpb=0.2)
else:
offspring[i] = swap_mutation(mutant, indpb=0.2)
这样修改后,对mutant进行的变异操作会直接修改offspring列表中的元素,从而成功变异产生新的子代染色体
原文地址: https://www.cveoy.top/t/topic/ipEQ 著作权归作者所有。请勿转载和采集!