0

在以下代码中,我无法运行我的程序,并且每次都会弹出错误“IBM ILOG Concert 异常:IloIntRangeI::getValue(IloInt index): index is out of bound”。

我写的代码片段如下

/*mod file*/
int NX=...;
 range nx=1..NX;
 tuple x{
    int N;
    float a;
    float b; 
 }

 x elem_x[nx]=...;

 tuple y{
    int u;
    int v;
 }

 int L;
 execute{
    L=elem_x[1].N;
    for (var i in nx){
        L=Opl.maxl(elem_x[i].N,L);  
    }
 }

 y elem_y [nx][1..L]=...;

/*dat file*/
NX=3;
 elem_x=[<1,7,9>,<3,1.5,9.4>,<2,2.7,3.4>];
 elem_y=[[<2,3>,<3,4>,<3,6>],
         [<4,7>,<1,9>,<5,7>]
         [<0,4>,<9,3>,<2,2>]];

如果我写“y elem_y[nx][1..3]”而不是“y elem_y[nx][1..L]”,程序运行得非常好。如何消除此错误,因为在大型程序的情况下我总是不知道 L 的值。

4

1 回答 1

-1

不要忘记在读取 .dat 之后执行块 tun!

所以在 .mod 如果你写

int NX=...;
 range nx=1..NX;
 tuple x{
    int N;
    float a;
    float b; 
 }

 x elem_x[nx]=...;

 tuple y{
    int u;
    int v;
 }

 int L=max(i in nx) elem_x[i].N;
// execute{
//    L=elem_x[1].N;
//    for (var i in nx){
//        L=Opl.maxl( ,L);  
//    }
// }

 y elem_y [nx][1..L]=...;

那么你的模型很好

于 2018-07-12T15:05:49.033 回答