#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, но все еще есть проблема с преобразованием этого отношения. Спасибо!