Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python interpreter error, x takes no arguments (1 given)

I'm writing a small piece of python as a homework assignment, and I'm not getting it to run! I don't have that much Python-experience, but I know quite a lot of Java. I'm trying to implement a Particle Swarm Optimization algorithm, and here's what I have:

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) 

Now, I see no reason why this shouldn't work. However, when I run it, I get this error:

"TypeError: updateVelocity() takes no arguments (1 given)"

I don't understand! I'm not giving it any arguments!

Thanks for the help,

Linus

like image 844
Linus Avatar asked Dec 14 '10 23:12

Linus


2 Answers

Python implicitly passes the object to method calls, but you need to explicitly declare the parameter for it. This is customarily named self:

def updateVelocity(self): 
like image 161
Fred Larson Avatar answered Sep 21 '22 01:09

Fred Larson


Make sure, that all of your class methods (updateVelocity, updatePosition, ...) take at least one positional argument, which is canonically named self and refers to the current instance of the class.

When you call particle.updateVelocity(), the called method implicitly gets an argument: the instance, here particle as first parameter.

like image 27
miku Avatar answered Sep 19 '22 01:09

miku