0

我有一个 index setA和另一个 set dim,我需要定义变量x[i,j]where iis inAjstart from one 并且是<= dim[A]A 的每个成员:

set A := { 11 .. 20}; dim := {<11>1, <12>3, <13>1, <14>1, <15>5, <16>1, <17>2, <18>1, <19>1, <20>3};

例如,在上面,我将有:

x[11,1], x[12,1], x[12,2], x[12,3], x[13,1], x[14,1], ...

我可以做类似的事情:

set B := { 1 .. maxDim)}; var x[A *B]; 其中maxDim是 中的最大数量dim。如何在不创建许多额外变量的情况下做到这一点?

4

2 回答 2

1

经过一番研究,我找到了一个我认为应该可行的解决方案:

var x[ <i, j> in A*B with j <= dim[i]];

于 2016-08-23T02:38:29.250 回答
1

我不明白这问题。什么是 dimlist 索引?维度的大小是多少 3..5 实现这一目标的最佳方法可能是拥有一个完整的维度表并排除您不喜欢的那些,例如

set I := { <a,b,c,d,e,f> in A*B*C*D*E*F with a > b or whatever restriction you like };

var x[I];

或者你可以搞乱变量的界限,比如

var x[<a,b,c,d,e,f> in AxB*D3*D4*D5] real <= (if dimlist[a,b] > 0 ? dimlist[a,b] : 0);
于 2016-08-22T19:30:29.970 回答