c++ - IBM CPLEX - 如何获取对命名变量的引用?

标签 c++ cplex

我正在使用 IBM CPLEX 通过 C++ API 对约束程序进行建模。

我已经声明了一个 bool var 数组:

IloEnv env;
IloBoolVarArray bVars(env);

然后我将 3 个变量添加到数组中并为它们分配名称,如下所示:

bVars.add(IloBoolVar(env,"a"));
bVars.add(IloBoolVar(env,"b"));
bVars.add(IloBoolVar(env,"c"));

我的问题是:

我是否需要知道该数组中变量的索引(0,1 或 2)才能在表达式中引用/使用该变量?

我似乎找不到一种方法来使用分配的名称“a”、“b”或“c”来引用变量。

最佳答案

当您对 .lp 文件执行“exportModel”时,将使用构造函数中变量的“名称”。它对于交互式调试很有用,但对于在代码中访问并不有用,而且根本不需要它。如果您想在表达式中使用数组的元素,那么您需要知道索引。它不是关联数组。但是,您还有很多其他选择。您可以将它们分配给 C++ 变量。

IloBoolVar a(env, "a");
IloBoolVar b(env, "b");
IloBoolVar c(env, "c");

IloBoolVar 类型是实现句柄,因此如果您也需要的话,也可以将值存储在数组中。

IloBoolVarArray bVars(env);
bvars.add(a);
bvars.add(b);
bvars.add(c);

在这种情况下,bvars[0] 和 a 表示相同的变量。您还可以使用 std::map 或 hash-table如果您需要按名称随机访问,则存储变量。

关于c++ - IBM CPLEX - 如何获取对命名变量的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316845/

相关文章:

c++ - 从哪个版本的 C++ 开始允许默认参数?

c++ - 使用 Luabind 比较存储的 C++ 对象指针时 Lua 函数崩溃

c++ - 使用两个条件迭代自定义对象的 vector

python - 如何在 IBM CPLEX Python API 中编写求和

java - cplex 用于 if-else 语句

c++ - 为什么在比较中将常量放在变量之前?

c++ - 将 const T (&ref)[N] 绑定(bind)到 T[N] 类型的对象

python-3.x - 在python中为cplex求解器pyomo设置optimalitytarget参数

java - java 上的背包问题 - 输出始终为目标函数

c++ - 这是按值传递还是按引用传递?