我希望有人能帮助我。我使用时间窗口和外包选项对车辆路径问题进行了建模,此外,我还希望模型与时间相关。为此,我设置了一些需要连接的时区
{<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];
该模型不再起作用
我希望我将某些客户外包,而有些则随私人船队交付。一旦我尝试使用时区,该模型就会直接表明每个客户都是外包的。
有人知道元组有什么问题吗?因为我认为约束本身是非常基本的,应该可以使用。