我的模型是否有数值问题?

我的模型是否有数值问题?

您可以按照以下步骤帮助确定模型是否遇到数字问题:

  1. 通过导出模型文件和参数文件来隔离模型进行测试。最简单的方法是创建一个gurobi.env.包含以下行的工作目录中的文件:
    记录1
    然后,运行您的Gurobi程序,将产生gurobi.rec.文件。之后,您可以使用此录制文件重放gurobi_cl.
  2. 使用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]
    数值系数的范围是潜在数值问题的一个指示。作为一个非常粗略的准则,最大与最小系数的比率应该小于< span > < / span > 10 ^ 9美元美元< span > < / span >;较小更好。

    在此示例中,矩阵范围是

    \ begin {displaymath} 6 \ cdot10 ^ 6/0.00099 = 6.0606 \ cdot10 ^ 9. \结束{displaymath}

  3. 如果可能的话,使用相同的参数重新解析模型并检查日志。使用Python shell,使用如下所示的代码:
    m.read('gurobi.prm')m.optimize()
    以下是建议数字问题的警告消息的一些示例:
    警告:模型包含大的矩阵系数范围,考虑重新设置模型或设置NumericFocus参数以避免数值问题。警告:Markowitz宽容收紧到0.5警告:切换到四边形精度数字误差遇到重启交叉的数值故障......次优终止警告:...从基础警告中删除的变量:未划算的原始违规= ......。警告:未划分的双违规= ......和残差= ...
  4. 当。。。的时候优化功能完成,打印解决方案统计信息。使用Python shell,使用如下所示的代码:
    m.printquality()
    这提供了解决方案质量摘要:
    型号型号未命名的解决方案质量统计:最大违规:绑定:2.98023224E-08(X234)约束:9.30786133E-04(C5)完整性:0.0000000000 + 00

    大于公差的违规是数值问题的另一个指示。此外,对于纯LP(没有整数变量),通过以下Python命令打印条件号:

    M.Kappaexact.
    条件号测量线性计算中误差的可能性;一个大的条件号,如<span> $ </ span> 10 ^ {12} <span> $ </ span>,是另一个可能的数字问题的指示,看这个有关更多详细信息的部分。
  5. 如果改变参数(例如,方法种子)会导致不同的优化状态(例如,不可行代替最佳)或者如果最佳客观值改变,这通常是数值问题的标志。为了进一步评估此,您可以收紧公差(到订单)<span> $ </ span> 10 ^ { -  8} <span> $ </ span>甚至<span> $ </ span> 10 ^ { -  9} <span> $ </ span>),看看求解器的行为是否再次变得一致。手机万博登录请注意,收紧公差通常以更高的计算时间的价格出现,不应被视为用于数值问题的解决方案。