CPLEX: Как получить реальное время работы определенным образом c? (Python) - PullRequest
0 голосов
/ 21 марта 2020

Я решил проблему с MIP, заставив процесс решения спать на 1 секунду в каждой ветви, используя BranchCallback (один поток). Из журнала я заметил, что системное время, измеряемое в секундах, менялось при каждом запуске, в то время как детерминированное c время, измеренное в тиках, не изменялось. Однако проблема заключалась в том, что последний даже не изменился, был ли применен 1-секундный сон или нет. Напротив, системное время действительно записывало время ожидания.

Я также пытался получить детерминированное время c, используя API обратного вызова, но он подсчитывал только 0,0 тиков за 1-секундный сон. Это не проблема в режиме ожидания, потому что простой подсчет кода для большого числа также показал 0,0 тиков. Я подумал, что он может не записывать время выполнения кода.

Что именно определяет время 100m * детерминиста в CPLEX? Есть ли какой-либо метод для измерения реального времени выполнения (особенно реального времени выполнения обратного вызова), как системное время, но определенным образом c?

1 Ответ

2 голосов
/ 23 марта 2020

Определенное время c является приблизительным значением для работы, выполняемой CPLEX (вы можете думать о ней как о количестве инструкций, выполненных внутри CPLEX). Бездействие не выполняет никаких инструкций, поэтому не учитывает детерминированность c времени.

Более того, детерминированность c времени измеряется только внутри CPLEX. Он не учитывает время, потраченное в пользовательском коде, например, на обратные вызовы.

Если вы хотите измерить время, потраченное на ваш обратный вызов, вы должны сделать это самостоятельно (CPLEX не имеет смысла отслеживать это): просто возьмите отметку времени в начале вашего обратного вызова, одну в конце обратного вызова, а затем вычислите разницу. Обратные вызовы CPLEX имеют функции для взятия меток времени, см. Справочную документацию.

Если вы хотите иметь определенное время c для написанного вами кода, вам нужно свернуть свое собственное и прежде всего определить, что определитель c время означает для вашего кода.

...