hpp-centroidal-dynamics  4.15.1
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,
70  Ref_vectorX sol) = 0;
71 
78  virtual LP_status solve(const std::string &filename, Ref_vectorX sol);
79 
94  virtual bool writeLpToFile(const std::string &filename, Cref_vectorX c,
96  Cref_vectorX Alb, Cref_vectorX Aub);
97 
112  virtual bool readLpFromFile(const std::string &filename, VectorX &c,
113  VectorX &lb, VectorX &ub, MatrixXX &A,
114  VectorX &Alb, VectorX &Aub);
115 
117  virtual LP_status getStatus() = 0;
118 
120  virtual double getObjectiveValue() = 0;
121 
123  virtual void getDualSolution(Ref_vectorX res) = 0;
124 
126  virtual bool getUseWarmStart() { return m_useWarmStart; }
128  virtual void setUseWarmStart(bool useWarmStart) {
129  m_useWarmStart = useWarmStart;
130  }
131 
133  virtual unsigned int getMaximumIterations() { return m_maxIter; }
135  virtual bool setMaximumIterations(unsigned int maxIter);
136 
138  virtual double getMaximumTime() { return m_maxTime; }
140  virtual bool setMaximumTime(double seconds);
141 };
142 
143 } // end namespace centroidal_dynamics
144 
145 #endif // HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_ABSTRACT_HH
Abstract interface for a Linear Program (LP) solver.
Definition: solver_LP_abstract.hh:41
virtual double getMaximumTime()
Definition: solver_LP_abstract.hh:138
double m_maxTime
Definition: solver_LP_abstract.hh:45
virtual void setUseWarmStart(bool useWarmStart)
Definition: solver_LP_abstract.hh:128
virtual unsigned int getMaximumIterations()
Definition: solver_LP_abstract.hh:133
bool m_useWarmStart
Definition: solver_LP_abstract.hh:43
virtual LP_status solve(Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub, Cref_matrixXX A, Cref_vectorX Alb, Cref_vectorX Aub, Ref_vectorX sol)=0
int m_maxIter
Definition: solver_LP_abstract.hh:44
Solver_LP_abstract()
Definition: solver_LP_abstract.hh:48
virtual bool getUseWarmStart()
Definition: solver_LP_abstract.hh:126
virtual void getDualSolution(Ref_vectorX res)=0
virtual ~Solver_LP_abstract()
Definition: solver_LP_abstract.hh:54
#define CENTROIDAL_DYNAMICS_DLLAPI
Definition: local_config.hh:52
Definition: centroidal_dynamics.hh:14
Eigen::Matrix< value_type, Eigen::Dynamic, 1 > VectorX
Definition: util.hh:35
Eigen::Ref< VectorX > Ref_vectorX
Definition: util.hh:53
const Eigen::Ref< const VectorX > & Cref_vectorX
Definition: util.hh:63
const Eigen::Ref< const MatrixXX > & Cref_matrixXX
Definition: util.hh:69
Eigen::Matrix< value_type, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXX
Definition: util.hh:49
LP_STATUS_INFEASIBLE
Definition: solver_LP_abstract.hh:32
LP_STATUS_OPTIMAL
Definition: solver_LP_abstract.hh:31
LP_STATUS_UNKNOWN
Definition: solver_LP_abstract.hh:30
LP_STATUS_MAX_ITER_REACHED
Definition: solver_LP_abstract.hh:34
LP_STATUS_UNBOUNDED
Definition: solver_LP_abstract.hh:33