我正在构建一个CPLEX模型(类似VRP) . 在模型约束之一中,我迫使从仓库到我拥有的每组不同客户的初始流程,至少足以应对集合客户的需求 .
因此,假设我有 n 不同的 I[i] 集, i = 1..n . 然后,对于每个 I[i] ,如果电弧经过,那么离开仓库到 I[i] 中每个元素的弧的总和将被计为卡车的容量,例如 Q . 因此,上述总和应大于或等于需求的总和,例如 I[i] 为每个客户 j 在 I[i] 中确保足够的卡车进入集合 I[i] .
在其他"words": \sum_{j\in I_i} {Q*x_{0, j}}\geq\sum_j\in I_i{d_j} . 如果我导出CPLEX模型,我有这些约束,例如
V.1.FlowCreation_a(1)#1484: 600000 ArcRouting(2)(1)(1)(44)#17223
+ 600000 ArcRouting(2)(1)(1)(45)#17225
+ 600000 ArcRouting(2)(2)(1)(44)#17229
+ 600000 ArcRouting(2)(2)(1)(45)#17231
+ 600000 ArcRouting(2)(3)(1)(44)#17235
+ 600000 ArcRouting(2)(3)(1)(45)#17237
+ 600000 ArcRouting(2)(4)(1)(44)#17241
+ 600000 ArcRouting(2)(4)(1)(45)#17243
+ 600000 ArcRouting(2)(5)(1)(44)#17247
+ 600000 ArcRouting(2)(5)(1)(45)#17249
+ 600000 ArcRouting(2)(6)(1)(44)#17253
+ 600000 ArcRouting(2)(6)(1)(45)#17255
+ 600000 ArcRouting(2)(7)(1)(44)#17259
+ 600000 ArcRouting(2)(7)(1)(45)#17261
+ 600000 ArcRouting(2)(8)(1)(44)#17265
+ 600000 ArcRouting(2)(8)(1)(45)#17267
+ 600000 ArcRouting(2)(9)(1)(44)#17271
+ 600000 ArcRouting(2)(9)(1)(45)#17273
+ 600000 ArcRouting(2)(10)(1)(44)#17277
+ 600000 ArcRouting(2)(10)(1)(45)#17279
>= 12000
ArcRouting(..)(..)(..)(..) 变量的第一个维度描述了元素集合的数量,在这种情况下为2,第二个维度是车辆编号,范围从1到10,而第三个描述出发节点,第四个描述到达节点 . 这就是为什么第三个总是为1,因为节点0在LP导出期间被重命名为1,而第四个仅包含44和45,因为该特定集仅包含几个元素 .
正如您所注意到的那样,将电弧设置为1(无论使用的车辆或来自 I[2] 的客户)是否足以满足约束条件,因为一辆卡车可以提供高达600,000个单位,而客户的联合需求仅为12.000单位 .
问题是,当我尝试使用 mod.solve() 解决模型时,我收到以下错误:
Warning: Control callbacks may disable some MIP features.
Lazy constraint(s) or lazy constraint callback is present.
Disabling dual reductions (CPX_PARAM_REDUCE) in presolve.
Disabling non-linear reductions (CPX_PARAM_PRELINEAR) in presolve.
Infeasibility row 'V.1.FlowCreation_a[1]': 0 >= 12000.
Presolve time = 0.08 sec. (20.62 ticks)
Root node processing (before b&c):
Real time = 0.09 sec. (21.15 ticks)
Sequential b&c:
Real time = 0.00 sec. (0.00 ticks)
------------
Total (root+branch&cut) = 0.09 sec. (21.15 ticks)
Infeasibility row 'V.1.FlowCreation_a[1]': 0 >= 12000. 让我知道我的模型,我不完全理解?