我解决了一个MIP问题,使用BranchCallback(单线程)使每个分支的解决过程休眠1秒。我从日志中注意到,以秒为单位的系统时间每次运行都会更改,而以滴答为单位的确定性时间却没有改变。但是,问题在于,无论是否应用1秒睡眠,后者甚至都不会改变。相反,系统时间确实记录了睡眠时间。
我还尝试使用回调API来获得确定性的时间,但对于1秒的睡眠,它仅计0.0滴答。睡眠模式不是问题,因为一个简单的计算大量代码的代码也显示了0.0个滴答声。我认为它可能不会记录代码的运行时间。
确定性时间在CPLEX中究竟测量了什么?是否有任何方法可以像确定系统时间那样来测量实际运行时间(尤其是实际回调运行时间),但是要采用确定性方法?
确定性时间近似于CPLEX所做的工作(您可以将其视为CPLEX内部执行的指令数)。不执行任何操作不会执行任何指令,因此不会计入确定性时间。
而且,确定性时间仅在CPLEX内部测量。它不考虑在用户代码(如回调)中花费的时间。
如果要测量在回调中花费的时间,则必须自己做(CPLEX没有必要跟踪此时间):只需在回调的开头加上一个时间戳,在回调的末尾加上一个时间戳,然后计算差异。CPLEX回调具有记录时间戳的功能,请参见参考文档。
如果您想确定自己编写的代码的时间,则必须自己滚动,首先定义确定性时间对您的代码意味着什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句