类构造函数-TypeError:“ int”对象不可下标

时间:2018-12-02 22:47:04

标签: python pandas oop dataframe genetic-algorithm

此代码段是更大的遗传算法的一部分。运行它时,我得到TypeError: 'int' object is not subscriptable的行agent.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()

2 个答案:

答案 0 :(得分:1)

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

我怀疑您想这样做:

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

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

答案 1 :(得分:1)

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

此外,这取决于指定的csv文件中的源数据 值“原始”。