为什么我的时间断点[m,m + 1]的元组不起作用?

时间:2019-05-31 10:44:03

标签: cplex opl

我希望有人能帮助我。我使用时间窗口和外包选项对车辆路径问题进行了建模,此外,我还希望模型与时间相关。为此,我设置了一些需要连接的时区

 {<0,120>,<120,600>,<600,720>,<720,1400>}. 

需要这些时区,因为在每个时区中,车辆都会以不同的速度行驶。

我遇到的问题是当我对约束k到客户i的发车时间进行建模时

a[i][k] 
需要与正确的时区相关联。 初始化时区后,模型将为我提供错误的解决方案。

a[i][k]

其中 tuple timezone{ int m; int mend; }; {timezone} timezones = {<0,120>,<120,600>,<600,720>,<720,1400>}; forall (i in N, k in K, m in timezones) a[i][k] <= m.mend * sum (j in N) G[i][j][k][m]; forall (i in N, k in K, m in timezones) a[i][k] >= m.m * sum (j in N) G[i][j][k][m]; 是一个布尔变量,指示是否在时区G[i][j][k][m]中用车辆k穿过了弧。 m是时区的开始,而m.m是时区的结束。

当我仅声明一个时区时,元组确实起作用,如

m.mend

但仅针对第一个约束

{timezone} timezones = {<0,900>};

当我将此约束添加到模型中时:

a[i][k] >=   m.m * sum (j in N) G[i][j][k][m];

该模型不再起作用

我希望我将某些客户外包,而有些则随私人船队交付。一旦我尝试使用时区,该模型就会直接表明每个客户都是外包的。

有人知道元组有什么问题吗?因为我认为约束本身是非常基本的,应该可以使用。

0 个答案:

没有答案