有没有办法让一个 dvar 中的索引依赖于 Cplex 中的另一个 dvar?

Is there a way to make an index in a dvar dependent on another dvar in Cplex?

我需要在我的 Cplex 转运问题中包含一个时间方面。这是我的代码的一部分,其中 x 是一个二进制变量,如果订单在时间 t 通过这条腿从终端 i 发送到终端 j,则该变量等于 1。我有 3 个终端,其中终端 1 是起点,终端 2 是中间枢纽,终端 3 是网关。 每个订单都需要在 pickuptime[n] 时在 1 号航站楼被取货,并且它在 leg x 上行驶几个等于 leadtime[1,2] 的时间段。然后,它需要在时间 t+leadtime[1,2] 从终端 2 继续到终端 3。但是,出于我的模型中所述的合并原因,也有可能在时间 t 使用终端 2 到 3 的 x,该时间晚于 t+leadtime[1,2] 并且最大值等于 T:

dvar int+ x[terminal, terminal, order, time] in 0..1;

forall(n in order) x[1,2,n,pickuptime[n]] == 1;
forall(n in order) x[1,2,n,t] <= x[2,3,n,t+leadtime[1,2]] + x[2,3,n,t+leadtime[1,2]+1] + ... + x[2,3,n,t+leadtime[1,2]+T];
x[2,3,n,t+leadtime[1,2]] + x[2,3,n,t+leadtime[1,2]+1] + ... + x[2,3,n,t+leadtime[1,2]+T]<= 1;

这个 T 取决于每个订单,例如订单 1:

x[1,2,1,t] <= x[2,3,1,t+leadtime[1,2]] + x[2,3,1,t+leadtime[1,2]+1] + x[2,3,n,t+leadtime[1,2]+2];
x[2,3,1,t+leadtime[1,2]] + x[2,3,1,t+leadtime[1,2]+1] + x[2,3,1,t+leadtime[1,2]+2]<= 1;

希望订单 2:

x[1,2,2,t] <= x[2,3,2,t+leadtime[1,2]] + x[2,3,2,t+leadtime[1,2]+1] + x[2,3,2,t+leadtime[1,2]+2] + x[2,3,2,t+leadtime[1,2]+3];
x[2,3,2,t+leadtime[1,2]] + x[2,3,2,t+leadtime[1,2]+1] + x[2,3,2,t+leadtime[1,2]+2] + x[2,3,2,t+leadtime[1,2]+3] <= 1;

有没有办法对此进行不同的编码,以便每个订单都如此?

range T=1..10;
range Term=1..5;

int leadtime[i in Term][j in Term]=rand(10);
int t=1;

int n[1..2]=[2,3];

dvar boolean x[Term][Term][Term][T];


subject to
{
  



forall(a in 1..2)
{
  x[a,a+1,1,t] <= sum(i in 0..n[a])    x[a+1,a+2,1,t+leadtime[1,2]+i]; 
  sum(i in 0..n[a]) x[a+1,a+2,1,t+leadtime[1,2]+i] <= 1;  
}


}