CPLEX:如何以确定性方式获得真实的 运行 时间? (Python)

CPLEX: How to get the real running time in a deterministic way? (Python)

我解决了一个 MIP 问题,使用 BranchCallback(单线程)使求解过程在每个分支上休眠 1 秒。我从日志中注意到,以秒为单位的系统时间每隔 运行 更改一次,而以滴答为单位的确定性时间却没有。然而,问题在于后者甚至没有改变是否应用1秒睡眠。相反,系统时间确实记录了睡眠时间。

我也尝试使用回调 api 来获取确定性时间,但它只计算了 1 秒睡眠的 0.0 个滴答声。这不是关于睡眠模式的问题,因为一段简单的计算大量数字的代码也显示了 0.0 个刻度。我以为它可能不会记录代码运行宁时间

CPLEX 中的确定性时间究竟测量什么?有没有什么方法可以像系统时间那样测量真实的 运行ning 时间(尤其是真实的回调 运行ning 时间),但是是确定性的?

确定性时间是 CPLEX 所做工作的近似值(您可以将其视为在 CPLEX 内执行的指令数)。什么都不做不会执行任何指令,因此不计入确定性时间。

此外,确定性时间仅在内部 CPLEX 中测量。它不考虑花在回调等用户代码上的时间。

如果您想测量回调中花费的时间,那么您必须自己做(CPLEX 没有必要跟踪这个):只需在回调开始时取一个时间戳,一个在回调结束,然后计算差异。 CPLEX 回调具有获取时间戳的函数,请参阅参考文档。

如果您想为您编写的代码设置确定时间,那么您必须自己动手,首先定义确定时间对您的代码意味着什么。