【问题标题】:Class constructor - TypeError: 'int' object is not subscriptable类构造函数 - TypeError:“int”对象不可下标
【发布时间】:2018-12-03 10:51:33
【问题描述】:

这个代码 sn-p 是一个更大的遗传算法的一部分。当我运行它时,我得到TypeError: 'int' object is not subscriptableagent.buy = agent.buy[i] + random.randint(0, in_prices_length) 行。

我意识到你不能对一个普通的整数值进行索引,但我很困惑,因为 Agent 类中的 self.buy 被初始化为一个列表。我不经常使用面向对象的 python,所以我确定我在掩饰一些简单的东西,我就是找不到。

class Agent:

    def __init__(self, length):

        self.buy = [random.randint(0,length), random.randint(0,length)]
        self.fitness = -1

in_prices = None
in_prices_length = None
population = 20
generations = 100

def ga():

    agents = init_agents(population, in_prices_length)

    for generation in range(generations):

        print ('Generation: ' + str(generation))

        agents = fitness(agents)
        agents = selection(agents)
        agents = crossover(agents)
        agents = mutate(agents)

def init_agents(population, length):

    return [Agent(length) for _ in range(population)]

def mutate(agents):

    for agent in agents:

        for i in range(2):

            if random.uniform(0.0, 1.0) <= 0.1:

                agent.buy = agent.buy[i] + random.randint(0, in_prices_length)

    return agents

if __name__ == '__main__':


    raw = pd.read_csv('IBM.csv')
    in_prices = raw['close'].tolist()
    in_prices = list(reversed(in_prices))[0:300]
    in_prices_length = len(in_prices)
    ga()

【问题讨论】:

  • agent.buy 可能会被初始化为一个列表,但是当您这样做时,您会为其分配一个数字:agent.buy = agent.buy[i] + random.randint(0, in_prices_length)
  • @MarkMeyer 明白了!该行最初用于将字符串添加在一起,因此它对于列表的工作方式不同是有道理的。谢谢!

标签: python pandas oop dataframe genetic-algorithm


【解决方案1】:

mutate()方法中,agent.buy定义为两个整数之和。

此外,它还取决于分配的 csv 文件中的源数据 到值“原始”。

【讨论】:

  • 啊,好吧,我明白了。因此,它可能应该是这样的agent.buy = agent.buy[i, random.randint(0, in_prices_length)]
  • 嗯...我尝试了上面评论的更正,但它仍然返回相同的错误。
【解决方案2】:

但根据您的代码,它不是始终的列表。您遍历范围 (0..1),并将第一次迭代中的 agent.buy 值重置为整数。在第二次迭代中,您再次尝试以列表的形式访问buy,但在前一次迭代中它被设置为整数。

我怀疑你想这样做:

agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)

但我不知道算法就不确定:)。

【讨论】:

  • 好的,这完全有道理。我正在学习的教程是将字符串与这行代码连接起来,当我将其更改为列表/整数时,它显然不起作用。感谢您的帮助!
  • 更新:我尝试了您的建议,但仍然返回相同的错误。
猜你喜欢
  • 2017-08-08
  • 2017-07-15
  • 2012-02-21
  • 2018-08-07
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多