def test_gurobi_socp_dual(self): prog = mp.MathematicalProgram() x = prog.NewContinuousVariables(2, "x") constraint = prog.AddLorentzConeConstraint( [2., 2 * x[0], 3 * x[1] + 1]) prog.AddLinearCost(x[1]) solver = GurobiSolver() options = mp.SolverOptions() options.SetOption(solver.solver_id(), "QCPDual", 1) result = solver.Solve(prog, None, options) np.testing.assert_allclose(result.GetDualSolution(constraint), np.array([-1. / 12]), atol=1e-7)
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))