c++ - 需要 IloBoolVarArray 语法帮助

标签 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 语法的来源吗?

最佳答案

在 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),这是一个访问冲突。

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

关于c++ - 需要 IloBoolVarArray 语法帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912621/

相关文章:

C++在构造函数初始化列表中获取类成员地址

c++ - 将 STL 库和包含文件添加到 Visual Studio 项目

mathematical-optimization - 建议 ILP 求解器的下限

java - cpplex java多维决策变量,最小化

c++ - 使用 rundll32 运行 C++ DLL - 缺少条目

c++ - 仅检测引号中的文本 (C++)

c++ - 具有动态分配大小和预定大小的简单数组内存分配

java - 从其他类访问 cplex java 变量

java - 如何在java中显示cplex编码的模型?

optimization - CpoException : Can not execute command 'cpoptimizer -angel' . 请检查所需可执行文件的可用性