Class constructor - TypeError: 'int' object is not subscriptable
Class constructor - TypeError: 'int' object is not subscriptable
此代码片段是更大的遗传算法的一部分。当我 运行 它得到 TypeError: 'int' object is not subscriptable
行 agent.buy = agent.buy[i] + random.randint(0, in_prices_length)
.
我知道你不能对普通整数值进行索引,但我很困惑,因为 Agent class 中的 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()
但根据您的代码,它不是列表总是。您遍历范围 (0..1),并将第一次迭代中的 agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表形式访问 buy
,但在上一次迭代中它被设置为一个整数。
我怀疑你想做:
agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)
但不知道算法我不确定:) .
在方法mutate()
中,agent.buy被定义为两个整数之和。
此外,这将取决于分配给您的 csv 文件中的源数据
到值 'raw'。
此代码片段是更大的遗传算法的一部分。当我 运行 它得到 TypeError: 'int' object is not subscriptable
行 agent.buy = agent.buy[i] + random.randint(0, in_prices_length)
.
我知道你不能对普通整数值进行索引,但我很困惑,因为 Agent class 中的 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()
但根据您的代码,它不是列表总是。您遍历范围 (0..1),并将第一次迭代中的 agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表形式访问 buy
,但在上一次迭代中它被设置为一个整数。
我怀疑你想做:
agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)
但不知道算法我不确定:) .
在方法mutate()
中,agent.buy被定义为两个整数之和。
此外,这将取决于分配给您的 csv 文件中的源数据 到值 'raw'。