我有一个索引集A
和另一个集dim
,我需要定义变量x[i,j]
i
位于A
和{{1}从一个开始,对于A:
j
<= dim[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
中的最大数量。如何在不创建额外变量的情况下执行此操作?
答案 0 :(得分:0)
我不明白这个问题。什么是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);
答案 1 :(得分:0)
经过一番研究后,我找到了一个解决方案,我觉得应该可行:
var x[ <i, j> in A*B with j <= dim[i]];