要求前一个集合成员的约束

时间:2017-03-27 13:22:55

标签: pyomo

我有以下类型的约束:

def C_rule(model,t-1):
    return x[t]<=y[t-1]

model.C=Constraint(model.t,rule=C_rule)

但是设置 model.t 元素是字符串类型,所以我无法以这种方式访问​​前一个元素。 有没有办法做到这一点 ?

1 个答案:

答案 0 :(得分:1)

如果您宣布您的订单已被订购,那么您可以执行以下操作:

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)