Как узнать время, затраченное на перезапуск Clairvoyant? - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь определить время, необходимое для перезапуска Clairvoyant в SCIP7.0.0, чтобы сравнить скорость с другим численным методом.

В event_estim.c я изменил строку 2792, чтобы она стала SCIPverbMessage(scip, SCIP_VERBLEVEL_HIGH, NULL, "Restart triggered after %d consecutive estimations that the remaining tree will be large. Time taken is %.3f \n", eventhdlrdata->restarthitcounter, SCIPclockGetTime(scip->stat->solvingtime));

Однако после перекомпиляции SCIP я получаю следующую ошибку:

src/scip/event_estim.c: In function ‘eventExecEstim’:
src/scip/event_estim.c:2793:50: warning: implicit declaration of function ‘SCIPclockGetTime’; did you mean ‘SCIPsolGetTime’? [-Wimplicit-function-declaration]
                eventhdlrdata->restarthitcounter, SCIPclockGetTime(scip->stat->solvingtime));             
                                                  ^~~~~~~~~~~~~~~~
                                                  SCIPsolGetTime
src/scip/event_estim.c: At top level:
cc1: warning: unrecognized command line option ‘-Wno-unknown-warning-option’

Я использовал SCIPclockGetTime с этими аргументами, потому что мне нужно было текущее время решения. Может кто-нибудь мне помочь? Спасибо за помощь.

1 Ответ

2 голосов
/ 05 августа 2020

Краткий ответ: функция, которую вы ищете, - SCIPgetSolvingTime(scip).

Более длинный ответ: функция SCIPclockGetTime() объявлена ​​в private header clock.h и поэтому не должна напрямую использоваться в плагинах, таких как этот плагин обработчика событий. Вместо этого вы можете использовать SCIPgetClockTime(scip, clockptr) (обратите внимание на различие в именах, «get» теперь идет первым.), Который является оболочкой publi c вокруг SCIPclockGetTime(). Для доступа к часам времени решения, которые являются центральным объектом часов в SCIP, вы можете использовать удобный метод SCIPgetSolvingTime(scip), так что вам не нужно самостоятельно разыменовывать scip-> stat-> Время решения.

Причина этого обертывания заключается в том, что внутреннее устройство ядра SCIP может измениться, например, в будущем к SCIPclockGetTime () может быть добавлен новый аргумент, или объект времени решения может быть перемещен в другое место. API publi c, который используют плагины, в таких случаях менять не нужно.

...