在 CPLEX 中滚动在另一个索引处采用不同值的索引的方法

Ways to scroll an index that takes on different values at another index in CPLEX

我在 CPLEX 中遇到问题:我有两个索引 i 和 j。对于每个 j,i 是不同的。 当我写约束时,我怎样才能清楚地表明对于 j=1,索引 i 从 1 到 10,而对于 j=2,索引 i 从 1 到 3,对于 j=3,索引 i 从 1 到 7 ?

例如:

int num_j=...;范围 J=1..num_j; 整数 num_i=...;范围 I=1..num_i;

forall (i in I) // 在 I 中每个 J 必须有不同的值

 forall (j in J)
 
constraint 1: sum(m in M) y[i][j][m] == 1;

在数组变量索引器大小 - 3 种方式:联合、元组集、Making Optimization Simple

内的决策表达式

我给出了 3 种方法来应对这个挑战。

用你的数据

int num_j=3; 
range J=1..num_j;

int num_i[J]=[10,3,7]; 

range M=1..1;
range I=1..max(j in J) num_i[j];

dvar boolean y[I][J][M];
 
subject to
{


 forall (j in J)
   forall (i in 1..num_i[j]) // where in I there must be the different values for each J
 
 sum(m in M) y[i][j][m] == 1;

}

工作正常