hpp-centroidal-dynamics 5.0.0
Utility classes for testing (robust) equilibrium of a system in contact with the environment, and other centroidal dynamics methods.
Loading...
Searching...
No Matches
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
13namespace centroidal_dynamics {
14
18enum CENTROIDAL_DYNAMICS_DLLAPI SolverLP {
19 SOLVER_LP_QPOASES = 0
20#ifdef CLP_FOUND
21 ,
22 SOLVER_LP_CLP = 1
23#endif
24};
25
29enum 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
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