Я относительно новичок в 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? Я что-то упустил?
Спасибо за вашу помощь