hpp-centroidal-dynamics  4.11.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 
54  virtual ~Solver_LP_abstract() {}
55 
61  static Solver_LP_abstract *getNewSolver(SolverLP solverType);
62 
68  virtual LP_status solve(Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub, Cref_matrixXX A, Cref_vectorX Alb,
69  Cref_vectorX Aub, Ref_vectorX sol) = 0;
70 
77  virtual LP_status solve(const std::string &filename, Ref_vectorX sol);
78 
93  virtual bool writeLpToFile(const std::string &filename, Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub,
95 
111  virtual bool readLpFromFile(const std::string &filename, VectorX &c, VectorX &lb, VectorX &ub, MatrixXX &A,
112  VectorX &Alb, VectorX &Aub);
113 
115  virtual LP_status getStatus() = 0;
116 
118  virtual double getObjectiveValue() = 0;
119 
121  virtual void getDualSolution(Ref_vectorX res) = 0;
122 
124  virtual bool getUseWarmStart() { return m_useWarmStart; }
126  virtual void setUseWarmStart(bool useWarmStart) { m_useWarmStart = useWarmStart; }
127 
129  virtual unsigned int getMaximumIterations() { return m_maxIter; }
131  virtual bool setMaximumIterations(unsigned int maxIter);
132 
134  virtual double getMaximumTime() { return m_maxTime; }
136  virtual bool setMaximumTime(double seconds);
137 };
138 
139 } // end namespace centroidal_dynamics
140 
141 #endif // HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_ABSTRACT_HH
virtual ~Solver_LP_abstract()
Definition: solver_LP_abstract.hh:54
int m_maxIter
Definition: solver_LP_abstract.hh:44
Eigen::Matrix< value_type, Eigen::Dynamic, 1 > VectorX
Definition: util.hh:35
LP_STATUS_OPTIMAL
Definition: solver_LP_abstract.hh:31
Definition: centroidal_dynamics.hh:14
const Eigen::Ref< const MatrixXX > & Cref_matrixXX
Definition: util.hh:67
bool m_useWarmStart
Definition: solver_LP_abstract.hh:43
const Eigen::Ref< const VectorX > & Cref_vectorX
Definition: util.hh:61
Solver_LP_abstract()
Definition: solver_LP_abstract.hh:48
double m_maxTime
Definition: solver_LP_abstract.hh:45
#define CENTROIDAL_DYNAMICS_DLLAPI
Definition: local_config.hh:52
virtual double getMaximumTime()
Definition: solver_LP_abstract.hh:134
LP_STATUS_UNKNOWN
Definition: solver_LP_abstract.hh:30
Abstract interface for a Linear Program (LP) solver.
Definition: solver_LP_abstract.hh:41
virtual unsigned int getMaximumIterations()
Definition: solver_LP_abstract.hh:129
LP_STATUS_UNBOUNDED
Definition: solver_LP_abstract.hh:33
LP_STATUS_MAX_ITER_REACHED
Definition: solver_LP_abstract.hh:34
Eigen::Matrix< value_type, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXX
Definition: util.hh:47
LP_STATUS_INFEASIBLE
Definition: solver_LP_abstract.hh:32
virtual bool getUseWarmStart()
Definition: solver_LP_abstract.hh:124
Eigen::Ref< VectorX > Ref_vectorX
Definition: util.hh:51
virtual void setUseWarmStart(bool useWarmStart)
Definition: solver_LP_abstract.hh:126