def test_write_to_file(self): prog = mp.MathematicalProgram() x = prog.NewContinuousVariables(2) prog.AddLinearConstraint(x[0] + x[1] == 1) prog.AddQuadraticCost(x[0] * x[0] + x[1] * x[1]) solver = GurobiSolver() file_name = temp_directory() + "/gurobi.mps" options = mp.SolverOptions() options.SetOption(solver.id(), "GRBwrite", file_name) result = solver.Solve(prog, None, options) self.assertTrue(os.path.exists(file_name))
def test_callback(self): prog = mp.MathematicalProgram() b = prog.NewBinaryVariables(4) prog.AddLinearConstraint(b[0] <= 1 - 0.5 * b[1]) prog.AddLinearConstraint(b[1] <= 1 - 0.5 * b[0]) prog.AddLinearCost(-b[0] - b[1]) prog.SetSolverOption(GurobiSolver.id(), "Presolve", 0) prog.SetSolverOption(GurobiSolver.id(), "Heuristics", 0.) prog.SetSolverOption(GurobiSolver.id(), "Cuts", 0) prog.SetSolverOption(GurobiSolver.id(), "NodeMethod", 2) b_init = np.array([0, 0., 0., 0.]) prog.SetInitialGuess(b, b_init) solver = GurobiSolver() explored_node_count = 0 def node_callback(prog, solver_status_info, x, x_vals): nonlocal explored_node_count explored_node_count = solver_status_info.explored_node_count solver.AddMipNodeCallback( callback=lambda prog, solver_status_info, x, x_vals: node_callback( prog, solver_status_info, x, x_vals)) best_objectives = [] def sol_callback(prog, callback_info, objectives): print(f"explored nodes {callback_info.explored_node_count}") objectives.append(callback_info.best_objective) solver.AddMipSolCallback( callback=lambda prog, callback_info: sol_callback( prog, callback_info, best_objectives)) result = solver.Solve(prog) self.assertTrue(result.is_success()) self.assertGreater(explored_node_count, 0) self.assertGreater(len(best_objectives), 0)
def test_compute_iis(self): prog = mp.MathematicalProgram() x = prog.NewContinuousVariables(2) prog.AddBoundingBoxConstraint(1, np.inf, x) prog.AddLinearConstraint(x[0] + x[1] == 1) solver = GurobiSolver() ilp_file_name = temp_directory() + "/gurobi.ilp" options = mp.SolverOptions() options.SetOption(solver.id(), "GRBwrite", ilp_file_name) options.SetOption(solver.id(), "GRBcomputeIIS", 1) result = solver.Solve(prog, None, options) self.assertTrue(os.path.exists(ilp_file_name))
def test_gurobi_solver(self): prog = mp.MathematicalProgram() x = prog.NewContinuousVariables(2, "x") prog.AddLinearConstraint(x[0] >= 1) prog.AddLinearConstraint(x[1] >= 1) prog.AddQuadraticCost(np.eye(2), np.zeros(2), x) solver = GurobiSolver() self.assertEqual(solver.solver_id(), GurobiSolver.id()) self.assertTrue(solver.available()) self.assertEqual(solver.solver_type(), mp.SolverType.kGurobi) result = solver.Solve(prog, None, None) self.assertTrue(result.is_success()) x_expected = np.array([1, 1]) self.assertTrue(np.allclose(result.GetSolution(x), x_expected)) self.assertGreater(result.get_solver_details().optimizer_time, 0.) self.assertEqual(result.get_solver_details().error_code, 0) self.assertEqual(result.get_solver_details().optimization_status, 2) self.assertTrue(np.isnan(result.get_solver_details().objective_bound))