Gurobi Python Доступные ограничения для производных переменных - PullRequest
0 голосов
/ 25 февраля 2020

Я реализую MILP в Gurobi, используя Python. Моя проблема имеет несколько переменных, которые получены из переменных решения, таких как:

y

С d[tau] является постоянным значением и q[t,tau,k] является двоичная переменная решения. Чтобы сделать запись более понятной, я хочу использовать эти переменные позже, например, в цели или в ограничениях. Я не уверен, как правильно это реализовать. Будучи новичком в Gurobi, мой подход заключается в следующем:

  1. Я объявляю y[t,tau,k] как переменную, используя Model.addVar()
  2. Я создаю ограничение равенства для принудительного применения y[t,tau,k]=q[t,tau,k]*d[tau], используя Model.addConstr()

В коде:

y[t,tau,k] = dda_prob_IS.addVar(
    lb=0.0,
    vtype=GRB.CONTINUOUS,
    name=f'y[{t},{tau},{k}]')

dda_prob_IS.addConstr(
    y[t,tau,k] == q[t,tau,k]*d[tau],
    name = f'y_def[{t},{tau},{k}]')

Я исключительно использую y[t,tau,k] в следующих частях реализации, поэтому мне нужно иметь возможность доступа к конкретному y. Есть ли более элегантный способ реализовать это или мой подход даже правильный?

Заранее спасибо за любую поддержку.

1 Ответ

0 голосов
/ 25 февраля 2020

Вы можете использовать addVars () , чтобы сделать эти переменные более эффективными:

y = dda_prob_IS.addVar(len(T), len(Tau), len(K)    
    lb=0.0,
    vtype=GRB.CONTINUOUS)

Это создает tupledict, к которому вы можете получить доступ, используя 3 индекса.

Вы также можете использовать addConstr () , чтобы добавить сразу несколько похожих ограничений, зацикливая переменные внутри вызова.

...