Возврат модели в интерфейсе python gurobi из функции - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь работать над моделью в python -gurobi после того, как она была создана внутри функции и возвращена этой функцией.

Пример:

def createmodel(params):
    m = Model()
    x = m.addVar(vtype = GRB.BINARY)
    m.addConstr(constraint)
    m.setObjective(objectivefunction)
    return m

Затем я создать модель, используя начальные параметры

model = createmodel(params)
print(model)

Обратите внимание, что я вернул всю модель. Модель печати дает мне следующее, что означает, что модель была возвращена успешно и правильно.

<gurobi.Model MIP instance Unnamed: 225 constrs, 230 vars>

Затем я пытаюсь изменить цель модели. Используя model.setObjective(NewParam * x). Я получаю следующую ошибку. Кто-нибудь может помочь?

name 'x' is not defined'

1 Ответ

0 голосов
/ 06 мая 2020

x - это локальная переменная, определенная только в рамках функции createmodel(). Просто верните и m, и x, и вы сможете изменить модель вне функции:

def createmodel(params):
    m = Model()
    x = m.addVar(vtype = GRB.BINARY)
    m.addConstr(constraint)
    m.setObjective(objectivefunction)
    return m, x

model, x = createmodel(params)

В качестве альтернативы вы можете снова запросить переменные следующим образом:

x = model.getVars()

Это ненужная работа, так как у вас уже были все переменные под рукой, поэтому я бы go выбрал первое решение.

...