在我的最小化问题中,我需要最小化一个因子可能非常大的术语(例如某些情况下为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或某些等效类型?
答案 0 :(得分:0)
具体回答你的问题,不,没有BigInteger的支持。您可以查看CPLEX Java Reference Manual。
来验证这一点正如评论中所提到的,您可能希望扩展那些大系数。对于可变上限,值得注意的是CPX_INFBOUND(1.0e + 20)被视为无穷大(例如,参见CPXXnewcols的文档;这是针对C可调用库,但仍然相关)。此外,请确保您在目标函数中找到的系数没有“大变化(例如,六个或更多个数量级)”,否则您可能遇到numeric difficulties。