0

在 python 中使用 docplex 求解器解决 0-1 整数规划问题。

T_1_d = int((180+8*15-lon-math.acos(math.tan(10547*(math.pi)/81000*math.cos(2*(math.pi)*(date+9)/365))*math.tan(lat*(math.pi)/180))*180/(math.pi))/15)
T_1_d1 = int((180+8*15-lon-math.acos(math.tan(10547*(math.pi)/81000*math.cos(2*(math.pi)*(date+10)/365))*math.tan(lat*(math.pi)/180))*180/(math.pi))/15)
model = Model()
var_list = [i for i in range(T_1_d, T_1_d1+24)]
B = model.binary_var_list(var_list, lb=0, name='B')
model.maximize(A*O*C_0*3600*sum(B[i])/1e9 - Q_0*A/(1000*E)*sum(B[i]*F[i]) - H*D_O*A*P_0/1e4) 

运行代码报如下错误:</p>

TypeError: 'Var' object is not iterable.

然后我写了B = iter(B),报如下错误:</p>

TypeError: 'list_iterator' object is not subscriptable.

然后我把索引去掉,转到B[i]B报如下错误:</p>

TypeError: can't multiply sequence by non-int of type 'list_iterator'

的类型Blist,的类型B[i]docplex.mp.linear.Var。我试图int(B[i])改变它的类型,但我失败了。

我不知道如何纠正。希望得到您的帮助,谢谢!

4

1 回答 1

0

您没有指定您的 for 循环,而不是sum(B[i]),它应该类似于model.sum(B[i] for i in range(len(B))).

对于其他求和项也是如此。

代码示例:

from docplex.mp.model import Model

model = Model()
var_list = [i for i in range(3, 6)]
B = model.binary_var_list(var_list, lb=0, name='B')
F = [ 5, 6, 7]
print(B)
model.maximize(3600*model.sum(B[i] for i in range(len(B))) - model.sum(B[i]*F[i] for i in range(len(B))))
于 2020-03-17T06:26:06.603 回答