Возврат модели в интерфейсе python gurobi из функции

Я пытаюсь работать над моделью в 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'


person Amogh Bhosekar    schedule 06.05.2020    source источник


Ответы (1)


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()

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

person mattmilten    schedule 06.05.2020