rby1-sdk
Loading...
Searching...
No Matches
qp_solver.h
1#pragma once
2
3#include <exception>
4#include <memory>
5#include <optional>
6
7#include "Eigen/Core"
8#include "rby1-sdk/export.h"
9
10namespace rb::math {
11
12class RBY1_SDK_API QPSolverException : public std::exception {
13 public:
14 static constexpr unsigned int kStatusOffset = 100;
15
16 explicit QPSolverException(int error_code);
17
18 const char* what() const noexcept override;
19
20 int code() const noexcept;
21
22 static std::string GenerateMessage(int code);
23
24 private:
25 int error_code_;
26 std::string message_;
27};
28
29class QPSolverImpl;
30
31class RBY1_SDK_API QPSolver {
32 public:
33 QPSolver();
34
35 ~QPSolver();
36
37 void Setup(int n_var, int n_const, double time_limit = 2e-3);
38
39 void InitFunction();
40
41 void AddCostFunction(const Eigen::MatrixXd& A, const Eigen::VectorXd& b);
42
43 void SetCostFunction(const Eigen::MatrixXd& A, const Eigen::VectorXd& b);
44
45 void SetConstraintsFunction(const Eigen::MatrixXd& A, const Eigen::VectorXd& lb, const Eigen::VectorXd& ub);
46
47 void SetPrimalVariable(const Eigen::VectorXd& pv);
48
49 void ResetIsFirst();
50
56 Eigen::VectorXd Solve();
57
58 Eigen::MatrixXd GetACost() const; // NOLINT
59
60 Eigen::VectorXd GetBCost() const; // NOLINT
61
62 Eigen::MatrixXd GetAConst() const; // NOLINT
63
64 Eigen::VectorXd GetLowerBound() const; // NOLINT
65
66 Eigen::VectorXd GetUpperBound() const; // NOLINT
67
68 private:
69 std::unique_ptr<QPSolverImpl> impl_;
70};
71
72} // namespace rb::math
Definition qp_solver.h:12
Definition qp_solver.h:31
Eigen::VectorXd Solve()