2

我正在使用 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”来引用变量的方法。

4

2 回答 2

2

当您对 .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 或哈希表来存储变量。

于 2012-02-16T21:37:45.423 回答
0

你也可以像这样定义一个数组

IloBoolVarArray bvars( env , 3 );

它将自动实例化一个包含 3 个布尔变量的数组,然后您可以通过 [] 运算符将其作为任何数组访问。

如果您的程序涉及很多变量,那么使用整数索引而不是名称会更好更容易。

于 2012-02-16T21:43:27.530 回答