首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python解释器错误,x不带参数(给定1)

Python解释器错误,x不带参数(给定1)
EN

Stack Overflow用户
提问于 2010-12-15 07:40:02
回答 4查看 119.8K关注 0票数 65

我正在写一小段python作为家庭作业,但是我没有让它运行!我没有那么多的Python经验,但我知道相当多的Java。我正在尝试实现一种粒子群优化算法,这就是我所拥有的:

代码语言:javascript
复制
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个)“

我不明白!我不会给它任何理由的!

谢谢你的帮助

莱纳斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-15 07:42:21

Python隐式地将对象传递给方法调用,但是您需要显式地声明它的参数。这通常被命名为self

代码语言:javascript
复制
def updateVelocity(self):
票数 130
EN

Stack Overflow用户

发布于 2010-12-15 07:45:37

确保你所有的类方法(updateVelocityupdatePosition,...)至少接受一个位置参数,该参数规范命名为self,引用类的当前实例。

当您调用particle.updateVelocity()时,被调用的方法隐式地获得一个参数:实例,这里是particle作为第一个参数。

票数 8
EN

Stack Overflow用户

发布于 2010-12-15 07:45:07

您的updateVelocity()方法的定义中缺少显式的self参数。

应该是这样的:

代码语言:javascript
复制
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__)也有同样的问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4445405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档