我正在尝试在 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 语法的来源吗?
最佳答案
在 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
),这是一个访问冲突。
您必须将访问限制在数组的范围内。
关于c++ - 需要 IloBoolVarArray 语法帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912621/