model = pyo.ConcreteModel()
# Sets
model.k = pyo.RangeSet(136)
model.i = pyo.Set(initialize = [1,2,3,4])
model.n = pyo.Set(model.i,initialize = {1:[1,2,3],2:[1,2,3,4,5],3:[1,2,3],4:[1,2]})
def set_init(model):
return [(i,n) for i in model.i for n in model.n[i]]
model.x = pyo.Set(dimen = 2,initialize = set_init)
#Param
model.t = pyo.Param(model.k,initialize = np.arange(0, 68, 0.5).tolist())
model.tauB = pyo.Param(model.x)
#Var
model.Sb = pyo.Var(model.k,model.x,within=pyo.Binary)
model.Db = pyo.Var(model.x,domain = pyo.NonNegativeReals)
def rule3(model,i,n):
return model.Db[i,n]>=sum(model.Sb[k,i,n]*model.t[k] for k in model.k) - model.tauB[i,n]
model.objconst = pyo.Constraint(model.i,model.n[i],rule=rule3)
ERROR: Rule failed when generating expression for Constraint objconst with index (1, 1): AttributeError: 'list' object has no attribute 'is_expression_type'
ERROR: Constructing component 'objconst' from data=None failed: AttributeError: 'list' object has no attribute 'is_expression_type'
What is the correct way to use this indexed set model.x to build the constraint?
This should get you going. Made several tweaks. You should use
model.xfor creating your last constraint as you cannot reference the valueiin the rule statement. Also, I re-worked yourkvalues. This compiles.