我在Pyomo中相对较新,在访问cplex回调以生成用户切割时遇到一些问题。 我使用的是Pyomo 5.5.0和cplex 12.8.0.0,我已经定义了一个Abstract模型并加载了数据,现在我想指定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方法时,出现了上面的错误,因此我开始怀疑是否有办法从pyomo中访问cplex回调。我真的需要那个!
此功能在pyomo中可用吗?我想念什么吗?
感谢您的帮助