Я думаю, у вас есть график, который определяет, как станции подключены:
{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
).