我正在写一小段python作为家庭作业,但是我没有让它运行!我没有那么多的Python经验,但我知道相当多的Java。我正在尝试实现一种粒子群优化算法,这就是我所拥有的:
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个)“
我不明白!我不会给它任何理由的!
谢谢你的帮助
莱纳斯
发布于 2010-12-15 07:42:21
Python隐式地将对象传递给方法调用,但是您需要显式地声明它的参数。这通常被命名为self
def updateVelocity(self):
发布于 2010-12-15 07:45:37
确保你所有的类方法(updateVelocity
,updatePosition
,...)至少接受一个位置参数,该参数规范命名为self
,引用类的当前实例。
当您调用particle.updateVelocity()
时,被调用的方法隐式地获得一个参数:实例,这里是particle
作为第一个参数。
发布于 2010-12-15 07:45:07
您的updateVelocity()
方法的定义中缺少显式的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__
)也有同样的问题。
https://stackoverflow.com/questions/4445405
复制相似问题