GenQPSolver.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 // std
9 #include <vector>
10 
11 // Tasks
12 #include <tasks/config.hh>
13 
14 // Eigen
15 #include <Eigen/Core>
16 #include <Eigen/Sparse>
17 
18 // forward declaration
19 // RBDyn
20 namespace rbd
21 {
22 class MultiBody;
23 }
24 
25 namespace tasks
26 {
27 
28 namespace qp
29 {
30 // forward declarition
31 class Task;
32 class Equality;
33 class Inequality;
34 class GenInequality;
35 class Bound;
36 class GenQPSolver;
37 
42 TASKS_DLLAPI GenQPSolver * createQPSolver(const std::string & name);
43 
52 class TASKS_DLLAPI GenQPSolver
53 {
54 public:
56  static const std::string default_qp_solver;
57 
58 public:
59  virtual ~GenQPSolver() {}
60 
68  virtual void updateSize(int nrVars, int nrEq, int nrInEq, int nrGenInEq) = 0;
69 
75  virtual void setDependencies(int nrVars, std::vector<std::tuple<int, int, double>> dependencies);
76 
85  virtual void updateMatrix(const std::vector<Task *> & tasks,
86  const std::vector<Equality *> & eqConstr,
87  const std::vector<Inequality *> & inEqConstr,
88  const std::vector<GenInequality *> & genInEqConstr,
89  const std::vector<Bound *> & boundConstr) = 0;
90 
95  virtual bool solve() = 0;
96 
98  virtual const Eigen::VectorXd & result() const = 0;
99 
101  virtual std::ostream & errorMsg(const std::vector<rbd::MultiBody> & mbs,
102  const std::vector<Task *> & tasks,
103  const std::vector<Equality *> & eqConstr,
104  const std::vector<Inequality *> & inEqConstr,
105  const std::vector<GenInequality *> & genInEqConstr,
106  const std::vector<Bound *> & boundConstr,
107  std::ostream & out) const = 0;
108 
110  virtual std::string name() const = 0;
111 
112 protected:
114  std::vector<int> fullToReduced_;
116  std::vector<int> reducedToFull_;
119  std::vector<std::tuple<int, int, double>> dependencies_;
121  Eigen::SparseMatrix<double> multipliers_;
122 };
123 
124 } // namespace qp
125 
126 } // namespace tasks
tasks::qp::GenQPSolver::~GenQPSolver
virtual ~GenQPSolver()
Definition: GenQPSolver.h:59
tasks::qp::GenQPSolver::fullToReduced_
std::vector< int > fullToReduced_
Definition: GenQPSolver.h:114
tasks::qp::GenQPSolver::multipliers_
Eigen::SparseMatrix< double > multipliers_
Definition: GenQPSolver.h:121
tasks::qp::GenQPSolver::default_qp_solver
static const std::string default_qp_solver
Default QP solver.
Definition: GenQPSolver.h:56
rbd
Definition: GenQPSolver.h:20
tasks::qp::GenQPSolver
Definition: GenQPSolver.h:52
tasks::qp::GenQPSolver::dependencies_
std::vector< std::tuple< int, int, double > > dependencies_
Definition: GenQPSolver.h:119
tasks::qp::GenQPSolver::reducedToFull_
std::vector< int > reducedToFull_
Definition: GenQPSolver.h:116
tasks::qp::createQPSolver
TASKS_DLLAPI GenQPSolver * createQPSolver(const std::string &name)
tasks
Definition: GenQPUtils.h:18