我得到TypeError:不能将序列乘以'float'类型的非int。这是我的代码:
# 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 [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
感谢您提供任何帮助!!!!
答案 0 :(得分: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]
词典起初看起来很吓人,但它们是检索信息的最快方式。