Python TypeError:'float'对象不可调用问题(粒子群算法速度计算场景)
问题:粒子群算法速度计算函数调用时触发TypeError错误
我在实现粒子群算法的新速度计算逻辑时遇到了问题。这个逻辑基于历史速度和位置计算新速度,函数new_velocity定义时无报错,但调用时触发TypeError: 'float' object is not callable,错误指向速度计算公式行,推测是数学运算相关问题。
函数定义代码
def new_velocity(part, pop): r1 = random.random() r2 = random.random() vel = part[2] new_v = w*np.array(vel) + c1*r1*(np.array(pbest(part))-np.array(part[1])) + c2*r2(np.array(gbest(pop))-np.array(part[1])) return new_v
调用代码
pop = population(20) p = pop[0] vel = p[2] newv = new_velocity(p,pop) print(p) print(vel) print(newv)
报错信息
TypeError Traceback (most recent call last) <ipython-input-109-721e9d90164a> in <module> 2 p = pop[0] 3 vel = p[2] ----> 4 newv = new_velocity(p,pop) 5 print(p) 6 print(vel) <ipython-input-100-3d3e0223d8d9> in new_velocity(part, pop) 3 r2 = random.random() 4 vel = part[2] ----> 5 new_v = w*np.array(vel) + c1*r1*(np.array(pbest(part))-np.array(part[1])) + c2*r2(np.array(gbest(pop))-np.array(part[1])) 6 return new_v TypeError: 'float' object is not callable
问题原因与修复
报错核心是乘法运算符缺失:
- 代码中
c2*r2(np.array(gbest(pop))-np.array(part[1]))部分,r2是float类型随机数,后面直接跟括号会被Python判定为函数调用,但r2并非函数,因此触发错误。 - 正确写法需在
r2与后续括号间添加*运算符。
修复后的函数代码:
def new_velocity(part, pop): r1 = random.random() r2 = random.random() vel = part[2] new_v = w*np.array(vel) + c1*r1*(np.array(pbest(part))-np.array(part[1])) + c2*r2*(np.array(gbest(pop))-np.array(part[1])) return new_v
额外检查项:
- 确认
w、c1、c2等全局变量已正确定义为数值类型 - 确认
pbest和gbest函数能正常返回可转为numpy数组的结果,且无同名变量冲突
内容的提问来源于stack exchange,提问作者Callous_Narni
相关产品推荐
相关产品推荐

