我正在尝试使用C ++中的CPLEX解决LP。我对语法有点困惑。这是我的问题。我已经定义了这样的整数常量:
const int NumberOfSemesters = 10
并在CPLEX中定义了一个决策变量,如下所示:
IloBoolVarArray Y(env, NumberOfSemesters); // equals to 1 if student
//takes at least one course in semster s
此决策变量输出将是1和0(即[0,0,1,0,0,1])的数组
然后我定义了一个约束,使得:
//Constraint 1:student has no leave of absence
for (ss = 0; ss < NumberOfSemesters; ss++) {
mod.add(Y[ss + 1] <= Y[ss]);
}
我认为我定义决策变量的方式是错误的。我阅读了IBM网站上的IloBoolVarArray,但语法使我感到困惑。任何想法?还是有人知道IBM网站以外的示例来学习C ++中的CPLEX语法?
答案 0 :(得分:2)
在C ++中,数组的索引为0。因此可以通过以下方式访问N元素数组
arr[0]
至arr[N-1]
。
当您写时:
for (ss = 0; ss < NumSem; s++) {
mod.add(Y[ss+1] <= Y[ss]);
}
您正在访问数组中的第(N + 1)个元素(因为ss
将是(NumSem - 1)
,因此ss+1
是NumSem
),这是一次访问违反。
您必须将访问限制在数组范围内。