将 CPLEX 的 IloNumVar 变量转换为 Java 中的双精度
Convert IloNumVar variabale of CPLEX to double in Java
我尝试使用 java 从 excel 读取列值,这里是代码的一部分:
.....
List<ReportRow> listOfDataFromReport = new ArrayList<ReportRow>();
for(int x = 1; x<=sheet.getPhysicalNumberOfRows(); x++){
ReportRow rr = new ReportRow();
HSSFRow dataRow = sheet.getRow(x);
int idxForColumn1 = map.get("Cost");
int idxForColumn2 = map.get("Level");
HSSFCell cell1 = dataRow.getCell(idxForColumn1);
HSSFCell cell2 = dataRow.getCell(idxForColumn2);
rr.setCost(cell1.getNumericCellValue());
rr.setLevel(cell2.getNumericCellValue());
.....
所以从 excel 读取数据的代码工作正常,我遇到的问题是 setter 函数,因为我没有相同的类型,我在另一个 [=35] 中使用 cplex 求解器=]:
private IloNumVar Cost = new IloNumVar;
public IloNumVar getCost() {
return Cost;
}
public void setCost(IloNumVar cost) {
Cost = cost;
}
所以我得到这个错误:
The method setCost is not applicable for the arguments (double)
所以我想知道是否可以将 IloNumVar 转换为 double 或任何同时使用它们的解决方案,将值设为 double 但将其用作 IloNumVar。
编辑
为了解释更多,我使用电功率值(来自 excel)作为输入,使用它们来解决 cplex 求解器的成本问题。
要从excel读取数据我只能使用POI
的getNumericCellValue()
方法来获取值,所以我会有变量double
,但是当我使用它们来解决我的模型我必须将它们用作 IloNumVar[]
因为我希望在 24 小时内优化能源成本值取决于从 excel 文件中获取的功率值。
IloNumVar 是一个 CPLEX/Concert class,用于在 CPLEX 模型中对变量建模。在模型构建阶段,它通常没有单一值。相反,您需要指定 IloNumVar 可以采用的值范围,通常是下限和上限。但是,您可以通过将变量的下限和上限设置为相同的值来将变量设置为始终具有单个值。在大多数情况下,这种情况很少见 - 可能是为了将一些已知值或决策强加到模型中以进行调试。
一旦您 运行 并求解了模型,那么变量应该有一个值,因为 CPLEX 应该已经为您选择了一个值。然后,您可以使用 getValue().
之类的方法从 IloNumVar 获取该值
现在观察 - 在大多数模型中,像 'costs' 这样的东西是已知的常数值,我们希望 CPLEX 决定以已知成本使用多少东西。通常,成本是 objective 函数中某些项的系数。在这种情况下,通常只对那些已知值使用双精度值。您对您的模型只字未提,因此我们无法判断您在模型中使用这些 IloNumVars 的目的,这可能是一个好的设计决策。
我尝试使用 java 从 excel 读取列值,这里是代码的一部分:
.....
List<ReportRow> listOfDataFromReport = new ArrayList<ReportRow>();
for(int x = 1; x<=sheet.getPhysicalNumberOfRows(); x++){
ReportRow rr = new ReportRow();
HSSFRow dataRow = sheet.getRow(x);
int idxForColumn1 = map.get("Cost");
int idxForColumn2 = map.get("Level");
HSSFCell cell1 = dataRow.getCell(idxForColumn1);
HSSFCell cell2 = dataRow.getCell(idxForColumn2);
rr.setCost(cell1.getNumericCellValue());
rr.setLevel(cell2.getNumericCellValue());
.....
所以从 excel 读取数据的代码工作正常,我遇到的问题是 setter 函数,因为我没有相同的类型,我在另一个 [=35] 中使用 cplex 求解器=]:
private IloNumVar Cost = new IloNumVar;
public IloNumVar getCost() {
return Cost;
}
public void setCost(IloNumVar cost) {
Cost = cost;
}
所以我得到这个错误:
The method setCost is not applicable for the arguments (double)
所以我想知道是否可以将 IloNumVar 转换为 double 或任何同时使用它们的解决方案,将值设为 double 但将其用作 IloNumVar。
编辑
为了解释更多,我使用电功率值(来自 excel)作为输入,使用它们来解决 cplex 求解器的成本问题。
要从excel读取数据我只能使用POI
的getNumericCellValue()
方法来获取值,所以我会有变量double
,但是当我使用它们来解决我的模型我必须将它们用作 IloNumVar[]
因为我希望在 24 小时内优化能源成本值取决于从 excel 文件中获取的功率值。
IloNumVar 是一个 CPLEX/Concert class,用于在 CPLEX 模型中对变量建模。在模型构建阶段,它通常没有单一值。相反,您需要指定 IloNumVar 可以采用的值范围,通常是下限和上限。但是,您可以通过将变量的下限和上限设置为相同的值来将变量设置为始终具有单个值。在大多数情况下,这种情况很少见 - 可能是为了将一些已知值或决策强加到模型中以进行调试。
一旦您 运行 并求解了模型,那么变量应该有一个值,因为 CPLEX 应该已经为您选择了一个值。然后,您可以使用 getValue().
之类的方法从 IloNumVar 获取该值现在观察 - 在大多数模型中,像 'costs' 这样的东西是已知的常数值,我们希望 CPLEX 决定以已知成本使用多少东西。通常,成本是 objective 函数中某些项的系数。在这种情况下,通常只对那些已知值使用双精度值。您对您的模型只字未提,因此我们无法判断您在模型中使用这些 IloNumVars 的目的,这可能是一个好的设计决策。