DualSolver.h
Go to the documentation of this file.
1 /* Copyright 2020 CNRS-AIST JRL */
2 
3 #pragma once
4 
5 #include <Eigen/Core>
6 
7 #include <jrl-qp/SolverOptions.h>
8 #include <jrl-qp/api.h>
9 #include <jrl-qp/defs.h>
14 #include <jrl-qp/utils/Logger.h>
15 #include <jrl-qp/utils/debug.h>
16 
17 namespace jrl::qp
18 {
24 {
25 public:
26  DualSolver();
29  DualSolver(int nbVar, int nbCstr, bool useBounds);
30 
31  virtual ~DualSolver() = default;
32 
38  void resize(int nbVar, int nbCstr, bool useBounds);
39 
41  void options(const SolverOptions & options);
42 
44  WConstVector solution() const;
46  WConstVector multipliers() const;
48  double objectiveValue() const;
50  int iterations() const;
51 
57  const std::vector<ActivationStatus> & activeSet() const;
58 
60  void resetActiveSet();
61 
62 protected:
63  struct StepLength
64  {
65  double t1;
66  double t2;
67  int l;
68  };
69 
71  TerminationStatus solve();
73  TerminationStatus terminate(TerminationStatus status);
74 
80  internal::SelectedConstraint selectViolatedConstraint(const VectorConstRef & x) const;
82  void computeStep(VectorRef z, VectorRef r, const internal::SelectedConstraint & sc) const;
84  StepLength computeStepLength(const internal::SelectedConstraint & sc,
85  const VectorConstRef & x,
86  const VectorConstRef & u,
87  const VectorConstRef & z,
88  const VectorConstRef & r) const;
90  bool addConstraint(const internal::SelectedConstraint & sc);
94  bool removeConstraint(int l, VectorRef u);
96  virtual double dot(const internal::SelectedConstraint & sc, const VectorConstRef & z);
97 
105  virtual void computeStep_(VectorRef z, VectorRef r, const internal::SelectedConstraint & sc) const = 0;
108  const VectorConstRef & x,
109  const VectorConstRef & u,
110  const VectorConstRef & z,
111  const VectorConstRef & r) const = 0;
113  virtual bool addConstraint_(const internal::SelectedConstraint & sc) = 0;
117  virtual bool removeConstraint_(int l) = 0;
119  virtual double dot_(const internal::SelectedConstraint & sc, const VectorConstRef & z) = 0;
121  virtual void resize_(int nbVar, int nbCstr, bool useBounds) = 0;
122 
123 private:
125  void resize_p(int nbVar, int nbCstr, bool useBounds);
126 
127 protected:
130 
131  int it_; // number of iterations
132 
133  int nbVar_;
135 
136  double f_;
142 };
143 
144 } // namespace jrl::qp
#define JRLQP_DLLAPI
Definition: api.h:35
Definition: DualSolver.h:24
internal::Workspace work_u_
Definition: DualSolver.h:139
SolverOptions options_
Definition: DualSolver.h:128
virtual internal::InitTermination init_()=0
utils::Logger log_
Definition: DualSolver.h:129
internal::Workspace work_z_
Definition: DualSolver.h:138
internal::Workspace work_x_
Definition: DualSolver.h:137
virtual void resize_(int nbVar, int nbCstr, bool useBounds)=0
internal::ActiveSet A_
Definition: DualSolver.h:134
virtual double dot_(const internal::SelectedConstraint &sc, const VectorConstRef &z)=0
internal::Workspace work_r_
Definition: DualSolver.h:140
virtual internal::SelectedConstraint selectViolatedConstraint_(const VectorConstRef &x) const =0
virtual ~DualSolver()=default
virtual bool removeConstraint_(int l)=0
int nbVar_
Definition: DualSolver.h:133
virtual bool addConstraint_(const internal::SelectedConstraint &sc)=0
bool needToExpandMultipliers_
Definition: DualSolver.h:141
virtual void computeStep_(VectorRef z, VectorRef r, const internal::SelectedConstraint &sc) const =0
double f_
Definition: DualSolver.h:136
virtual StepLength computeStepLength_(const internal::SelectedConstraint &sc, const VectorConstRef &x, const VectorConstRef &u, const VectorConstRef &z, const VectorConstRef &r) const =0
int it_
Definition: DualSolver.h:131
Definition: ActiveSet.h:24
Definition: TerminationType.h:39
Definition: SelectedConstraint.h:14
Definition: Workspace.h:19
Definition: Logger.h:19
Definition: blockArrowLLT.h:13
TerminationStatus
Definition: enums.h:27
Eigen::Ref< const Eigen::VectorXd > VectorConstRef
Definition: defs.h:13
Eigen::Ref< Eigen::VectorXd > VectorRef
Definition: defs.h:14
decltype(std::add_const_t< internal::Workspace< double > >().asVector(0)) WConstVector
Definition: Workspace.h:150
Definition: DualSolver.h:64
int l
Definition: DualSolver.h:67
double t2
Definition: DualSolver.h:66
double t1
Definition: DualSolver.h:65
Definition: SolverOptions.h:15