У меня проблема с формулировкой ограничений для трехмерных индексированных переменных с помощью Pyomo: у меня есть следующий список переменных:
1 Var Declarations
E : Size=6, Index=N
Key : Lower : Value : Upper : Fixed : Stale : Domain
(0, 0, 2) : 0 : 10 : None : False : False : NonNegativeReals
(0, 0, 3) : 0 : 10 : None : False : False : NonNegativeReals
(0, 2, 0) : 0 : 10 : None : False : False : NonNegativeReals
(0, 3, 0) : 0 : 10 : None : False : False : NonNegativeReals
(1, 3, 1) : 0 : 10 : None : False : False : NonNegativeReals
(1, 4, 1) : 0 : 10 : None : False : False : NonNegativeReals
они по сути являются значениями в трехмерном массиве (2x5x5), который может принимать значение, другоезатем 0. Я пытаюсь оптимизировать их, с некоторыми ограничениями: - сумма значений переменных в строке должна быть максимальной - сумма значений переменных в столбце должна принимать определенное значение
Мой вопросРассмотрено оба ограничения: я попытался сформулировать первое ограничение следующим образом:
def max_perf_rule(model, a, b):
return sum(model.E[a,b,c] for c in range(5) if (a,b,c) in model.N) <= H[a,b]
model.max_perf = Constraint(range(2), range(5), rule = max_perf_rule)
, где model.N = [(0, 0, 2), (0, 0, 3), (0,2, 0), (0, 3, 0), (1, 3, 1), (1, 4, 1)]
Переменные изначально заданы model.N (список трехмерных кортежей)но мне нужны два "range (2)" и "range (5)" в качестве входных данных в этом ограничении, чтобы иметь возможность ссылаться на соответствующую строку.
Независимо от того, что я пытаюсь, я не могу создатьжелаемые ограничения. Они должны выглядеть примерно так:
max_perf : Size=10, Index=max_perf_index, Active=True
(0, 0) : E[0,0,2] + E[0,0,3] : <= 0.0
(0, 2) : E[0,2,0] : <= 2688.0
(0, 3) : E[0,3,0] : <= 896.0
(1, 3) : E[1,3,1] : <= 448.0
(1, 4) : E[1,4,1] : <= 9999999.0
... но я продолжаю получать следующую ошибку:
"ERROR: Constructing component 'max_perf' from data=None failed: ValueError:
Invalid constraint expression. The constraint expression resolved to a
trivial Boolean (True) instead of a Pyomo object. Please modify your rule
to return Constraint.Feasible instead of True.
Error thrown for Constraint 'max_perf[0,1]'"
Я понятия не имею, что это такое;Я даже попытался воспроизвести ситуацию с помощью словаря, а не модели. E, и это сработало.
У вас есть какое-нибудь решение проблемы? Заранее спасибо!