Python 3.x 在嵌套列表中翻转位
我有一个项目,我必须使用遗传算法的位翻转变异 到目前为止,我的代码如下所示:Python 3.x 在嵌套列表中翻转位,python-3.x,mutation,Python 3.x,Mutation,我有一个项目,我必须使用遗传算法的位翻转变异 到目前为止,我的代码如下所示: def mutation(pop, mr): for i in range(len(pop)): if (random.random() < mr): if (pop[i] == 1): pop[i] = 0 else: pop[i] = 1 else:
def mutation(pop, mr):
for i in range(len(pop)):
if (random.random() < mr):
if (pop[i] == 1):
pop[i] = 0
else:
pop[i] = 1
else:
pop[i] = pop[i]
return pop
mut = mutation(populations, 0.3)
print(mut)
我正在做的是将随机生成的数字分配给群体中的元素
,并检查它是否小于突变率
。如果是,那么将发生位翻转突变
,如果不是,它将保持原样。对于群体1
的情况,如果群体1指数2
小于突变率,则应变为[1,0]
。对于群体_2索引3
,如果小于突变率,则应变为[0]
。这是变异函数的目标
有谁能帮我改变我目前掌握的代码,以适应类似于1的情况吗?我认为到目前为止我的代码只适用于U2
如有任何帮助/建议/阅读,将不胜感激!谢谢 你可以使用列表理解来做你想做的事。只有当rI不确定population\u 1
索引2中的值为[1,1]
时,pop
中的值才会更新。在这种情况下,它们应该变成[0,0]
?@DavideBrex如果它满足条件,那么它应该。[0,0]也是如此。对于总体_1索引1,如果它满足突变条件,则应该是这样。[0,0](如果生成的random小于[1,1],则应为[1,1])。感谢先生!我将尝试了解您提供的代码发生了什么。我更新了答案,现在我将在一分钟内解释代码感谢您的解释。非常感谢!
populations_1 = [[1, 0], [1, 1], [0, 1], [1, 0]]
populations_2 = [[1], [1], [0], [1]]
def mutation(pop, mr):
for i in range(len(pop)):
r = random.random()
print(r) # you can remove this line, it is only for testing
if r < mr:
pop[i] = [1 if a == 0 else 0 for a in pop[i]]
return pop
populations_1 = [[1, 0], [1, 1], [0, 1], [1, 0], [0,0]]
mut = mutation(populations_1, 0.3)
print(mut)
#random number for each iteration
0.3952226177233832
0.11290933711515283
0.08131952363738537
0.8489702326753509
0.9598842135077205
#output:
[[1, 0], [0, 0], [1, 0], [1, 0], [0, 0]]
populations_2 = [[1], [1], [0], [1]]
mut = mutation(populations_2, 0.3)
print(mut)
0.3846024893833684
0.7680389523799874
0.19371896835988422
0.008814288533701364
[[1], [1], [1], [0]]