我正在使用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”来引用变量的方法。
答案 0 :(得分:1)
当您对.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来存储变量。
答案 1 :(得分:0)
你也可以像这样定义一个数组
IloBoolVarArray bvars( env , 3 );
它将自动实例化一个3布尔变量数组,然后您可以通过[]运算符作为任何数组进行访问。
如果你的程序涉及很多变量,那么使用整数索引而不是名称会更好更容易。