1#ifndef CGMRES__MULTIPLE_SHOOTING_NLP_HPP_
2#define CGMRES__MULTIPLE_SHOOTING_NLP_HPP_
15template <
class OCP,
int N>
18 static constexpr int nx = OCP::nx;
19 static constexpr int nu = OCP::nu;
20 static constexpr int nc = OCP::nc;
22 static constexpr int nub = OCP::nub;
29 static_assert(OCP::nx > 0);
30 static_assert(OCP::nu > 0);
31 static_assert(OCP::nc >= 0);
32 static_assert(OCP::nub >= 0);
40 template <
typename VectorType>
51 for (
size_t i=1;
i<N; ++
i) {
57 template <
typename VectorType>
67 for (
size_t i=1;
i<N; ++
i) {
73 template <
typename VectorType>
83 for (
size_t i=1;
i<N; ++
i) {
89 template <
typename VectorType>
97 ocp_.eval_phix(
t+T, x[N].
data(), dx_.data());
99 for (
size_t i=N-1;
i>=1; --
i) {
101 lmd[
i+1].data(), dx_.data());
106 template <
typename VectorType>
114 ocp_.eval_phix(
t+T, x[N].
data(), dx_.data());
116 for (
size_t i=N-1;
i>=1; --
i) {
118 lmd[
i+1].data(), dx_.data());
180 ubounds::clip_dummy<OCP, N>(
dummy,
min);
Horizon of MPC.
Definition horizon.hpp:18
Scalar T(const Scalar t) const
Gets the length of the horizon.
Definition horizon.hpp:50
Definition multiple_shooting_nlp.hpp:16
MultipleShootingNLP(const OCP &ocp, const Horizon &horizon)
Definition multiple_shooting_nlp.hpp:25
void eval_fonc_f(const Scalar t, const MatrixBase< VectorType > &x0, const Vector< dim > &solution, const std::array< Vector< nx >, N+1 > &x, std::array< Vector< nx >, N+1 > &fonc_f)
Definition multiple_shooting_nlp.hpp:58
static constexpr int nc
Definition multiple_shooting_nlp.hpp:20
void clip_dummy(std::array< Vector< OCP::nub >, N > &dummy, const Scalar min)
Definition multiple_shooting_nlp.hpp:179
void eval_fonc_hdummy(const Vector< dim > &solution, const std::array< Vector< nub >, N > &dummy, const std::array< Vector< nub >, N > &mu, std::array< Vector< nub >, N > &fonc_hdummy) const
Definition multiple_shooting_nlp.hpp:130
static constexpr int dim
Definition multiple_shooting_nlp.hpp:23
void eval_fonc_hu(const Scalar t, const MatrixBase< VectorType > &x0, const Vector< dim > &solution, const std::array< Vector< nx >, N+1 > &x, const std::array< Vector< nx >, N+1 > &lmd, Vector< dim > &fonc_hu)
Definition multiple_shooting_nlp.hpp:41
MultipleShootingNLP()=default
static void multiply_hdummy_inv(const std::array< Vector< nub >, N > &dummy, const std::array< Vector< nub >, N > &mu, const std::array< Vector< nub >, N > &fonc_hdummy, const std::array< Vector< nub >, N > &fonc_hmu, std::array< Vector< nub >, N > &fonc_hdummy_inv)
Definition multiple_shooting_nlp.hpp:144
void retrieve_x(const Scalar t, const MatrixBase< VectorType > &x0, const Vector< dim > &solution, std::array< Vector< nx >, N+1 > &x, const std::array< Vector< nx >, N+1 > &fonc_f)
Definition multiple_shooting_nlp.hpp:74
static constexpr int nub
Definition multiple_shooting_nlp.hpp:22
static constexpr int nuc
Definition multiple_shooting_nlp.hpp:21
~MultipleShootingNLP()=default
void eval_fonc_hx(const Scalar t, const MatrixBase< VectorType > &x0, const Vector< dim > &solution, const std::array< Vector< nx >, N+1 > &x, const std::array< Vector< nx >, N+1 > &lmd, std::array< Vector< nx >, N+1 > &fonc_hx)
Definition multiple_shooting_nlp.hpp:90
void eval_fonc_hmu(const Vector< dim > &solution, const std::array< Vector< nub >, N > &dummy, const std::array< Vector< nub >, N > &mu, std::array< Vector< nub >, N > &fonc_hmu) const
Definition multiple_shooting_nlp.hpp:137
static constexpr int nx
Definition multiple_shooting_nlp.hpp:18
static constexpr int nu
Definition multiple_shooting_nlp.hpp:19
void synchronize_ocp()
Definition multiple_shooting_nlp.hpp:183
const OCP & ocp() const
Definition multiple_shooting_nlp.hpp:185
void retrieve_dummy_update(const Vector< OCP::nuc *N > &solution, const std::array< Vector< OCP::nub >, N > &dummy, const std::array< Vector< OCP::nub >, N > &mu, const Vector< OCP::nuc *N > &solution_update, std::array< Vector< OCP::nub >, N > &dummy_update)
Definition multiple_shooting_nlp.hpp:163
void retrieve_lmd(const Scalar t, const MatrixBase< VectorType > &x0, const Vector< dim > &solution, const std::array< Vector< nx >, N+1 > &x, std::array< Vector< nx >, N+1 > &lmd, const std::array< Vector< nx >, N+1 > &fonc_hx)
Definition multiple_shooting_nlp.hpp:107
static void multiply_hmu_inv(const std::array< Vector< nub >, N > &dummy, const std::array< Vector< nub >, N > &mu, const std::array< Vector< nub >, N > &fonc_hdummy, const std::array< Vector< nub >, N > &fonc_hmu, const std::array< Vector< nub >, N > &fonc_hdummy_inv, std::array< Vector< nub >, N > &fonc_hmu_inv)
Definition multiple_shooting_nlp.hpp:153
const Horizon & horizon() const
Definition multiple_shooting_nlp.hpp:187
void retrieve_mu_update(const Vector< OCP::nuc *N > &solution, const std::array< Vector< OCP::nub >, N > &dummy, const std::array< Vector< OCP::nub >, N > &mu, const Vector< OCP::nuc *N > &solution_update, std::array< Vector< OCP::nub >, N > &mu_update)
Definition multiple_shooting_nlp.hpp:171
void eval_fonc_hu(const Vector< dim > &solution, const std::array< Vector< nub >, N > &dummy, const std::array< Vector< nub >, N > &mu, Vector< dim > &fonc_hu) const
Definition multiple_shooting_nlp.hpp:123
Definition continuation_gmres.hpp:11
Eigen::Map< MatrixType > Map
Alias of Eigen::Map.
Definition types.hpp:54
Eigen::Matrix< Scalar, size, 1 > Vector
Alias of Eigen::Vector.
Definition types.hpp:27
double Scalar
Alias of double.
Definition types.hpp:15