Python 类构造函数-TypeError:';int';对象不可下标
这个代码片段是一个更大的遗传算法的一部分。当我运行它时,我得到Python 类构造函数-TypeError:';int';对象不可下标,python,pandas,oop,dataframe,genetic-algorithm,Python,Pandas,Oop,Dataframe,Genetic Algorithm,这个代码片段是一个更大的遗传算法的一部分。当我运行它时,我得到TypeError:“int”对象对于行agent.buy=agent.buy[I]+random.randint(0,以价格为单位长度)是不可订阅的 我知道你不能对一个普通的整数值进行索引,但是我很困惑,因为代理类中的self.buy被初始化为一个列表。我不太会使用面向对象的python,所以我确信我在美化一些简单的东西,我就是找不到它 class Agent: def __init__(self, length):
TypeError:“int”对象对于行agent.buy=agent.buy[I]+random.randint(0,以价格为单位长度)
是不可订阅的
我知道你不能对一个普通的整数值进行索引,但是我很困惑,因为代理类中的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()
类代理:
定义初始值(自身,长度):
self.buy=[random.randint(0,长度),random.randint(0,长度)]
self.fitness=-1
单位价格=无
单位价格单位长度=无
人口=20
世代=100
def ga():
代理=初始代理(总体,以价格为单位)
对于范围内的世代(世代):
打印('生成:'+str(生成))
代理=健身(代理)
代理=选择(代理)
代理=交叉(代理)
代理=变异(代理)
def初始代理(总体、长度):
返回[范围内(总体)的代理(长度)]
def突变(代理):
对于代理中的代理:
对于范围(2)中的i:
如果随机.uniform(0.0,1.0)但它不是一个列表始终,根据您的代码。迭代范围(0..1),并将第一次迭代中的agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表的形式访问buy
,但在上一次迭代中它被设置为整数
我怀疑你想做:
agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)
但如果不知道算法,我不确定:)。但根据您的代码,它不是一个列表始终。迭代范围(0..1),并将第一次迭代中的agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表的形式访问buy
,但在上一次迭代中它被设置为整数
我怀疑你想做:
agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)
但是如果不知道算法,我不能确定:)。在方法mutate()
中,agent.buy被定义为两个整数的和
此外,它将取决于csv文件中分配的源数据
将值设置为“原始” 在方法mutate()
中,agent.buy被定义为两个整数之和
此外,它将取决于csv文件中分配的源数据
将值设置为“原始” agent.buy
可能被初始化为列表,但当您这样做时,您会给它分配一个数字:agent.buy=agent.buy[i]+random.randint(0,单位为价格长度)
@MarkMeyer-Gotcha!该行最初用于将字符串添加到一起,因此对于列表来说,它的工作方式不同,这是有道理的。谢谢agent.buy
可能被初始化为列表,但当您这样做时,您会给它分配一个数字:agent.buy=agent.buy[i]+random.randint(0,单位为价格长度)
@MarkMeyer-Gotcha!该行最初用于将字符串添加到一起,因此对于列表来说,它的工作方式不同,这是有道理的。谢谢啊,好的,我明白了。因此,它应该是这样的agent.buy=agent.buy[i,random.randint(0,in\u prices\u length)]
Hmm…我尝试了上面评论的更正,但仍然返回相同的错误。啊,好的,我明白了。因此,它可能应该是这样的agent.buy=agent.buy[i,random.randint(0,in_prices\u length)]
Hmm…我尝试了上面评论的更正,但仍然返回相同的错误。好的,这完全有道理。我正在编写的教程将字符串与这行代码连接起来,当我将其更改为列表/整数时,显然效果不一样。谢谢你的帮助!更新:我尝试了你的建议,但它仍然返回相同的错误。好的,这完全有道理。我正在编写的教程将字符串与这行代码连接起来,当我将其更改为列表/整数时,显然效果不一样。谢谢你的帮助!更新:我尝试了你的建议,但仍然返回相同的错误。