def test_is_fixed(self):
     p = parameter()
     self.assertEqual(p.is_fixed(), True)
     self.assertEqual(is_fixed(p), True)
     p.value = 1.0
     self.assertEqual(p.is_fixed(), True)
     self.assertEqual(is_fixed(p), True)
 def test_is_fixed(self):
     v = variable()
     self.assertEqual(v.is_fixed(), False)
     self.assertEqual(is_fixed(v), False)
     self.assertEqual(v.fixed, False)
     self.assertEqual(v.value, None)
     v.value = 1.0
     self.assertEqual(v.is_fixed(), False)
     self.assertEqual(is_fixed(v), False)
     self.assertEqual(v.fixed, False)
     self.assertEqual(v.value, 1.0)
     v.fix()
     self.assertEqual(v.is_fixed(), True)
     self.assertEqual(is_fixed(v), True)
     self.assertEqual(v.fixed, True)
     self.assertEqual(v.value, 1.0)
     v.value = None
     self.assertEqual(v.is_fixed(), True)
     self.assertEqual(is_fixed(v), True)
     self.assertEqual(v.fixed, True)
     self.assertEqual(v.value, None)
     v.free()
     self.assertEqual(v.is_fixed(), False)
     self.assertEqual(is_fixed(v), False)
     self.assertEqual(v.fixed, False)
     self.assertEqual(v.value, None)
    def test_is_fixed(self):
        v = variable()
        e = noclone(v + 1)
        self.assertEqual(e.is_fixed(), False)
        self.assertEqual(is_fixed(e), False)
        v.fix()
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)

        e = noclone(parameter())
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
 def test_is_fixed(self):
     e = self._ctype_factory()
     self.assertEqual(e.is_fixed(), True)
     self.assertEqual(is_fixed(e), True)
     e.expr = 1
     self.assertEqual(e.is_fixed(), True)
     self.assertEqual(is_fixed(e), True)
     v = variable()
     v.value = 2
     e.expr = v + 1
     self.assertEqual(e.is_fixed(), False)
     self.assertEqual(is_fixed(e), False)
     v.fix()
     self.assertEqual(e.is_fixed(), True)
     self.assertEqual(is_fixed(e), True)
     self.assertEqual(e(), 3)
    def test_is_fixed(self):
        e = self._ctype_factory()
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
        e.expr = 1
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
        p = parameter()
        e.expr = p**2
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
        a = self._ctype_factory()
        e.expr = (a * p)**2 / (p + 5)
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
        a.expr = 2.0
        p.value = 5.0
        self.assertEqual(e.is_fixed(), True)
        self.assertEqual(is_fixed(e), True)
        self.assertEqual(e(), 10.0)

        v = variable()
        with self.assertRaises(ValueError):
            e.expr = v + 1
Exemple #6
0
    def _add_constraint(self, con):
        if not con.active:
            return None

        if is_fixed(con.body):
            if self._skip_trivial_constraints:
                return None

        conname = self._symbol_map.getSymbol(con, self._labeler)

        if con._linear_canonical_form:
            gurobi_expr, referenced_vars = self._get_expr_from_pyomo_repn(
                con.canonical_form(), self._max_constraint_degree)
        elif isinstance(con, LinearCanonicalRepn):
            gurobi_expr, referenced_vars = self._get_expr_from_pyomo_repn(
                con, self._max_constraint_degree)
        else:
            gurobi_expr, referenced_vars = self._get_expr_from_pyomo_expr(
                con.body, self._max_constraint_degree)

        if con.has_lb():
            if not is_fixed(con.lower):
                raise ValueError(
                    'Lower bound of constraint {0} is not constant.'.format(
                        con))
        if con.has_ub():
            if not is_fixed(con.upper):
                raise ValueError(
                    'Upper bound of constraint {0} is not constant.'.format(
                        con))

        if con.equality:
            gurobipy_con = self._solver_model.addConstr(
                lhs=gurobi_expr,
                sense=self._gurobipy.GRB.EQUAL,
                rhs=value(con.lower),
                name=conname)
        elif con.has_lb() and (value(con.lower) >
                               -float('inf')) and con.has_ub() and (value(
                                   con.upper) < float('inf')):
            gurobipy_con = self._solver_model.addRange(gurobi_expr,
                                                       value(con.lower),
                                                       value(con.upper),
                                                       name=conname)
            self._range_constraints.add(con)
        elif con.has_lb() and (value(con.lower) > -float('inf')):
            gurobipy_con = self._solver_model.addConstr(
                lhs=gurobi_expr,
                sense=self._gurobipy.GRB.GREATER_EQUAL,
                rhs=value(con.lower),
                name=conname)
        elif con.has_ub() and (value(con.upper) < float('inf')):
            gurobipy_con = self._solver_model.addConstr(
                lhs=gurobi_expr,
                sense=self._gurobipy.GRB.LESS_EQUAL,
                rhs=value(con.upper),
                name=conname)
        else:
            raise ValueError(
                'Constraint does not have a lower or an upper bound: {0} \n'.
                format(con))

        for var in referenced_vars:
            self._referenced_variables[var] += 1
        self._vars_referenced_by_con[con] = referenced_vars
        self._pyomo_con_to_solver_con_map[con] = gurobipy_con
        self._solver_con_to_pyomo_con_map[gurobipy_con] = con
Exemple #7
0
    def _add_constraint(self, con):
        if not con.active:
            return None

        if is_fixed(con.body):
            if self._skip_trivial_constraints:
                return None

        conname = self._symbol_map.getSymbol(con, self._labeler)

        if con._linear_canonical_form:
            cplex_expr, referenced_vars = self._get_expr_from_pyomo_repn(
                con.canonical_form(), self._max_constraint_degree)
        elif isinstance(con, LinearCanonicalRepn):
            cplex_expr, referenced_vars = self._get_expr_from_pyomo_repn(
                con, self._max_constraint_degree)
        else:
            cplex_expr, referenced_vars = self._get_expr_from_pyomo_expr(
                con.body, self._max_constraint_degree)

        if con.has_lb():
            if not is_fixed(con.lower):
                raise ValueError(
                    'Lower bound of constraint {0} is not constant.'.format(
                        con))
        if con.has_ub():
            if not is_fixed(con.upper):
                raise ValueError(
                    'Upper bound of constraint {0} is not constant.'.format(
                        con))

        if con.equality:
            my_sense = 'E'
            my_rhs = [value(con.lower) - cplex_expr.offset]
            my_range = []
        elif con.has_lb() and (value(con.lower) >
                               -float('inf')) and con.has_ub() and (value(
                                   con.upper) < float('inf')):
            my_sense = 'R'
            lb = value(con.lower)
            ub = value(con.upper)
            my_rhs = [ub - cplex_expr.offset]
            my_range = [lb - ub]
            self._range_constraints.add(con)
        elif con.has_lb() and (value(con.lower) > -float('inf')):
            my_sense = 'G'
            my_rhs = [value(con.lower) - cplex_expr.offset]
            my_range = []
        elif con.has_ub() and (value(con.upper) < float('inf')):
            my_sense = 'L'
            my_rhs = [value(con.upper) - cplex_expr.offset]
            my_range = []
        else:
            raise ValueError(
                'Constraint does not have a lower or an upper bound: {0} \n'.
                format(con))

        if len(cplex_expr.q_coefficients) == 0:
            self._solver_model.linear_constraints.add(
                lin_expr=[[cplex_expr.variables, cplex_expr.coefficients]],
                senses=my_sense,
                rhs=my_rhs,
                range_values=my_range,
                names=[conname])
        else:
            if my_sense == 'R':
                raise ValueError(
                    'The CPLEXDirect interface does not support quadratic ' +
                    'range constraints: {0}'.format(con))
            self._solver_model.quadratic_constraints.add(
                lin_expr=[cplex_expr.variables, cplex_expr.coefficients],
                quad_expr=[
                    cplex_expr.q_variables1, cplex_expr.q_variables2,
                    cplex_expr.q_coefficients
                ],
                sense=my_sense,
                rhs=my_rhs[0],
                name=conname)

        for var in referenced_vars:
            self._referenced_variables[var] += 1
        self._vars_referenced_by_con[con] = referenced_vars
        self._pyomo_con_to_solver_con_map[con] = conname
        self._solver_con_to_pyomo_con_map[conname] = con
Exemple #8
0
def _get_bound(exp):
    if exp is None:
        return None
    if is_fixed(exp):
        return value(exp)
    raise ValueError("non-fixed bound or weight: " + str(exp))
 def is_fixed(self):
     """A boolean indicating whether this expression is fixed."""
     return is_fixed(self._expr)