我已经尝试了很长时间才发现和/或谷歌自己对此有所回答。在我写的遗传算法中,rand_funcs
将为序列中的基因填充适当的随机化函数。在这种情况下,它应该填充两个随机函数:一个生成0到2之间的随机数,另一个生成0到74之间的随机数。
但是,正如您从以下代码和生成的输出中可以看到的那样,结果是两个函数都生成0到2之间的数字。这怎么可能?我甚至尝试在deepcopy
上使用max_nr
,然后再将其发送给lambda
函数创建者。
感谢任何建议!
self.gene_types = ["int74","int2"]
self.sequence_length = len(gene_types)
self.rand_funcs = []
maxnrs = []
for gt in self.gene_types:
print(gt, file=sys.stderr)
if gt == "bit":
self.rand_funcs.append(lambda: random.random() < 0.5)
elif gt == "float":
self.rand_funcs.append(random.random)
elif gt[:3] == "int":
print("laaaaal", id(gt), gt[3:], file=sys.stderr)
max_nr = int(gt[3:]) #WHY IS THIS EQUAL TO TWO FOR BOTH AFTER SECOND ITERATION?!?!??!
maxnrs.append(int(gt[3:]))
print(maxnrs, max_nr, type(max_nr), id(max_nr), file=sys.stderr)
print(*map(id, maxnrs), file=sys.stderr)
if len(self.rand_funcs) >= 1:
print("meep meep", self.rand_funcs[0](), file=sys.stderr)
print(*map(id, maxnrs), file=sys.stderr)
self.rand_funcs.append(lambda: random.randint(0,max_nr))
print(*map(id, self.rand_funcs), file=sys.stderr)
for f in self.rand_funcs:
print("meep", f(), file=sys.stderr)
else:
raise ValueError("Unknown gene type")
print(self.rand_funcs[0](), file=sys.stderr)
print(self.rand_funcs[1](), file=sys.stderr)
print("maxes", maxnrs, file=sys.stderr)
这是输出:
int74
laaaaal 140047932053576 74
[74] 74 <class 'int'> 94881069021088
94881069021088
140047869933360
meep 73
int2
laaaaal 140047932053632 2
[74, 2] 2 <class 'int'> 94881069018784
94881069021088 94881069018784
meep meep 2
94881069021088 94881069018784
140047869933360 140047869933496
meep 0
meep 1
2
1
maxes [74, 2]