hpp-centroidal-dynamics  4.10.0
Utility classes for testing (robust) equilibrium of a system in contact with the environment, and other centroidal dynamics methods.
solver_LP_abstract.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2015, LAAS-CNRS
3  * Author: Andrea Del Prete
4  */
5 
6 #ifndef HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_ABSTRACT_HH
7 #define HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_ABSTRACT_HH
8 
9 #include <Eigen/Dense>
12 
13 namespace centroidal_dynamics {
14 
18 enum CENTROIDAL_DYNAMICS_DLLAPI SolverLP {
19  SOLVER_LP_QPOASES = 0
20 #ifdef CLP_FOUND
21  ,
22  SOLVER_LP_CLP = 1
23 #endif
24 };
25 
29 enum CENTROIDAL_DYNAMICS_DLLAPI LP_status {
35  LP_STATUS_ERROR = 4
36 };
37 
42  protected:
43  bool m_useWarmStart; // true if the solver is allowed to warm start
44  int m_maxIter; // max number of iterations
45  double m_maxTime; // max time to solve the LP [s]
46 
47  public:
49  m_maxIter = 1000;
50  m_maxTime = 100.0;
51  m_useWarmStart = true;
52  }
53 
59  static Solver_LP_abstract *getNewSolver(SolverLP solverType);
60 
66  virtual LP_status solve(Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub, Cref_matrixXX A, Cref_vectorX Alb,
67  Cref_vectorX Aub, Ref_vectorX sol) = 0;
68 
75  virtual LP_status solve(const std::string &filename, Ref_vectorX sol);
76 
91  virtual bool writeLpToFile(const std::string &filename, Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub,
93 
109  virtual bool readLpFromFile(const std::string &filename, VectorX &c, VectorX &lb, VectorX &ub, MatrixXX &A,
110  VectorX &Alb, VectorX &Aub);
111 
113  virtual LP_status getStatus() = 0;
114 
116  virtual double getObjectiveValue() = 0;
117 
119  virtual void getDualSolution(Ref_vectorX res) = 0;
120 
122  virtual bool getUseWarmStart() { return m_useWarmStart; }
124  virtual void setUseWarmStart(bool useWarmStart) { m_useWarmStart = useWarmStart; }
125 
127  virtual unsigned int getMaximumIterations() { return m_maxIter; }
129  virtual bool setMaximumIterations(unsigned int maxIter);
130 
132  virtual double getMaximumTime() { return m_maxTime; }
134  virtual bool setMaximumTime(double seconds);
135 };
136 
137 } // end namespace centroidal_dynamics
138 
139 #endif // HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_ABSTRACT_HH
util.hh
LP_STATUS_OPTIMAL
LP_STATUS_OPTIMAL
Definition: solver_LP_abstract.hh:31
centroidal_dynamics::Solver_LP_abstract::m_maxIter
int m_maxIter
Definition: solver_LP_abstract.hh:44
centroidal_dynamics::Solver_LP_abstract::Solver_LP_abstract
Solver_LP_abstract()
Definition: solver_LP_abstract.hh:48
centroidal_dynamics::Solver_LP_abstract::getUseWarmStart
virtual bool getUseWarmStart()
Definition: solver_LP_abstract.hh:122
centroidal_dynamics::Solver_LP_abstract::m_maxTime
double m_maxTime
Definition: solver_LP_abstract.hh:45
centroidal_dynamics::MatrixXX
Eigen::Matrix< value_type, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXX
Definition: util.hh:47
centroidal_dynamics::Solver_LP_abstract::setUseWarmStart
virtual void setUseWarmStart(bool useWarmStart)
Definition: solver_LP_abstract.hh:124
CENTROIDAL_DYNAMICS_DLLAPI
#define CENTROIDAL_DYNAMICS_DLLAPI
Definition: local_config.hh:52
centroidal_dynamics::Solver_LP_abstract::getMaximumIterations
virtual unsigned int getMaximumIterations()
Definition: solver_LP_abstract.hh:127
centroidal_dynamics::Cref_matrixXX
const typedef Eigen::Ref< const MatrixXX > & Cref_matrixXX
Definition: util.hh:67
local_config.hh
centroidal_dynamics::Solver_LP_abstract::m_useWarmStart
bool m_useWarmStart
Definition: solver_LP_abstract.hh:43
centroidal_dynamics::Ref_vectorX
Eigen::Ref< VectorX > Ref_vectorX
Definition: util.hh:51
LP_STATUS_MAX_ITER_REACHED
LP_STATUS_MAX_ITER_REACHED
Definition: solver_LP_abstract.hh:34
LP_STATUS_INFEASIBLE
LP_STATUS_INFEASIBLE
Definition: solver_LP_abstract.hh:32
centroidal_dynamics
Definition: centroidal_dynamics.hh:14
centroidal_dynamics::Cref_vectorX
const typedef Eigen::Ref< const VectorX > & Cref_vectorX
Definition: util.hh:61
centroidal_dynamics::Solver_LP_abstract::getMaximumTime
virtual double getMaximumTime()
Definition: solver_LP_abstract.hh:132
LP_STATUS_UNKNOWN
LP_STATUS_UNKNOWN
Definition: solver_LP_abstract.hh:30
centroidal_dynamics::VectorX
Eigen::Matrix< value_type, Eigen::Dynamic, 1 > VectorX
Definition: util.hh:35
LP_STATUS_UNBOUNDED
LP_STATUS_UNBOUNDED
Definition: solver_LP_abstract.hh:33
centroidal_dynamics::Solver_LP_abstract
Abstract interface for a Linear Program (LP) solver.
Definition: solver_LP_abstract.hh:41