2014-12-05 67 views
0

我得到TypeError:无法乘以类型'浮动'非int的序列。这里是我的代码:Python错误“浮动”

# Define x[i][j] for Gurobi 
for i in S: 
    for j in D: 
     decvarx[i][j] = m.addVar(lb = 0, obj=c[i][j]*u[i], vtype=GRB.CONTINUOUS, name="x.%d.%d" % (i,j)) 

我认为有一个问题与你[我],但我不太确定。这里是代码为:[i]:

# u is an array of supply values (indexed on processing facility numbers). 

u = [] 
for i in range(0,max(S)+1): 
    u.append([])       # Add an empty spot for u[i] 
for row in range(0,len(FAC_data)): 
    i = int(FAC_data[row][0])    # This is the processing facility number 
    u[i] = 1000*FAC_data[row][2]   # This is the supply for this processing facility 

谢谢你的任何帮助,你可以提供!!!!

+2

我认为问题出在'c'上,而不是'u'。如果'c [i] [j]'是一个列表或其他东西,你不能用浮点数乘它。 – Kevin 2014-12-05 16:43:44

回答

0

我认为主要的问题是,你正试图创建整数其中

u = [123,546,887,890] 

的列表,并将其编入索引上的不同设备的数字。

然而,你的循环 -

for i in range(0,max(S)+1): 
    u.append([])       # Add an empty spot for u[i] 

实际上创建这样的:

u = [[],[],[],[]] 

这是一个列表的列表。因此,当你试图乘以你认为是一个整数时,你实际上试图乘以一个单元素列表。由于列表不是数组,所以您可以选择。与数组不同,列表是动态的。所以,你可以直接将值附加到列表中。现在,如果您的设施号码不是以零开头,我建议使用字典。

u = {} 

for row in range(0,len(FAC_data)): 
    key = int(FAC_data[row][0]) 
    data = 1000*FAC_data[row][2] 
    u[key] = data 

检索供以后使用的数据,只需使用:

needed_data = u[facility_id] 

字典初看起来吓人,但他们检索信息的最快方式。