def _generate_model(self): self.model = pmo.block() model = self.model model._name = self.description model.f = pmo.variable() model.x = pmo.variable(lb=1,ub=3) model.fi = pmo.parameter_dict() model.fi[1] = pmo.parameter(value=1.0) model.fi[2] = pmo.parameter(value=2.0) model.fi[3] = pmo.parameter(value=0.0) model.xi = pmo.parameter_dict() model.xi[1] = pmo.parameter(value=1.0) model.xi[2] = pmo.parameter(value=2.0) model.xi[3] = pmo.parameter(value=3.0) model.p = pmo.variable(domain=NonNegativeReals) model.n = pmo.variable(domain=NonNegativeReals) model.lmbda = pmo.create_variable_dict(range(1,4)) model.obj = pmo.objective(model.p+model.n) model.c1 = pmo.constraint_dict() model.c1[1] = pmo.constraint((0.0, model.lmbda[1], 1.0)) model.c1[2] = pmo.constraint((0.0, model.lmbda[2], 1.0)) model.c1[3] = pmo.constraint(0.0 <= model.lmbda[3]) model.c2 = pmo.sos2(model.lmbda.values()) model.c3 = pmo.constraint(sum(model.lmbda.values()) == 1) model.c4 = pmo.constraint(model.f==sum(model.fi[i]*model.lmbda[i] for i in model.lmbda)) model.c5 = pmo.constraint(model.x==sum(model.xi[i]*model.lmbda[i] for i in model.lmbda)) model.x.fix(2.75) # Make an empty SOS constraint model.c6 = pmo.sos2([])
def _generate_model(self): self.model = pmo.block() model = self.model model._name = self.description model.neg1 = pmo.parameter(value=-1.0) model.pos1 = pmo.parameter(value=1.0) model.s = list(range(1, 13)) model.x = pmo.create_variable_dict(keys=model.s) model.x[1].lb = model.neg1 model.x[1].ub = model.pos1 model.x[2].lb = model.neg1 model.x[2].ub = model.pos1 model.obj = pmo.objective(sum(model.x[i] * ((-1)**(i)) for i in model.s), sense=pmo.maximize) model.c = pmo.constraint_dict() model.c[3] = pmo.constraint(model.x[3] >= -1.) model.c[4] = pmo.constraint(model.x[4] <= 1.) model.c[5] = pmo.constraint(model.x[5] == -1.) model.c[6] = pmo.constraint(model.x[6] == -1.) model.c[7] = pmo.constraint(model.x[7] == 1.) model.c[8] = pmo.constraint(model.x[8] == 1.) model.c[9] = pmo.constraint((model.neg1, model.x[9], model.neg1)) model.c[10] = pmo.constraint((-1., model.x[10], -1.)) model.c[11] = pmo.constraint((1., model.x[11], 1.)) model.c[12] = pmo.constraint((1., model.x[12], 1.)) model.c_inactive = pmo.constraint_dict() # to make the variable used in the constraint match the name model.c_inactive[3] = pmo.constraint(model.x[3] >= -2.) model.c_inactive[4] = pmo.constraint(model.x[4] <= 2.)
def _generate_model(self): self.model = pmo.block() model = self.model model._name = self.description model.s = [1,2] model.x_unused = pmo.variable(domain=pmo.Integers) model.x_unused.stale = False model.x_unused_initialy_stale = pmo.variable(domain=pmo.Integers) model.x_unused_initialy_stale.stale = True model.X_unused = pmo.create_variable_dict(keys=model.s, domain=pmo.Integers) model.X_unused_initialy_stale = \ pmo.create_variable_dict(keys=model.s, domain=pmo.Integers) for i in model.s: model.X_unused[i].stale = False model.X_unused_initialy_stale[i].stale = True model.x = pmo.variable(domain=pmo.IntegerInterval(bounds=(None,None))) model.x.stale = False model.x_initialy_stale = pmo.variable(domain=pmo.Integers) model.x_initialy_stale.stale = True model.X = pmo.create_variable_dict(keys=model.s, domain=pmo.Integers) model.X_initialy_stale = pmo.create_variable_dict(keys=model.s, domain=pmo.Integers) for i in model.s: model.X[i].stale = False model.X_initialy_stale[i].stale = True model.obj = pmo.objective(model.x + \ model.x_initialy_stale + \ sum(model.X.values()) + \ sum(model.X_initialy_stale.values())) model.c = pmo.constraint_dict() model.c[1] = pmo.constraint(model.x >= 1) model.c[2] = pmo.constraint(model.x_initialy_stale >= 1) model.c[3] = pmo.constraint(model.X[1] >= 0) model.c[4] = pmo.constraint(model.X[2] >= 1) model.c[5] = pmo.constraint(model.X_initialy_stale[1] >= 0) model.c[6] = pmo.constraint(model.X_initialy_stale[2] >= 1) # Test that stale flags do not get updated # on inactive blocks (where "inactive blocks" mean blocks # that do NOT follow a path of all active parent blocks # up to the top-level model) flat_model = model.clone() model.b = pmo.block() model.B = pmo.block_dict() model.b.b = flat_model.clone() model.B[1] = pmo.tiny_block() model.B[1].b = flat_model.clone() model.B[2] = pmo.tiny_block() model.B[2].b = flat_model.clone() model.b.deactivate() model.B.deactivate() model.b.b.activate() model.B[1].b.activate() model.B[2].b.deactivate() assert model.b.active is False assert model.B[1].active is False assert model.B[1].active is False assert model.b.b.active is True assert model.B[1].b.active is True assert model.B[2].b.active is False