1. ホーム
  2. python

[解決済み] Pythonインタプリタエラー、xは引数を取らない(1つ指定)

2022-02-08 04:10:39

質問

宿題で小さな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() takes no arguments (1 given)".TypeError: updateVelocity() takes no arguments (1 given)"

理解できない! 引数を与えていない!

ありがとうございました。

ライナス

解決方法は?

Pythonは暗黙のうちにオブジェクトをメソッド呼び出しに渡しますが、そのためのパラメータを明示的に宣言する必要があります。これは慣例的に self :

def updateVelocity(self):