java - 如何通过名称获取 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值?
解决方案
只是不要试图通过他们的名字来恢复他们。将 CPLEX 变量保存在列表、数组、字典、结构、类实例或代码中的任何内容中。您的 IloNumVar 只是可以像其他任何对象一样存储的普通对象。在您的示例代码中,只需将这些 IloNumVar 数组保存在循环外声明的结构中(例如,这些 IloNumVar[] 数组的列表)。
如果您确实需要按名称检索它们,则将它们放入字典中,键入变量名称 - 再次必须在上面的循环之外声明。但这比将它们保存在通常的 Java 数据结构中效率低,因为它需要在字典中进行额外的查找处理才能按名称查找项目。
推荐阅读
- dart - 如何在颤振飞镖中将数据添加到流中
- java - 防止 AWS 实例停止
- java - Apache Commons 电子邮件设置(无法解析为类型),我似乎有正确的 JAR
- android - 如何编写 Robolectric 单元测试来测试回收者视图项目的向左滑动
- python-3.x - 实际交互与模拟 MockService 的预期交互不匹配
- browserstack - 如何使用 browserstack 的本地功能仅测试最新的浏览器版本?
- git - Git rebase 错误的提交
- python-3.x - 如何在 tkinter 标签中使用 png 图像获得平滑边缘
- kdb - 每个组的 KDB 顶行
- pip - 使用 pip 安装模块失败