调用前一个集合成员的约束 [英] Constraint that calls for the previous set member

查看:40
本文介绍了调用前一个集合成员的约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下类型的约束:

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

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

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

But set model.t elements are string type so i cannot access the previous element this way. Is there a way to do that ?

推荐答案

如果你声明你的 Set 是有序的,那么你可以这样做:

If you declare your Set to be ordered then you can do something like this:

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)

这篇关于调用前一个集合成员的约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆