我的模型是否有数值问题?
我的模型是否有数值问题?
您可以按照以下步骤帮助确定模型是否遇到数字问题:
- 通过导出模型文件和参数文件来隔离模型进行测试。最简单的方法是创建一个gurobi.env.包含以下行的工作目录中的文件:
记录1
然后,运行您的Gurobi程序,将产生gurobi.rec.文件。之后,您可以使用此录制文件重放gurobi_cl.。 - 使用Gurobi Interactive shell,运行一些简单的Python代码来读取重播生成的模型,并打印汇总统计信息:
m =读('gurobi.rew')m.printstats()
输出看起来像:模型统计数据(null):线性约束矩阵:25050约束,15820 var,94874 nzs变量类型:14836连续,984整数矩阵系数范围:[0.00099,6e + 06]目标系数范围:[0.2,65]可变绑定范围:[1,5E + 07] RHS系数范围:[1,5E + 07]
数值系数的范围是潜在数值问题的一个指示。作为一个非常粗略的准则,最大与最小系数的比率应该小于;较小更好。在此示例中,矩阵范围是
- 如果可能的话,使用相同的参数重新解析模型并检查日志。使用Python shell,使用如下所示的代码:
m.read('gurobi.prm')m.optimize()
以下是建议数字问题的警告消息的一些示例:警告:模型包含大的矩阵系数范围,考虑重新设置模型或设置NumericFocus参数以避免数值问题。警告:Markowitz宽容收紧到0.5警告:切换到四边形精度数字误差遇到重启交叉的数值故障......次优终止警告:...从基础警告中删除的变量:未划算的原始违规= ......。警告:未划分的双违规= ......和残差= ...
- 当。。。的时候优化功能完成,打印解决方案统计信息。使用Python shell,使用如下所示的代码:
m.printquality()
这提供了解决方案质量摘要:型号型号未命名的解决方案质量统计:最大违规:绑定:2.98023224E-08(X234)约束:9.30786133E-04(C5)完整性:0.0000000000 + 00
大于公差的违规是数值问题的另一个指示。此外,对于纯LP(没有整数变量),通过以下Python命令打印条件号:
M.Kappaexact.
条件号测量线性计算中误差的可能性;一个大的条件号,如,是另一个可能的数字问题的指示,看这个有关更多详细信息的部分。 - 如果改变参数(例如,方法或种子)会导致不同的优化状态(例如,不可行代替最佳)或者如果最佳客观值改变,这通常是数值问题的标志。为了进一步评估此,您可以收紧公差(到订单)甚至),看看求解器的行为是否再次变得一致。手机万博登录请注意,收紧公差通常以更高的计算时间的价格出现,不应被视为用于数值问题的解决方案。