Я разработал модель SCIP / MIP с использованием релаксации LP, которая основывается на ветвлении по 0-1 переменным. Однако это довольно неэффективно, так как я не понял, как использовать соответствующие обратные вызовы SCIP.
Вот мой код:
isMIP = False
while True:
model.optimize()
if isMIP:
print("Optimal value:", model.getObjVal())
break
else:
print("Intermediate value:", model.getObjVal())
x,y,u = model.data
fracvars = []
for j in y:
w = model.getVal(y[j])
if w > 0.001 and w < 0.999:
fracvars.append([j,abs(w-0.5)])
if fracvars:
fracvars.sort(key = itemgetter(1))
min_var, min_value = min([(val[0],val[1]) for val in fracvars])
model.freeTransform()
model.chgVarType(y[min_var],"I") # the very inefficient part...
print("Integer constraint on y[%s]" % min_var)
else:
isMIP = True
Может ли кто-нибудь помочь мне ускорить код? Большое спасибо.