def test_range_constraints(self): m = pe.ConcreteModel() m.x = pe.Var() m.xl = pe.Param(initialize=-1, mutable=True) m.xu = pe.Param(initialize=1, mutable=True) m.c = pe.Constraint(expr=pe.inequality(m.xl, m.x, m.xu)) m.obj = pe.Objective(expr=m.x) opt = Gurobi() opt.set_instance(m) res = opt.solve(m) self.assertAlmostEqual(m.x.value, -1) m.xl.value = -3 res = opt.solve(m) self.assertAlmostEqual(m.x.value, -3) del m.obj m.obj = pe.Objective(expr=m.x, sense=pe.maximize) res = opt.solve(m) self.assertAlmostEqual(m.x.value, 1) m.xu.value = 3 res = opt.solve(m) self.assertAlmostEqual(m.x.value, 3)
def test_callback(self): m = pe.ConcreteModel() m.x = pe.Var(bounds=(0, 4)) m.y = pe.Var(within=pe.Integers, bounds=(0, None)) m.obj = pe.Objective(expr=2*m.x + m.y) m.cons = pe.ConstraintList() def _add_cut(xval): m.x.value = xval return m.cons.add(m.y >= taylor_series_expansion((m.x - 2)**2)) _add_cut(0) _add_cut(4) opt = Gurobi() opt.set_instance(m) opt.set_gurobi_param('PreCrush', 1) opt.set_gurobi_param('LazyConstraints', 1) def _my_callback(cb_m, cb_opt, cb_where): if cb_where == gurobipy.GRB.Callback.MIPSOL: cb_opt.cbGetSolution(vars=[m.x, m.y]) if m.y.value < (m.x.value - 2)**2 - 1e-6: cb_opt.cbLazy(_add_cut(m.x.value)) opt.set_callback(_my_callback) opt.solve(m) self.assertAlmostEqual(m.x.value, 1) self.assertAlmostEqual(m.y.value, 1)
def test_var_attr(self): m = pe.ConcreteModel() m.x = pe.Var(within=pe.Binary) opt = Gurobi() opt.set_instance(m) opt.set_var_attr(m.x, 'Start', 1) self.assertEqual(opt.get_var_attr(m.x, 'Start'), 1)
def test_quadratic_constraint_attr(self): m = pe.ConcreteModel() m.x = pe.Var() m.y = pe.Var() m.c = pe.Constraint(expr=m.y >= m.x**2) opt = Gurobi() opt.set_instance(m) self.assertEqual(opt.get_quadratic_constraint_attr(m.c, 'QCRHS'), 0)
def test_linear_constraint_attr(self): m = pe.ConcreteModel() m.x = pe.Var() m.y = pe.Var() m.c = pe.Constraint(expr=m.x + m.y == 1) opt = Gurobi() opt.set_instance(m) opt.set_linear_constraint_attr(m.c, 'Lazy', 1) self.assertEqual(opt.get_linear_constraint_attr(m.c, 'Lazy'), 1)