【发布时间】:2023-03-04 11:12:01
【问题描述】:
在我的最小化问题中,我需要最小化一个因子可能非常大的项(例如,在某些情况下为 2^200)。例如,我需要添加客观术语,例如
objective.addTerm(vars.get(i).get(j), math.pow(2,200); // vars is a list of lists of IloNumVar, objective is of type IloLinearNumExpr
// ... Add terms for all cvars ...
cplex.addMinimize(objective);
有没有办法将这么大的客观术语添加到 cplex 中?我正在运行 cplex 12.3,API 只允许我传递 double 类型的变量。好像不支持 BigIntegers?
另一种解决方案是将所有值缩小到 [0,2^32] 范围内。然而,由于舍入误差,结果并不是最优的。 cplex 是否支持 BigDecimals 或某些等效类型?
【问题讨论】:
-
我认为你只需要扩展它。如果您有一个很大的问题(变量和约束的数量),那么您通常只会在一定的公差范围内证明最优性。与最优容差相比,大数的舍入误差可能并不显着。默认的最优容差类似于 1e-5,我在一些问题上更加严格;但通常我们倾向于放松这一点并接受更大的容差以获得合理的运行时间。