使用cplex OPL

时间:2019-07-08 12:04:39

标签: cplex timespace

我想在由 S (车站) x (0,... t ,...,Tmax),它们具有不同的弧,这些弧将时间t处的节点i与时间t'处的节点j与t'> t连接。每个弧线都具有不同的值(例如利润)。

您对如何实现这些弧线有任何想法吗?

到目前为止,我的想法是定义不同的元组,但是在集成时间分量时遇到了问题。您知道用元组根本可以解决这样的问题吗?

1 个答案:

答案 0 :(得分:0)

我想您所拥有的是一个图形,该图形定义了站的连接方式:

{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)。 / p>