我想在汽车共享提供商的上下文中建模一个时空网络,该提供商由S(站)x(0,... t,...,Tmax)定义,不同的弧在时间连接节点 i t 在时间 t' 到节点 j,t'>t。每个弧与不同的值(例如利润)相关联。
您对如何实现这些弧线有任何想法吗?
到目前为止,我的想法是定义不同的元组,但我在集成时间组件时遇到了问题。你知道是否有可能用元组解决这样的问题?
我猜你所拥有的是一个定义车站如何连接的图表:
{int} nodes = { 1, 2, 3, 4 };
tuple Arc {
int origin;
int destination;
}
{Arc} arcs = { <1,2>, <1,3>, <1,4>, <2,3> };
如果我理解正确,那么这个图需要在定义为的时间间隔内的每个时期重复
int Tmax = 5;
range T = 0..Tmax;
您可以定义一个新元组,该元组定义具有起点和终点以及开始和结束时间的弧:
tuple TArc {
int origin;
int destination;
int starttime;
int endtime;
}
{TArc} tarcs = { <o, d, s, e> | <o,d> in arcs, s in T, e in T : e > s };
如果您还需要复制图的节点,则首先定义节点:
tuple TNode {
int node;
int time;
}
{TNode} tnodes = { <n,t> | n in nodes, t in T };
然后是弧线:
tuple TArc {
TNode origin;
TNode destination;
}
{TArc} tarcs = { <<o,s>,<d,e>> | <o,d> in arcs, s in T, e in T : e > s };
弧的成本/利润a可能取决于节点的距离(可能是distance(a.origin.node, a.destination.node))或时间增量(可能是a.destination.time - a.origin.time)。