2017-01-08 3 views
0

Я пытаюсь объявить ограничения ниже в Python, но это не сработает.Gurobi - объявить ограничения в python

Это мой код:

m.addConstrs((tsk*Xkt[i]).sum(k, '*') + (tbk*Qkt[i]).sum(k, "*") <= bt[i]+Ot[i] for i in range(0, t)) 

+1

это не ваш код. Это _line_ вашего кода. Пожалуйста, предоставьте [mcve] и точную ошибку. –

+0

Извините за терминологию. Ошибка так долго, что я не хотел вставлять ее здесь. и в конце говорится только «KeyError: 0» –

ответ

2

Метод tupledict.sum() относится к tupledict объекта, а не LinExpr такие как tsk*Xkt[i]. У вас есть два варианта:

  1. Использование функции sum() или quicksum(), создавая такое выражение:

    m.addConstrs(quicksum(ts[k]*X[k,t] + tb[k]*Q[k,t] for k in Krange) <= b[t]+O[t] for t in Trange) 
    
  2. Используй tupledict.prod() метод:

    m.addConstrs(X.prod(ts, '*', t) + Q.prod(tb, '*', t) <= b[t]+O[t] for t in Trange) 
    

Несколько комментариев :

  1. Я изменил обозначение индекса, чтобы лучше соответствовать математическим выражениям. Неясно, являются ли выражения ts и tb или t ˙ s и t ˙ b; отрегулируйте свой код соответствующим образом.
  2. В настоящее время имеется ошибка документации в синтаксисе для tupledict.prod(); мой код выше отражает правильное использование этого метода.
+0

Большое вам спасибо за помощь! Я выбрал quiksum - хорошо сделал работу! –

Смежные вопросы