"Index is out of bound" CPLEX 中的错误
"Index is out of bound" error in CPLEX
在下面的代码中,我无法 运行 我的程序,每次都会弹出错误 "Exception from 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 的值。
不要忘记在读取 .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]=...;
那么你的 model 没问题
在下面的代码中,我无法 运行 我的程序,每次都会弹出错误 "Exception from 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 的值。
不要忘记在读取 .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]=...;
那么你的 model 没问题