我的模型有数值问题吗?
我的模型有数值问题吗?
您可以按照以下步骤来帮助确定模型是否遇到数值问题:
- 通过导出模型文件和参数文件来隔离用于测试的模型。最简单的方法就是创建一个gurobi.env文件,其中包含以下行:
记录1
然后,运行Gurobi程序,它将生成gurobi.rec文件。之后,您可以使用gurobi_cl. - 使用Gurobi Interactive shell,运行一些简单的Python代码来读取重播生成的模型,并打印汇总统计信息:
m = read('gurobi.rew') . printstats ()
输出如下所示:统计模型(null):线性约束矩阵:25050若干,15820 var, 94874年通过变量类型:14836连续984整数矩阵系数范围:[0.00099,6 e + 06]目标系数范围:[0.2,65]变量绑定范围:[1,5 e + 07] RHS系数范围:(1、5 e + 7)
数值系数的范围是潜在数值问题的一个指示。作为一个非常粗略的准则,最大系数与最小系数的比值应该小于;较小的更好。在这个例子中,矩阵的范围是
- 如果可能的话,使用相同的参数重新解析模型并检查日志。在Python shell中,使用如下代码:
m.read (gurobi.prm) m.optimize ()
以下是一些提示数字问题的警告信息示例:考虑重新构造模型或设置NumericFocus参数以避免数值问题。警告:马科维茨公差收紧到0.5警告:切换到四精度数字错误数字故障遇到重新启动交叉…次优终止警告:…Warning: unscaled primal violation =…剩余=…警告:未缩放的双违规=…剩余=…
- 当优化功能完成后,打印解决方案统计。在Python shell中,使用如下代码:
m.printQuality ()
提供了解决方案质量的总结:未命名模型的解决方案质量统计:最大违反:Bound: 2.98023224e-08 (X234)约束:9.30786133e-04 (C5)完整性:0.00000000e+00
超出公差的违规是数字问题的另一个迹象。此外,对于纯LP(不含整型变量),可以通过以下Python命令打印条件号:
m.KappaExact
条件数测量线性计算中潜在的误差;大条件数,如,是可能出现数字问题的另一个迹象这章节以了解更多细节。 - 如果更改参数(例如,方法或种子)会导致不同的优化状态(例如,不可行而不是最优),或者如果最佳目标值发生了变化,这通常是数字问题的标志。为了进一步评估这一点,你可以收紧公差(按照甚至),看看求解器的行为是否再次变得一致。手机万博登录请注意,紧致公差通常以更多的计算时间为代价,不应被视为数值问题的解决方案。