如果你在看集体编程智慧这本书,第五章的遗传算法时候,出现这样的错误:TypeError: object of type 'NoneType' has no len()。。
请注意下面这个函数:
def mutate(vec):
i=random.randint(0,len(domain)-1)
if random.random()<0.5 and vec[i]>domain[i][0]:
return vec[0:i]+[vec[i]-step]+vec[i+1:]
elif vec[i]<domain[i][1]:
return vec[0:i]+[vec[i]+step]+vec[i+1:]
若输入vec同时不满足两个if的条件,该函数就不会有return 语句。因此该函数就会默认返回None.所以就出现了上面的错误。
修改方法如下,在函数最后一句加上return vec,或者其他方法,总之要返回一个列表
def mutate(vec):
i=random.randint(0,len(domain)-1)
if random.random()<0.5 and vec[i]>domain[i][0]:
return vec[0:i]+[vec[i]-step]+vec[i+1:]
elif vec[i]<domain[i][1]:
return vec[0:i]+[vec[i]+step]+vec[i+1:]
return vec
第六章,如果你的一些概率计算为0,可能是int除法的一些问题,即整数2/3=0,在相应变量前面乘以1。0就可以了。