2013-04-18 2 views
0

Какие вызовы вызываются во время полировки? Более конкретно, есть ли обратный вызов, вызываемый для каждого нового решения, обнаруженного во время полировки?CPLEX: Любые обратные вызовы, вызванные решением, при полировке?

У меня есть некоторый (старый) код на C++, который использует MIPInfoCallback, и который получил название fine во время B & B, но во время полировки он, похоже, не вызван, хотя полировка находит, возможно, 20 или 30 улучшенных решений. В документации указывается, что обратные вызовы вызываются обычно во время полировки, но может быть, что MIPInfoCallback только вызывается до того, как будет изучен каждый узел, и в моем случае полировка не исследует лишние узлы.

Я попытался переключиться на использование действующего обратного вызова, но для меня это сильно сказывается на производительности - просто изменение типа моего обратного вызова из MIPInfoCallback в IncumbentCallback меняет время, чтобы получить первое целочисленное допустимое решение примерно с 20 мин до более 3 часов (я действительно просто менял тип обратного вызова, оставив тело обратного вызова без изменений). Я подозреваю, что это связано с тем, что использование действующего обратного вызова отвлекает некоторые вещи от поиска.

Это на C++ в Windows с CPLEX 12.1, но в ближайшее время планируется обновление до 12.5.

ответ

0

Вы пробовали CPXsetincumbentcallbackfunc из библиотеки C для вызова? Я не изучал его поведение при полировке, но он позволяет пользователю отклонять решения по своему усмотрению, поэтому я предполагаю, что он должен быть вызван, когда сотрудник должен обновиться, в том числе во время полировки.

+0

CPXsetincumbentcallbackfunc - эквивалент C API для IncumbentCallback в C++. –

+0

@DavidNehme: Да, я не смог прочитать всю задачу. Регистрирует ли IncumbentCallback что-нибудь предосторожное? Я хочу предположить, что изменение времени до первого решения является лишь одним из капризов поиска по веткам и границам, но я бы хотел сначала исключить странность библиотеки C++. (Я убежал от крика из библиотеки C++, когда узнал о «EpLin». И я думаю, что видел, что по умолчанию проверены некоторые недокументированные данные). – tmyklebu

 Смежные вопросы

  • Нет связанных вопросов^_^