Я работаю над проблемой оптимизации цепочки поставок, используя Pyomo, и мне нужно установить ограничение на указанные c переменные в модели. Ограничение состоит в том, что переменная должна быть в пределах набора (0,1) или (200, до бесконечности). Однако, когда я пытаюсь установить это ограничение, я получаю TypeError, вот мой код:
def rail_rule(model):
for route in routes:
if "rail" in route[0].lower():
dest = route[0]
dg = route[1]
sg = route[2]
site = route[3]
return model.x[dest, dg, sg, site]>=200 or model.x[dest, dg, sg, site]<=1
model.railconst = Constraint(rule = rail_rule)
Я получаю эту ошибку при запуске:
TypeError: Relational expression used in an unexpected Boolean context.
The inequality expression:
200.0 <= x[RAIL - KENSINGTON,8,8,BROCKLESBY]
contains non-constant terms (variables) that were evaluated in an
unexpected Boolean context at
File '<ipython-input-168-901363ebc86f>', line 8:
return model.x[dest, dg, sg, site]>=200 or model.x[dest, dg, sg, site]<=1
Evaluating Pyomo variables in a Boolean context, e.g.
if expression <= 5:
is generally invalid. If you want to obtain the Boolean value of the
expression based on the current variable values, explicitly evaluate the
expression using the value() function:
if value(expression) <= 5:
or
if value(expression <= 5):
Так что мой понимание состоит в том, что я не могу дать Pyomo логическое выражение в качестве ограничения, но я совершенно новичок в Pyomo и не слишком уверен, что это моя проблема или я делаю это правильно.
Это ограничение также может быть реализован в инициализации переменной как границы, но я не могу найти способ установить две границы для одной переменной в Pyomo.
Спасибо!