2017-03-27 64 views
0

調用我有以下類型的約束:約束,對於前一組成員

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

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

但設置model.t元素是字符串類型,所以我不能訪問前一個元素這種方式。 有沒有辦法做到這一點?

回答

0

如果你宣佈你的設置要隨即下令,你可以做這樣的事情:

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) 
+0

這將返回:'答:(1000) B:v [B] <= V [A] C:v [C] <= v [B]'但我要'A:v [B] <= v [A] B:v [C] <= v [B] C:None' – iriniapid

+0

I'我已經更新了答案,包括你想要的東西。見約束'c2' –