Можно ли добавить персонализированный столбец в журнал узла оптимизатора CPLEX?

IBM CPLEX включает следующие восемь столбцов в журнал узла оптимизатора:

  1. Узел 2. Узлы слева 3. Цель 4. IInf 5. Наилучшее целое число 6. Срезы / Наилучший узел 7. ItCnt 8. Промежуток

Должен признать, они предлагают интересную базовую информацию, описывающую процесс оптимизации. Тем не менее, мне было бы удобно показать столбец затраченного времени процессора, а также пару релевантных сведений по конкретной проблеме, которые позволили бы мне лучше понять процесс оптимизации во время вычислений.

Нигде я не смог найти информацию о том, как персонализировать журнал узла оптимизатора, только учебники IBM о том, как читать информацию, представленную в нем. Итак, можно ли вообще добавлять пользовательские столбцы в журнал узла оптимизатора CPLEX?


person Jacko    schedule 29.03.2016    source источник


Ответы (1)


Думаю, в основном нет. Но вы можете добиться чего-то подобного, используя функцию обратного вызова из cplex.

person TimChippingtonDerrick    schedule 29.03.2016
comment
Не могли бы вы рассказать немного подробнее о @TimChippingtonDerrick? Я новичок в C ++. Я использую обратные вызовы, но для добавления ленивых ограничений, как я могу добавить столбец в журнал узла оптимизатора с помощью обратного вызова? Не могли бы вы дать ссылку или отредактировать свой ответ, включив небольшой пример, пожалуйста? - person Jacko; 31.03.2016
comment
Не добавление в журнал узла, а репликация аналогичного вывода. Если вы используете обратный вызов узла, он будет вызываться на каждом узле дерева B&B. Внутри обратного вызова распечатайте количество исследованных узлов, наилучшую границу, лучшее целочисленное решение, найденное на данный момент, текущий разрыв и т. Д. В соответствии с обычным материалом журнала узлов, и добавьте все, что хотите. В папке установки CPLEX есть пример C ++ iloadmipex1.cpp, который использует обратный вызов узла, но не для печати. Вероятно, вы также захотите распечатать свою информацию только каждые 100 узлов или каждые 10 секунд, поэтому проверьте это также внутри обратного вызова узла. - person TimChippingtonDerrick; 01.04.2016