def test_solver_options(self): prog = mp.MathematicalProgram() prog.SetSolverOption(SolverType.kGurobi, "double_key", 1.0) prog.SetSolverOption(GurobiSolver().solver_id(), "int_key", 2) prog.SetSolverOption(SolverType.kGurobi, "string_key", "3") options = prog.GetSolverOptions(SolverType.kGurobi) self.assertDictEqual(options, { "double_key": 1.0, "int_key": 2, "string_key": "3" }) options = prog.GetSolverOptions(GurobiSolver().solver_id()) self.assertDictEqual(options, { "double_key": 1.0, "int_key": 2, "string_key": "3" }) # For now, just make sure the constructor exists. Once we bind more # accessors, we can test them here. options_object = SolverOptions() solver_id = SolverId("dummy") self.assertEqual(solver_id.name(), "dummy") options_object.SetOption(solver_id, "double_key", 1.0) options_object.SetOption(solver_id, "int_key", 2) options_object.SetOption(solver_id, "string_key", "3") options = options_object.GetOptions(solver_id) self.assertDictEqual(options, { "double_key": 1.0, "int_key": 2, "string_key": "3" })
class DummySolverInterface(SolverInterface): ID = SolverId("dummy") def __init__(self): SolverInterface.__init__(self) self.can_solve = False def available(self): return True def enabled(self): return True def solver_id(self): return DummySolverInterface.ID def Solve(self, prog, initial_guess=None, solver_options=None, result=None): # TODO(jwnimmer-tri) This trampoline for Solve is quite awkward. if result is not None: self._DoSolve(prog, initial_guess, solver_options, result) return else: result = mp.MathematicalProgramResult() self._DoSolve(prog, initial_guess, solver_options, result) return result def _DoSolve(self, prog, initial_guess, solver_options, result): assert (isinstance(result, mp.MathematicalProgramResult)) if not self.can_solve: raise Exception("Dummy solver cannot solve") # TODO(jwnimmer-tri) We should be setting the result here, but the # result class doesn't have any setters bound! I'm not sure why we # have a Solve trampoline in the first place, if no solver can ever # produce any results? def AreProgramAttributesSatisfied(self, prog): return self.can_solve
def solver_id(self): return SolverId("dummy")