Esempio n. 1
0
    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([])
Esempio n. 2
0
    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.)
Esempio n. 3
0
    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