Во время работы над моим проектом мне нужно изменить модель MIP с помощью функции обратного вызова.Я внимательно следил за документацией, но всегда получаю сообщение об ошибке.
Я полагаю, ошибка приходит с функцией cbGet, без этого я получаю вывод, хотя я не знаю, является ли он правильным.
Без функции обратного вызова моя модель работает просто отлично.
Вот мой код:
import gurobipy as gb
...
some code with the model
...
def cb(mod, where):
if where == gb.GRB.Callback.MIP:
print(mod.cbGet(gb.GRB.Callback.MIP_NODCNT))
def cb2(mod, where):
if where == gb.GRB.Callback.MIP:
print(gb.GRB.Callback.MIP_NODCNT)
m.optimize(cb(m, gb.GRB.Callback.MIP))
Обратите внимание, что если я использую cb2
в качестве функции обратного вызова, я получу код выхода 0 и вывод.Я не уверен, что этот вывод правильный.
Но когда я использую cb
в качестве функции обратного вызова, я получаю сообщение об ошибке
Traceback (most recent call last):
File "C:/Users/dbigb/PycharmProjects/MA/MIP_model.py", line 39, in <module> m.optimize(cb(m, gb.GRB.Callback.MIP))
File "C:/Users/dbigb/PycharmProjects/MA/MIP_model.py", line 32, in cb print(mod.cbGet(gb.GRB.Callback.MIP_NODCNT))
File "model.pxi", line 4136, in gurobipy.Model.cbGet
AttributeError: 'NoneType' object has no attribute '_cbdata'
Я не понимаю, какой атрибут не имеет значенияни то, что это _cbdata
, ни где я мог бы найти и проверить это.Буду признателен за любую помощь.
Я не включил всю модель, так как она работает нормально.Если это важно для решения, я отредактирую вопрос и добавлю код.