我正在处理一个多工作日的车辆路线问题。我想增加一些限制条件,如果一个工作日是6或它的乘数,一个工人必须只工作240分钟。所以我把两个循环工作日(k)和工人(w)和每个k和w我想确保总旅游和服务时间不超过prespesified时间(S)。正如你所看到的代码我如果其他结构用于240和480分钟的日常时间。然而,我得到了“DOcplexException: expected iterable Error”,看到了这个:
OcplexException:期望iterable得到:480 x_0_1_1_1 + 100 x_0_2_1_1 + 480 x_0_3_1_1 + 20 x_0_4_1_1 + 300 x_0_5_1_1 + 100 x_0_6_1_1 + 200 x_0_7_1_1 + 480 x_0_8_1_1 + 80 x_0_9_1_1 + 200 x_0_10_1_1 + 120 x_0_11_1_1 + 260 x_0_12_1_1 + 280 x_0_13_1_1 + 340 x_0_14_1_1 + 400 x_0_15_1_1 + 120 x_0_16_1_1 + 80 x_0_17_1_1 + 50 x_0_18_1_1 + 20 x_0_19_1_1 + 320 x_0_20_1_1 + 180 x_0_21_1_1 + 50 x_0_22_1_1 + 100 x_0_24_1_1 x_0_23_1_1 + 80 + 140……
约束条件如下:
# for w in W:
# for k in D:
# if k%6==0:
# mdl.add_constraints(mdl.sum((distanceList[i][j]*6/7000)*x[i, j, w, k] for i in N for j in N if j != i) + mdl.sum(serviceTime[j-1]*x[i, j, w, k] for i in V for j in N if j != i) <= S*0.5)
# else:
# mdl.add_constraints(mdl.sum((distanceList[i][j]*6/7000)*x[i, j, w, k] for i in N for j in N if j != i) + mdl.sum(serviceTime[j-1]*x[i, j, w, k] for i in V for j in N if j != i) <= S)
非常感谢您的帮助!谢谢。
# # #Model.add_constraints()
expec期望列表或综合(都能工作),换句话说,可以在其上进行迭代。基于(非可执行的)代码片段你张贴我有印象的论点add_constraints
is a constraint:
Model.add_constraints( mdl.sum(a[i,w,k]) + mdl.sum(b[i,w,k]) <= S)
这是不被接受的。
您应该将参数转换为add_constraints
to a Python comprehension something 到一个类似于Python的理解:
模型。add_constraints (mdl。sum([实现iwk] + mdl。sum(b[iwk] <= S for w in w for k in k)
因此add_constraints收到预期的理解。如果部分约束依赖于指标wk,则在理解中使用辅助函数。让我举一个rhs的例子:
def my_rhs(wk,k): # rhs of the constraint as a function of w,k
... return w+k % 42 # silly example
Model.add_constraints( mdl.sum(a[i,w,k]+mdl.sum(b[i,w,k] <= my_rhs(w,k) for w in W for k in K)