我在林业行业进行优化,其中一组公司C可以从收获区域I中的某些品种A中扣除一些木材。参数x [I,J,V, T,C,A]变量表示从时间T使用车辆V从收获区域I到锯木厂J的流量,对于公司C和A分类。
我遇到的麻烦是每个锯木厂必须满足最低要求,d_minus。这可以在:
完成# The total flow into a node at time period t must exceed the minimum demand.
subject to Constraint2 {j in J, t in T, p in T, c in C, a in A: p <> t}:
sum{v in V, i in I} x[i,j,v,p,c,a] >= d_minus[j,t,c,a];
问题在于车辆V具有特定容量,模仿:
# The flow must not exceed the total capacity for each vehicle and time period
subject to Constraint6 {v in V, t in T}:
sum{i in I, j in J, c in C, a in A} x[i,j,v,t,c,a] <= capacity[v];
这会导致编译器在constraint2处抱怨不可能的边界。例如
presolve: constraint Constraint2[1,1,6,1,3] cannot hold:
body >= 1000 cannot be <= 273; difference = 727
我使用4辆车,每辆车的容量为40(我尝试使用400和1000,但错误仍然存在)。 d_minus参数介于500和1000之间。
我认为params不应该太窄。使用1000的容量,他们应该满足需要与3 I的压力车辆。我倾向于所有&#34;为所有&#34;约束是限制解决方案的因素,导致错误。我已尝试使用&#34;对于T中的所有t,j在J&#34;对于Constraint2,但它无法找到d_minus的下标。任何人都有任何线索?
此致
答案 0 :(得分:1)
我建议使用solexpand
命令在presolve之后显示约束Constraint2[1,1,6,1,3]
:
solexpand Constraint2[1,1,6,1,3];
这可能会对确切导致不可行性的原因提供一些见解。由于问题是单一约束,因此除非你有一个非常大的约束表达式,否则它不应该太难。在这种情况下,我建议将数据集尽可能地减少到仍然导致不可行的可能性。