Pyomo использует неустановленный компонент в качестве индексированного набора

#python-3.x #constraints #pyomo

#python-3.x #ограничения #pyomo

Вопрос:

Я новичок в Pyomo, но пытаюсь сформулировать модель, которая имеет один набор ограничений, которые я должен определить. Предположим, у меня есть следующий простой код, чтобы показать, что я пытаюсь сделать

 m = ConcreteModel()

m.rs = Set(initialize =[rs for rs in RS])
m.a = Set(initialize=[a for a in A])
m.t = ContinuousSet(bounds=(0, 10))

m.E = Var(m.rs, m.t)
m.tau = Var(m.a, m.t)

 

Я знаю, что неправильно использовать неустановленный компонент tau(t, a) в качестве индексированного компонента, это просто для того, чтобы просто показать, что мне нужно:

  m.E[rs, t] == sum(m.E[rs, t   tau(t, a)] for all a in ...)
 

Значение tau(t, a) вычисляется внутри модели при ее решении. Есть идеи, как можно написать такое ограничение?
Ваша помощь будет высоко оценена!

Комментарии:

1. Индексация по переменной на самом деле недоступна в инструментах математического программирования. Это во многих системах программирования с ограничениями. В математическом программировании мы обычно справляемся с этим, вводя двоичные переменные. Точная формулировка зависит от деталей.

2. @ErwinKalvelagen! Как я могу обсудить с вами детали?

3. Насколько велик диапазон значений, который tau(t,a) может принимать? Если он не слишком большой, вы можете заменить его набором двоичных переменных tau(t,a,i) , где i представляет значение. Затем вы можете создать свое ограничение m.E[rs, t] == sum(m.E[rs, t i] * tau(t,a,i))

4. @ErwinKalvelagen: Я узнал, что Pyomo обрабатывает дифференциальные и алгебраические уравнения. Знаете ли вы, как это условие может быть записано в форме DAE? Я уже преобразовал свою модель в формат DAE, но все еще есть проблема с преобразованием этого отношения. Спасибо!