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