我的优化问题的Python代码出错了

我的优化问题的Python代码出错了,python,Python,我是python新手。我试图为我的优化研究模型编写代码。你能帮我吗?我不知道代码出了什么问题。顺便说一下,我正在使用python 2。多谢各位 for i in range(len(lift)): prob+=lpSum(dec_var[i])<=1 #constraints col_con=[1,0,0,2,2,3,1,1] dec_var=np.array(dec_var) col_data=[] for j in range(len(brands)): col_da

我是python新手。我试图为我的优化研究模型编写代码。你能帮我吗?我不知道代码出了什么问题。顺便说一下,我正在使用python 2。多谢各位

for i in range(len(lift)):

 prob+=lpSum(dec_var[i])<=1

#constraints

col_con=[1,0,0,2,2,3,1,1]

dec_var=np.array(dec_var)

col_data=[]

for j in range(len(brands)):

 col_data.append(list(zip(*dec_var)[j]))

 prob+=lpSum(col_data[j])<=col_con[j]

#problem

prob.writeLP("SO.lp")

#solve the problem

prob.solve()

print("The maximum Total lift obtained is:",value(prob.objective)) # print the output

#print the decision variable output matrix

Matrix=[[0 for X in range(len(lift[0]))] for y in range(len(lift))]

for v in prob.variables():

 Matrix[int(v.name.split("_")[2])][int(v.name.split("_")[3])]=v.varValue

 matrix=np.int_(Matrix)

print ("The decision variable matrix is:")

print(matrix)
适用于范围内的i(len(lift)):

prob+=lpSum(dec_var[i])您的代码在此行中断:

col_data.append(list(zip(*dec_var)[j]))
让我们一步一步地看一遍: dec_var是一个数组,可能有多个维度。大概是这样的:

dec_var=np.array([[1,2,3,4],[5,6,7,8]])
dec_var
#array([[1, 2, 3, 4],
#       [5, 6, 7, 8]])
for i,j in zip([1,2],[3,4]):
    print(i,j)
#1,3
#2,4
星形运算符(*)将数组拆分为“变量”。大致是这样的: a=[1,2,3,4],b=[5,6,7,8]。 (‘a’和‘b’其实并不存在,只是试图描绘一幅画面)

接下来,应用zip(),这允许您一起迭代两个iterable。您通常会这样使用它:

dec_var=np.array([[1,2,3,4],[5,6,7,8]])
dec_var
#array([[1, 2, 3, 4],
#       [5, 6, 7, 8]])
for i,j in zip([1,2],[3,4]):
    print(i,j)
#1,3
#2,4
但是,zip本身是不可订阅的,这就是您得到的错误

要使其可订阅,您可以在其上应用列表

list(zip([1,2],[3,4]))[0]
#(1,3)
换句话说。。问题的解决方案很可能是改变[j]下标的位置:

发件人:

致:


col\u data.append(list(zip(*dec\u var)[j]))
应该是
col\u data.append(list(zip(*dec\u var))[j])
欢迎使用SO!请参阅。请提供一份报告,并澄清问题的具体内容。你做过调试吗?另一方面,变量和函数名应该遵循带下划线的
小写格式,除非有充分的理由不这样做。@AMC我同意变量应该遵循带下划线的
小写格式,但是
CamelCase
在python中是完全可以接受的。它根本不影响python的运行。@制造商它根本不影响python的运行。我无意暗示这是事实。如果以上的解决方案对你有用,请考虑将其标记为解决方案。谢谢你好它起作用了。但之后的线路在我跑步时出现了问题。prob+=lpSum(col_data[j])