Crocoddyl
Loading...
Searching...
No Matches
ipopt.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2022-2025, IRI: CSIC-UPC, Heriot-Watt University
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_SOLVERS_IPOPT_HPP_
10#define CROCODDYL_CORE_SOLVERS_IPOPT_HPP_
11
12#define HAVE_CSTDDEF
13#include <IpIpoptApplication.hpp>
14#include <IpSolveStatistics.hpp>
15#undef HAVE_CSTDDEF
16
17#include "crocoddyl/core/solver-base.hpp"
18#include "crocoddyl/core/solvers/ipopt/ipopt-iface.hpp"
19
20namespace crocoddyl {
21
30class SolverIpopt : public SolverAbstractTpl<Ipopt::Number> {
31 public:
32 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
33 CROCODDYL_BASE_DERIVED_FLOATINGPOINT_CAST(SolverBase, SolverIpopt)
34
35 typedef Ipopt::Number Scalar;
36 typedef SolverAbstractTpl<Scalar> SolverAbstract;
37 typedef ShootingProblemTpl<Scalar> ShootingProblem;
38 typedef IpoptInterfaceTpl<Scalar> IpoptInterface;
39 typedef MathBaseTpl<Scalar> MathBase;
40 typedef typename MathBase::VectorXs VectorXs;
41 typedef typename MathBase::Vector3s Vector3s;
44
50 SolverIpopt(std::shared_ptr<ShootingProblem> problem);
51 ~SolverIpopt() = default;
52
53 bool solve(
54 const std::vector<VectorXs>& init_xs = DefaultVector<Scalar>::value,
55 const std::vector<VectorXs>& init_us = DefaultVector<Scalar>::value,
56 const std::size_t maxiter = 100, const bool is_feasible = false,
57 const Scalar reg_init = Scalar(1e-9)) override;
58 virtual void resizeData() override;
59
66 void setStringIpoptOption(const std::string& tag, const std::string& value);
67
74 void setNumericIpoptOption(const std::string& tag, Ipopt::Number value);
75
76 void set_th_stop(const Scalar th_stop);
77
78 private:
79 Ipopt::SmartPtr<IpoptInterface> ipopt_iface_;
80 Ipopt::SmartPtr<Ipopt::IpoptApplication> ipopt_app_;
81 Ipopt::ApplicationReturnStatus ipopt_status_;
82
83 virtual void computeDirection(const bool recalc) override;
84 virtual Scalar tryStep(const Scalar steplength = Scalar(1.)) override;
85 virtual Scalar stoppingCriteria() override;
86 virtual Vector3s expectedImprovement() override;
87
95};
96} // namespace crocoddyl
97
98/* --- Details -------------------------------------------------------------- */
99/* --- Details -------------------------------------------------------------- */
100/* --- Details -------------------------------------------------------------- */
101#include "crocoddyl/core/solvers/ipopt.hxx"
102
103#endif
Class for interfacing a crocoddyl::ShootingProblem with IPOPT.
This class encapsulates a shooting problem.
Definition shooting.hpp:32
std::shared_ptr< ShootingProblem > problem_
SolverAbstractTpl(std::shared_ptr< ShootingProblem > problem)
virtual void setCandidate(const std::vector< VectorXs > &xs_warm=DefaultVector< Scalar >::value, const std::vector< VectorXs > &us_warm=DefaultVector< Scalar >::value, const bool is_feasible=false)
SolverIpopt(std::shared_ptr< ShootingProblem > problem)
Initialize the Ipopt solver.
virtual void resizeData() override
Resizing the solver data.
void setStringIpoptOption(const std::string &tag, const std::string &value)
Set a string ipopt option.
void setNumericIpoptOption(const std::string &tag, Ipopt::Number value)
Set a string ipopt option.