首页 > 解决方案 > 如何通过名称获取 vars 的值

问题描述

我正在使用 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值?

标签: javacplex

解决方案


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

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


推荐阅读