Solves a nonlinear program via the projected gradient descent algorithm.
The gradient is determined by differentiation of the costs, or the user can supply a custom gradient function. The projection step is itself an optimization problem in general, but the user can supply a custom projection function. The user can also specify a specific solver interface to be used to solve the projection problem.
The solver terminates if
#include <drake/solvers/projected_gradient_descent_solver.h>
Public Member Functions | |
| ProjectedGradientDescentSolver () | |
| ~ProjectedGradientDescentSolver () final | |
| void | SetCustomGradientFunction (const std::function< Eigen::VectorXd(const Eigen::VectorXd &)> &custom_gradient_function) |
| Specify a custom gradient function. | |
| void | SetCustomProjectionFunction (const std::function< bool(const Eigen::VectorXd &, Eigen::VectorXd *)> &custom_projection_function) |
| Specify a custom projection function. | |
| void | SetProjectionSolverInterface (const SolverInterface *projection_solver_interface) |
| Specify a solver interface to be used when solving the L2 projection onto the feasible set of the MathematicalProgram it's being used to solve. | |
Does not allow copy, move, or assignment | |
| ProjectedGradientDescentSolver (const ProjectedGradientDescentSolver &)=delete | |
| ProjectedGradientDescentSolver & | operator= (const ProjectedGradientDescentSolver &)=delete |
| ProjectedGradientDescentSolver (ProjectedGradientDescentSolver &&)=delete | |
| ProjectedGradientDescentSolver & | operator= (ProjectedGradientDescentSolver &&)=delete |
| Public Member Functions inherited from SolverBase | |
| ~SolverBase () override | |
| MathematicalProgramResult | Solve (const MathematicalProgram &prog, const std::optional< Eigen::VectorXd > &initial_guess=std::nullopt, const std::optional< SolverOptions > &solver_options=std::nullopt) const |
| Like SolverInterface::Solve(), but the result is a return value instead of an output argument. | |
| void | Solve (const MathematicalProgram &, const std::optional< Eigen::VectorXd > &, const std::optional< SolverOptions > &, MathematicalProgramResult *) const override |
| Solves an optimization program with optional initial guess and solver options. | |
| bool | available () const override |
| Returns true iff support for this solver has been compiled into Drake. | |
| bool | enabled () const override |
| Returns true iff this solver is properly configured for use at runtime. | |
| SolverId | solver_id () const final |
| Returns the identifier of this solver. | |
| bool | AreProgramAttributesSatisfied (const MathematicalProgram &) const override |
| Returns true iff the program's attributes are compatible with this solver's capabilities. | |
| std::string | ExplainUnsatisfiedProgramAttributes (const MathematicalProgram &) const override |
| Describes the reasons (if any) why the program is incompatible with this solver's capabilities. | |
| SolverBase (const SolverBase &)=delete | |
| SolverBase & | operator= (const SolverBase &)=delete |
| SolverBase (SolverBase &&)=delete | |
| SolverBase & | operator= (SolverBase &&)=delete |
| Public Member Functions inherited from SolverInterface | |
| virtual | ~SolverInterface () |
| SolverInterface (const SolverInterface &)=delete | |
| SolverInterface & | operator= (const SolverInterface &)=delete |
| SolverInterface (SolverInterface &&)=delete | |
| SolverInterface & | operator= (SolverInterface &&)=delete |
Static Public Member Functions | |
| static std::string | ConvergenceTolOptionName () |
| static std::string | MaxIterationsOptionName () |
| static std::string | BacktrackingCOptionName () |
| static std::string | BacktrackingTauOptionName () |
| static std::string | BacktrackingAlpha0OptionName () |
Static versions of the instance methods with similar names. | |
| static constexpr double | kDefaultConvergenceTol = 1e-12 |
| static constexpr int | kDefaultMaxIterations = 1000 |
| static constexpr double | kDefaultBacktrackingC = 0.5 |
| static constexpr double | kDefaultBacktrackingTau = 0.5 |
| static constexpr double | kDefaultBacktrackingAlpha0 = 0.1 |
| static constexpr int | kDefaultMaxLineSearchSteps = 100 |
| MathematicalProgramResult | Solve (const MathematicalProgram &prog, const std::optional< Eigen::VectorXd > &initial_guess=std::nullopt, const std::optional< SolverOptions > &solver_options=std::nullopt) const |
| Like SolverInterface::Solve(), but the result is a return value instead of an output argument. | |
| void | Solve (const MathematicalProgram &, const std::optional< Eigen::VectorXd > &, const std::optional< SolverOptions > &, MathematicalProgramResult *) const override |
| Solves an optimization program with optional initial guess and solver options. | |
| static SolverId | id () |
| static bool | is_available () |
| static bool | is_enabled () |
| static bool | ProgramAttributesSatisfied (const MathematicalProgram &) |
Additional Inherited Members | |
| Protected Member Functions inherited from SolverBase | |
| SolverBase (const SolverId &id, std::function< bool()> available, std::function< bool()> enabled, std::function< bool(const MathematicalProgram &)> are_satisfied, std::function< std::string(const MathematicalProgram &)> explain_unsatisfied=nullptr) | |
| Constructs a SolverBase with the given default implementations of the solver_id(), available(), enabled(), AreProgramAttributesSatisfied(), and ExplainUnsatisfiedProgramAttributes() methods. | |
| virtual void | DoSolve (const MathematicalProgram &prog, const Eigen::VectorXd &initial_guess, const SolverOptions &merged_options, MathematicalProgramResult *result) const |
| Hook for subclasses to implement Solve. | |
| Protected Member Functions inherited from SolverInterface | |
| SolverInterface () | |
|
delete |
|
delete |
|
final |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
delete |
|
delete |
|
static |
| void SetCustomGradientFunction | ( | const std::function< Eigen::VectorXd(const Eigen::VectorXd &)> & | custom_gradient_function | ) |
Specify a custom gradient function.
Otherwise, this solver will differentiate through the costs in the MathematicalProgram it's used to solve.
| void SetCustomProjectionFunction | ( | const std::function< bool(const Eigen::VectorXd &, Eigen::VectorXd *)> & | custom_projection_function | ) |
Specify a custom projection function.
Otherwise, this solver will attempt to solve the L2 projection onto the feasible set of the MathematicalProgram it's used to solve. The projection function should return a boolean value indicating success or failure. It should take in two arguments: the point we are trying to stay close to, and an output argument where the projected value will be placed.
| void SetProjectionSolverInterface | ( | const SolverInterface * | projection_solver_interface | ) |
Specify a solver interface to be used when solving the L2 projection onto the feasible set of the MathematicalProgram it's being used to solve.
|
overridevirtual |
Solves an optimization program with optional initial guess and solver options.
Note that these initial guess and solver options are not written to prog. If the prog has set an initial guess, and initial_guess is set, then initial_guess takes priority. If the prog has set an option for a solver, and solver_options contains a different value for the same option on the same solver, then solver_options takes priority. Derived implementations of this interface may elect to throw std::exception for badly formed programs.
Implements SolverInterface.
| MathematicalProgramResult Solve | ( | const MathematicalProgram & | prog, |
| const std::optional< Eigen::VectorXd > & | initial_guess = std::nullopt, | ||
| const std::optional< SolverOptions > & | solver_options = std::nullopt ) const |
Like SolverInterface::Solve(), but the result is a return value instead of an output argument.
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |