Предоставляет ли pyomo доступ к обратным вызовам cplex? - PullRequest
0 голосов
/ 13 ноября 2018

Я относительно новичок в Pyomo, и у меня есть некоторые проблемы с получением доступа к обратному вызову cplex для генерации пользовательских сокращений. Я использую Pyomo 5.5.0 и cplex 12.8.0.0, я уже определил абстрактную модель и загрузил данные, теперь я хотел бы указать cplex UserCutCallback, чтобы добавить написанные пользователем сокращения во время ветвления и поиск среза, выполняемый cplex.

Я попробовал следующее:

# model definition
model = AbstractModel()
...

# load the instance
instance = model.create_instance(data = 'data.dat')

# the callback that cplex should call during the branch-and-cut search
def cut_callback(solver, model):
    print("CB-Cut")

opt = SolverFactory('cplex_direct')
opt.set_callback('cut-callback', cut_callback)

Но я получил следующую ошибку:

~/miniconda3/envs/opt/lib/python3.6/site-packages/pyomo/opt/bas/solvers.py in set_callback(self, name, callback_fn)
    815         if not self._allow_callbacks:
    816             raise pyutilib.common.ApplicationError(
--> 817                 "Callbacks disabled for solver %s" % self.name)
    818         if callback_fn is None:
    819             if name in self._callback:

ApplicationError: Callbacks disabled for solver cplexdirect 

Интерфейс cplex direct работает правильно, когда я не указываю никаких обратных вызовов, но когда я вызываю метод set_callback, я получаю вышеуказанную ошибку, и поэтому я начал задаваться вопросом, есть ли способ получить доступ к обратным вызовам cplex от pyomo. Мне это действительно нужно!

Доступна ли эта функция в pyomo? Я что-то упустил?

Спасибо за вашу помощь

...