在 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;
}
工作正常
我在 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;
}
工作正常