20#include <boost/unordered_map.hpp>
57 struct LinesearchVariant {
58 using VariantType = std::variant<std::monostate, ArmijoLinesearch<Scalar>,
65 return std::numeric_limits<Scalar>::quiet_NaN();
68 return method.run(fun, phi0, dphi0, alpha_try);
74 std::visit(
overloads{[](std::monostate &) {},
75 [&](
auto &method) { method.reset(); }},
79 [[nodiscard]]
bool isValid()
const {
return impl_.index() > 0ul; }
96 "Provided StepAcceptanceStrategy value is invalid.");
100 friend SolverProxDDPTpl;
234 bool run(
const Problem &problem,
const std::vector<VectorXs> &xs_init = {},
235 const std::vector<VectorXs> &us_init = {},
236 const std::vector<VectorXs> &vs_init = {},
237 const std::vector<VectorXs> &lams_init = {});
264 std::vector<std::string_view> keys;
266 keys.push_back(item.first);
293 const std::vector<VectorXs> &xs,
294 const std::vector<VectorXs> &lams,
295 const std::vector<VectorXs> &vs);
351#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
352extern template struct SolverProxDDPTpl<context::Scalar>;
A memory_resource wrapping around mimalloc.
A convenience subclass of std::pmr::polymorphic_allocator for bytes.
#define ALIGATOR_RUNTIME_ERROR(...)
Implements a basic Armijo back-tracking strategy.
VerboseLevel
Verbosity level.
StepAcceptanceStrategy
Whether to use linesearch or filter during step acceptance phase.
NonmonotoneLinesearch(const LinesearchOptions< Scalar > &) -> NonmonotoneLinesearch< Scalar >
ArmijoLinesearch(const LinesearchOptions< Scalar > &) -> ArmijoLinesearch< Scalar >
@ GAUSS_NEWTON
Use the Gauss-Newton approximation.
LinesearchMode
Whether to use merit functions in primal or primal-dual mode.
Define workspace for the ProxDDP solver.
Base constraint set type.
Convenience class to manage a stack of constraints.
Data struct for CostAbstractTpl.
Extended hashing function for strings which supports const char* and std::string_view.
A basic filter line-search strategy.
A table logging utility to log the trace of the numerical solvers.
Nonmonotone Linesearch algorithm. Modifies the Armijo condition with a moving average of function val...
Scalar mu_update_factor
Scale factor for ALM parameter.
Scalar dual_beta
for dual tolerance (success)
Scalar dual_alpha
for dual tolerance (failure)
Scalar prim_beta
for primal tolerance (success)
Scalar prim_alpha
for primal tolerance (failure)
Scalar mu_lower_bound
Lower bound on AL parameter.
Scalar run(const std::function< Scalar(Scalar)> &fun, const Scalar phi0, const Scalar dphi0, Scalar &alpha_try)
std::variant< std::monostate, ArmijoLinesearch< Scalar >, NonmonotoneLinesearch< Scalar > > VariantType
Scalar tryLinearStep(const Problem &problem, const Scalar alpha)
Try a step of size .
MultiplierUpdateMode multiplier_update_mode
polymorphic_allocator allocator_
void setAlmPenalty(Scalar new_mu) noexcept
Set dual proximal/ALM penalty parameter.
void computeCriterion()
Compute stationarity criterion (dual infeasibility).
Scalar mu_dyn() const
Used in linesearch.
Scalar refinement_threshold_
bool run(const Problem &problem, const std::vector< VectorXs > &xs_init={}, const std::vector< VectorXs > &us_init={}, const std::vector< VectorXs > &vs_init={}, const std::vector< VectorXs > &lams_init={})
Run the numerical solver.
boost::unordered_map< std::string, CallbackPtr, ExtendedStringHash, std::equal_to<> > CallbackMap
shared_ptr< CallbackBaseTpl< Scalar > > CallbackPtr
TrajOptDataTpl< Scalar > TrajOptData
ResultsTpl< Scalar > Results
void invokeCallbacks()
Invoke callbacks.
size_t max_refinement_steps_
auto getCallbackNames() const
LinesearchOptions< Scalar > ls_params
void clearCallbacks() noexcept
Remove all callbacks from the instance.
std::unique_ptr< gar::RiccatiSolverBase< Scalar > > LinearSolverPtr
SolverProxDDPTpl(const Scalar tol=1e-6, const Scalar mu_init=0.01, const size_t max_iters=1000, VerboseLevel verbose=VerboseLevel::QUIET, StepAcceptanceStrategy sa_strategy=StepAcceptanceStrategy::LINESEARCH_NONMONOTONE, HessianApprox hess_approx=HessianApprox::GAUSS_NEWTON)
bool force_initial_condition_
LinesearchVariant linesearch_
LQSolverChoice linear_solver_choice
Scalar forwardPass(const Problem &problem, const Scalar alpha)
StageDataTpl< Scalar > StageData
ConstraintSetTpl< Scalar > CstrSet
RolloutType rollout_type_
StageModelTpl< Scalar > StageModel
ConstraintStackTpl< Scalar > ConstraintStack
bool computeMultipliers(const Problem &problem, const std::vector< VectorXs > &xs, const std::vector< VectorXs > &lams, const std::vector< VectorXs > &vs)
void setup(const Problem &problem)
Allocate new workspace and results instances according to the specifications of problem.
HessianApprox hess_approx_
const CallbackMap & getCallbacks() const
void cycleProblem(const Problem &problem, const shared_ptr< StageData > &data)
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
void initializeRegularization() noexcept
void updateTolsOnSuccess() noexcept
size_t getNumThreads() const
Scalar getDualTolerance() const
LinearSolverPtr linear_solver_
StepAcceptanceStrategy sa_strategy_
FilterTpl< Scalar > filter_
mimalloc_resource memory_resource_
TrajOptProblemTpl< Scalar > Problem
bool innerLoop(const Problem &problem)
Perform the inner loop of the algorithm (augmented Lagrangian minimization).
void increaseRegularization() noexcept
StageFunctionDataTpl< Scalar > StageFunctionData
Scalar tryNonlinearRollout(const Problem &problem, const Scalar alpha)
Policy rollout using the full nonlinear dynamics. The feedback gains need to be computed first....
void updateTolsOnFailure() noexcept
void registerCallback(std::string_view name, CallbackPtr cb)
Add a callback to the solver instance.
void setDualTolerance(const Scalar tol)
Manually set desired dual feasibility tolerance.
bool removeCallback(std::string_view name)
CostDataAbstractTpl< Scalar > CostData
WorkspaceTpl< Scalar > Workspace
void setNumThreads(const size_t num_threads)
void updateLQSubproblem()
CallbackPtr getCallback(std::string_view name) const
Data struct for stage models StageModelTpl.
Base struct for function data.
A stage in the control problem.
Trajectory optimization problem.
Workspace for solver SolverProxDDP.
Utility helper struct for creating visitors from lambdas.