需要IloBoolVarArray语法帮助

时间:2019-09-12 18:29:18

标签: c++ cplex

我正在尝试使用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]);
}

现在,当我运行代码时,我得到了这个我并不理解的错误, enter image description here

我认为我定义决策变量的方式是错误的。我阅读了IBM网站上的IloBoolVarArray,但语法使我感到困惑。任何想法?还是有人知道IBM网站以外的示例来学习C ++中的CPLEX语法?

1 个答案:

答案 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+1NumSem),这是一次访问违反。

您必须将访问限制在数组范围内。