You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Conception/drake-master/solvers/choose_best_solver.h

58 lines
2.0 KiB

#pragma once
#include <memory>
#include <set>
#include <vector>
#include "drake/solvers/mathematical_program.h"
#include "drake/solvers/solver_id.h"
#include "drake/solvers/solver_interface.h"
namespace drake {
namespace solvers {
/**
* Choose the best solver given the formulation in the optimization program and
* the availability of the solvers.
* @throws std::exception if there is no available solver for @p prog.
*/
[[nodiscard]] SolverId ChooseBestSolver(const MathematicalProgram& prog);
/**
* Returns the set of solvers known to ChooseBestSolver.
*/
[[nodiscard]] const std::set<SolverId>& GetKnownSolvers();
/**
* Given the solver ID, create the solver with the matching ID.
* @throws std::exception if there is no matching solver.
*/
[[nodiscard]] std::unique_ptr<SolverInterface> MakeSolver(const SolverId& id);
/**
* Makes the first available and enabled solver. If no solvers are available,
* throws a std::exception.
*/
[[nodiscard]] std::unique_ptr<SolverInterface> MakeFirstAvailableSolver(
const std::vector<SolverId>& solver_ids);
/**
* Returns the list of available and enabled solvers that definitely accept all
* programs of the given program type.
* The order of the returned SolverIds reflects an approximate order of
* preference, from most preferred (front) to least preferred (back). Because we
* are analyzing only based on the program type rather than a specific program,
* it's possible that solvers later in the list would perform better in certain
* situations. To obtain the truly best solver, using ChooseBestSolver()
* instead.
* @note If a solver only accepts a subset of the program type, then that solver
* is not included in the returned results. For example
* EqualityConstrainedQPSolver doesn't accept programs with inequality linear
* constraints, so it doesn't show up in the return of
* GetAvailableSolvers(ProgramType::kQP).
*/
[[nodiscard]] std::vector<SolverId> GetAvailableSolvers(ProgramType prog_type);
} // namespace solvers
} // namespace drake