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