我想模拟一个节点的偏离只能以“每n小时”的方式进行。我已经开始使用两个变量对此进行建模 - starttime [i,j,k]显示当车辆k以j作为目的地离开i时,x [i,j,k]是具有值1的二进制变量,如果车辆k从我到j,否则为0。该模型是:
maximize maxdrive: sum{i in V, j in V, k in K} traveltime[i,j]*x[i,j,k];
subject to TimeConstraint {k in K}:
sum{i in V, j in V} (traveltime[i,j]+servicetime[i])*x [i,j,k] <= 1440;
subject to StartTime{i in V,j in V, k in K}:
starttime[i,j,k] + traveltime[i,j] - 9000 * (1 - x[i,j,k]) <= starttime[j,i,k];
subject to yvar{i in V, j in V}:
sum{k in K} x[i,j,k] <= maxVisits[i,j];
subject to Constraint1{i in V, j in V, k in K, g in V, h in K}:
starttime[i,j,k] + TimeInterval[i]*x[i,j,k] <= starttime[i,g,h];
有问题的约束是“Constraint1”,其中i是原始节点,j是目标节点,k是车辆。索引g用于表示稍后的出发可以是任何目的地节点。 TimeInterval对应于预期的间隔,即如果i的TimeInterval是2小时,则下一车辆离开i的开始时间必须不小于先前离开的2小时。起源对应于特定产品(仅可从所述起始节点获得),而我希望车辆不受特定原点节点的限制 - 它们应该能够在节点之间跳转以利用回程等。换句话说,我想进行这种约束没有对车辆本身的限制,而是对原点节点的限制。
“最大限度地延长旅行时间”的目标功能可能看起来很奇怪,但目标功能确实过时了。如果满足约束条件,则解决方案就足够了。最大化旅行时间仅仅是试图“强迫”x变量变为1。
问题是:我该怎么做?使用这个公式,所有x [i,j,k]变量都从答案中消失(没有这个约束,一些二元变量x变为1而另一个变量为0.解决方案符合maxVisits要求。使用约束,所有x变量变为0和所有开始时间也变为0.MINTO(求解器)也没有说明问题也是不可行的。 此外,如何分离车辆,以便程序认识到它是所有离场之间的比较?我宁愿不包括时间维度,因为它会给出更多的变量。
编辑:使用非线性求解器尝试新模型后,我看到了一些奇怪的结果。具体来说,我使用限制1440(分钟)作为车辆每天运行多长时间的上限。对于每个变量,使用下面的模型解决方案是0,但是i,j,k的所有组合的开始时间是720(1440的一半)。有没有人知道导致这种解决方案的原因?此约束如何删除starttime高于0之间的链接,要求x必须为1.
subject to StartTimeSelf{i in V, j in V, k in K, g in K, h in V}:
starttime[i,j,k]*x[i,j,k] + TimeInterval[i]*x[i,j,k] + y[i,k] <= starttime[i,h,g]*x[i,j,k];