- 3.0.2 optimal control module.
BoxConstraintBase.h
Go to the documentation of this file.
1 /**********************************************************************************************************************
2 This file is part of the Control Toolbox (https://github.com/ethz-adrl/control-toolbox), copyright by ETH Zurich.
3 Licensed under the BSD-2 license (see LICENSE file in main directory)
4 **********************************************************************************************************************/
5 
6 #pragma once
7 
8 namespace ct {
9 namespace optcon {
10 
19 template <size_t DERIVED_DIM, size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR = double>
20 class BoxConstraintBase : public ConstraintBase<STATE_DIM, CONTROL_DIM, SCALAR>
21 {
22 public:
23  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
24 
27 
31 
32  using VectorXi = Eigen::Matrix<int, Eigen::Dynamic, 1>;
33  using VectorXs = Eigen::Matrix<SCALAR, Eigen::Dynamic, 1>;
34  using MatrixXs = Eigen::Matrix<SCALAR, Eigen::Dynamic, Eigen::Dynamic>;
35 
36  using sparsity_matrix_t = Eigen::Matrix<SCALAR, Eigen::Dynamic, DERIVED_DIM>;
37 
39  static void sparsityPatternSparseJacobian(const VectorXi& sparsity_vec,
40  const size_t& constrSize,
41  VectorXi& rows,
42  VectorXi& cols);
43 
50  BoxConstraintBase(const decision_vector_t& vLow, const decision_vector_t& vHigh);
51 
58  BoxConstraintBase(const VectorXs& lb, const VectorXs& ub, const Eigen::VectorXi& sparsity_vec);
59 
61 
62  virtual ~BoxConstraintBase();
63 
65 
66  virtual size_t getConstraintSize() const override;
67 
68  virtual VectorXs evaluate(const state_vector_t& x, const control_vector_t& u, const SCALAR t) override = 0;
69 
70 #ifdef CPPADCG
71  virtual Eigen::Matrix<ct::core::ADCGScalar, Eigen::Dynamic, 1> evaluateCppadCg(
74  ct::core::ADCGScalar t) override = 0;
75 #endif
76 
77  virtual MatrixXs jacobianState(const state_vector_t& x, const control_vector_t& u, const SCALAR t) override = 0;
78 
79  virtual MatrixXs jacobianInput(const state_vector_t& x, const control_vector_t& u, const SCALAR t) override = 0;
80 
81  virtual size_t getNumNonZerosJacobianState() const override = 0;
82 
83  virtual size_t getNumNonZerosJacobianInput() const override = 0;
84 
86  const control_vector_t& u,
87  const SCALAR t) override = 0;
88 
90  const control_vector_t& u,
91  const SCALAR t) override = 0;
92 
93  virtual void sparsityPatternState(VectorXi& rows, VectorXi& cols) override = 0;
94 
95  virtual void sparsityPatternInput(VectorXi& rows, VectorXi& cols) override = 0;
96 
97 protected:
104  sparsity_matrix_t diagSparsityVecToSparsityMat(const VectorXi& spVec, const size_t& nConstr);
105 
108 
111 
113  size_t constrSize_;
114 
115 private:
116  void sanityCheck(const size_t& nCon, const VectorXs& lb, const VectorXs& ub) const;
117 };
118 
119 } // namespace optcon
120 } // namepace ct
121 
122 /*
123  * For this class, we can include the implementation here, as it is virtual,
124  * and only used by few derived members who all get compiled in prespec themselves.
125  */
126 #include "BoxConstraintBase-impl.h"
virtual VectorXs jacobianInputSparse(const state_vector_t &x, const control_vector_t &u, const SCALAR t) override=0
Returns the constraint jacobian wrt control input in sparse structure. The default implementation map...
virtual ~BoxConstraintBase()
Definition: BoxConstraintBase-impl.h:59
virtual BoxConstraintBase< DERIVED_DIM, STATE_DIM, CONTROL_DIM, SCALAR > * clone() const override=0
Creates a new instance of the object with same properties than original.
ct::core::ControlVector< control_dim > u
Definition: LoadFromFileTest.cpp:21
virtual size_t getNumNonZerosJacobianInput() const override=0
Returns the number of nonzeros in the jacobian wrt control input. The default implementation assumes ...
BoxConstraintBase(const decision_vector_t &vLow, const decision_vector_t &vHigh)
Constructor taking lower and upper state bounds directly. Assumes the box constraint is dense...
Definition: BoxConstraintBase-impl.h:12
Eigen::Matrix< SCALAR, Eigen::Dynamic, Eigen::Dynamic > MatrixXs
Definition: ConstraintBase.h:32
virtual size_t getNumNonZerosJacobianState() const override=0
Returns the number of nonzeros in the jacobian wrt state. The default implementation assumes a dense ...
Eigen::Matrix< SCALAR, Eigen::Dynamic, DERIVED_DIM > sparsity_matrix_t
Definition: BoxConstraintBase.h:36
Eigen::Matrix< SCALAR, Eigen::Dynamic, 1 > VectorXs
Definition: ConstraintBase.h:31
virtual MatrixXs jacobianState(const state_vector_t &x, const control_vector_t &u, const SCALAR t) override=0
Returns the constraint jacobian wrt state.
clear all close all load ct GNMSLog0 mat reformat t
Definition: gnmsPlot.m:6
size_t constrSize_
size of the constraint
Definition: BoxConstraintBase.h:113
virtual void sparsityPatternState(VectorXi &rows, VectorXi &cols) override=0
sparsity_matrix_t sparsity_J_
sparsity matrix
Definition: BoxConstraintBase.h:110
CppAD::AD< CppAD::cg::CG< double > > SCALAR
virtual VectorXs evaluate(const state_vector_t &x, const control_vector_t &u, const SCALAR t) override=0
The evaluation of the constraint violation. Note this method is SCALAR typed.
static void sparsityPatternSparseJacobian(const VectorXi &sparsity_vec, const size_t &constrSize, VectorXi &rows, VectorXi &cols)
generate sparsity pattern for sparse box constraint
Definition: BoxConstraintBase-impl.h:121
ct::core::StateVector< state_dim > x
Definition: LoadFromFileTest.cpp:20
virtual size_t getConstraintSize() const override
The evaluate method used for jit compilation in constraint container ad.
Definition: BoxConstraintBase-impl.h:64
Eigen::Matrix< int, Eigen::Dynamic, 1 > VectorXi
Definition: BoxConstraintBase.h:32
virtual void sparsityPatternInput(VectorXi &rows, VectorXi &cols) override=0
Base for box constraint, templated on dimension of the decision vector of the derived class...
Definition: BoxConstraintBase.h:20
virtual MatrixXs jacobianInput(const state_vector_t &x, const control_vector_t &u, const SCALAR t) override=0
Returns the constraint jacobian wrt input.
virtual VectorXs jacobianStateSparse(const state_vector_t &x, const control_vector_t &u, const SCALAR t) override=0
Returns the constraint jacobian wrt state in sparse structure. The default implementation maps the Ja...
typename ct::core::tpl::TraitSelector< SCALAR >::Trait Trait
Definition: BoxConstraintBase.h:25
VectorXi sparsity_
sparsity in vector form
Definition: BoxConstraintBase.h:107
sparsity_matrix_t diagSparsityVecToSparsityMat(const VectorXi &spVec, const size_t &nConstr)
transform a sparsity vector (giving the sparsity pattern on the diagonal) in to a sparsity matrix ...
Definition: BoxConstraintBase-impl.h:71
Base class for the constraints used in this toolbox.
Definition: ConstraintBase.h:21