我打算进行优化,我希望在受到一些时间限制的系统中最大化流量,并且一些“必须满足这些路线”的限制 . 第一次约束规定每辆车不得超过24小时的工作量(以分钟表示) . 第二次约束是一个小区消除约束,它还说明在“车辆”有时间行驶之前,“访问”节点的启动时间不能被激活.Custraint3描述了K1和N1之间的道路必须使用不超过9时间,使用任何车辆k . 最后一个约束表明来自特定节点的所有车辆必须在一天结束时返回 .
maximize maxamount: sum{i in V, j in V, k in K} x[i,j,k];
subject to TimeConstraint {k in K}:
sum{i in V, j in V} traveltime[i,j]*x[i,j,k] <= 1440;
subject to StartTime{i in V,j in V, k in K}:
starttime[i] + servicetime[i] +traveltime[i,j] - 1300 * (1 - x[i,j,k]) <= starttime[j];
subject to Constraint3:
sum{k in K} x["K1","N1",k] <= 9;
subject to EndNode{k in K}:
sum{i in V}x[i,"K1",k] - sum{j in V} x["K1",j,k]= 0;
Constraint3和EndNode有几个相同类型的约束(只是与其他“预定义位置”,例如K1和N2之间的道路不能超过4次访问等等) .
我的问题是我得到了错误Impossible推导的边界x [K1,K1,1]有下限= 0和上限= -76我已经理解这源于冲突的约束 . 不过我的问题是:怎么样?几乎只使用二进制变量,我不明白为什么上面的代码不起作用 . 我误解了我在模特中实际做了些什么吗?
我注意到编译器只在i = j时抱怨,所以我检查了我的.dat文件并注意到i和j之间的旅行时间,当i = j时非常大(所以程序不会选择那些路线) . 但是,将.dat文件编辑为不再自动超出TimeConstraints限制仍会给出相同的错误(尽管较小,现在上限为-1而不是-76) .
我希望有人可以对此有所了解
在此先感谢Cenderze
1 回答
如果
traveltime[i,j]
=M
(非常大)那么StartTime
用于i=j
读取因此,每当
M > 1300 - servicetime[i]
时,问题都是不可行的 .我建议使用
i<>j
为所有对(i,j)
定义X
变量,或者(如果问题是对称的)使用i < j
定义.2424557_ .Follow up from the comment
插入_2424562时,以下代码段效果很好:
输出:
将您的代码段更改为
并试一试 . 我明白了:
我希望这有帮助!