如何通过名称获取变量的值

How to get values of vars by its name

我正在使用 CPLEX Java 接口来解决一些 MIP 问题,优化器运行良好,但我无法通过名称获取变量的值。

我的 vars 的定义是在一个 for 循环中,所以在外部代码中,我不能使用 cplex.getValue() 函数来获取它们的值。 请提醒我任何可以获取所有值或通过名称获取值的方法。

for (int i = 0; i < count; ++i){
    // c1 is changing when i increase
    IloNumVar[] x = new IloNumVar[c1];
    for (int j = 0; j < c1; ++j) {
        x[j] = cplex.numVar(0, 1, IloNumVarType.Int, "x" + String.valueOf(i) + "_" + String.valueOf(j));
    }
} 
...
cplex.solve();

如何在 cplex.solve() 之后检索 for 循环外的所有 x 值?

只是不要试图通过他们的名字来恢复他们。将 CPLEX 变量保存在列表、数组、字典、结构、class 实例或代码中的任何内容中。您的 IloNumVars 只是可以像任何其他对象一样存储的普通对象。在您的示例代码中,只需将这些 IloNumVar 数组保存在循环外声明的结构中(例如,这些 IloNumVar[] 数组的列表)。

如果你真的需要按名称检索它们,然后将它们放入字典中,键入变量名称 - 同样必须在上面的循环之外声明。但这比将它们保存在您通常的 Java 数据结构中效率要低,因为它需要在字典中进行额外的查找处理才能按名称查找项目。