Python编译器错误,x不需要参数(给出1)
我正在写一小段python作为家庭作业,而我却没有把它运行起来! 我没有太多的Python经验,但是我知道很多Java。 我试图实现一个粒子群优化algorithm,这里是我有:
class Particle: def __init__(self,domain,ID): self.ID = ID self.gbest = None self.velocity = [] self.current = [] self.pbest = [] for x in range(len(domain)): self.current.append(random.randint(domain[x][0],domain[x][1])) self.velocity.append(random.randint(domain[x][0],domain[x][1])) self.pbestx = self.current def updateVelocity(): for x in range(0,len(self.velocity)): self.velocity[x] = 2*random.random()*(self.pbestx[x]-self.current[x]) + 2 * random.random()*(self.gbest[x]-self.current[x]) def updatePosition(): for x in range(0,len(self.current)): self.current[x] = self.current[x] + self.velocity[x] def updatePbest(): if costf(self.current) < costf(self.best): self.best = self.current def psoOptimize(domain,costf,noOfParticles=20, noOfRuns=30): particles = [] for i in range(noOfParticles): particle = Particle(domain,i) particles.append(particle) for i in range(noOfRuns): Globalgbest = [] cost = 9999999999999999999 for i in particles: if costf(i.pbest) < cost: cost = costf(i.pbest) Globalgbest = i.pbest for particle in particles: particle.updateVelocity() particle.updatePosition() particle.updatePbest(costf) particle.gbest = Globalgbest return determineGbest(particles,costf)
现在,我看不出为什么这不起作用。 但是,当我运行它,我得到这个错误:
“TypeError:updateVelocity()不带参数(给出1)”
我不明白! 我没有任何争论!
谢谢您的帮助,
莱纳斯
Python隐式地将对象传递给方法调用,但是您需要显式声明它的参数。 这通常被称为self
:
def updateVelocity(self):
确保所有的类方法( updateVelocity
, updatePosition
,…)至less有一个位置参数,它是标准的self
并指向类的当前实例。
当你调用particle.updateVelocity()
,被调用的方法隐含地得到一个参数:实例,这里particle
是第一个参数。
您的updateVelocity()
方法在其定义中缺less显式self
参数。
应该是这样的:
def updateVelocity(self): for x in range(0,len(self.velocity)): self.velocity[x] = 2*random.random()*(self.pbestx[x]-self.current[x]) + 2 \ * random.random()*(self.gbest[x]-self.current[x])
你的其他方法( __init__
除外)有同样的问题。