SCIP - Интегральное разделение - PullRequest
0 голосов
/ 03 мая 2018

Я разработал модель 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

Может ли кто-нибудь помочь мне ускорить код? Большое спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Пожалуйста, смотрите http://scip.zib.de/doc-5.0.1/html/BRANCH.php о том, как написать правило ветвления, и http://scip.zib.de/doc-5.0.1/html/SEPA.php для разделителей плоскостей резки (я до сих пор не уверен, что именно вы хотите сделать ...). Это описание для плагинов C, но эквиваленты должны существовать в PySCIPOpt или их легко добавить, если вы знаете, что вам нужно.

...