0
調用我有以下類型的約束:約束,對於前一組成員
def C_rule(model,t-1):
return x[t]<=y[t-1]
model.C=Constraint(model.t,rule=C_rule)
但設置model.t元素是字符串類型,所以我不能訪問前一個元素這種方式。 有沒有辦法做到這一點?
調用我有以下類型的約束:約束,對於前一組成員
def C_rule(model,t-1):
return x[t]<=y[t-1]
model.C=Constraint(model.t,rule=C_rule)
但設置model.t元素是字符串類型,所以我不能訪問前一個元素這種方式。 有沒有辦法做到這一點?
如果你宣佈你的設置要隨即下令,你可以做這樣的事情:
m.s = Set(initialize=['A','B','C'], ordered=True)
m.v = Var(m.s)
def _c_rule(m, i):
if i == 'A':
return Constraint.Skip
return m.v[i] <= m.v[m.s.prev(i)]
m.c = Constraint(m.s, rule=_c_rule)
# Or the opposite way
def _c2_rule(m, i):
if i == 'C':
return Constraint.Skip
return m.v[m.s.next(i)] <= m.v[i]
m.c2 = Constraint(m.s, rule=_c2_rule)
這將返回:'答:(1000) B:v [B] <= V [A] C:v [C] <= v [B]'但我要'A:v [B] <= v [A] B:v [C] <= v [B] C:None' – iriniapid
I'我已經更新了答案,包括你想要的東西。見約束'c2' –