10rollout(
const std::vector<shared_ptr<DynamicsModelTpl<Scalar>>> &dyn_models,
11 const typename math_types<Scalar>::VectorXs &x0,
12 const typename math_types<Scalar>::VectorOfVectors &us,
13 typename math_types<Scalar>::VectorOfVectors &xout) {
14 using Data = DynamicsDataTpl<Scalar>;
15 const std::size_t N = us.size();
16 if (dyn_models.size() != N) {
18 "Number of controls should be the same as number of dynamical models!");
23 for (std::size_t i = 0; i < N; i++) {
24 shared_ptr<Data> data = dyn_models[i]->createData();
25 const ManifoldAbstractTpl<Scalar> &space = dyn_models[i]->space();
26 xout.push_back(space.neutral());
36rollout(
const DynamicsModelTpl<Scalar> &dyn_model,
37 const typename math_types<Scalar>::VectorXs &x0,
38 const typename math_types<Scalar>::VectorOfVectors &us) {
39 using VectorXs =
typename math_types<Scalar>::VectorXs;
41 const std::size_t N = us.size();
42 std::vector<VectorXs> xs{x0};
44 shared_ptr<DynamicsDataTpl<Scalar>> data = dyn_model.createData();
46 for (std::size_t i = 0; i < N; i++) {
47 const ManifoldAbstractTpl<Scalar> &space = dyn_model.space();
48 xs.push_back(space.neutral());
58 const std::vector<shared_ptr<ExplicitDynamicsModelTpl<Scalar>>> &dyn_models,
59 const typename math_types<Scalar>::VectorXs &x0,
60 const typename math_types<Scalar>::VectorOfVectors &us,
61 typename math_types<Scalar>::VectorOfVectors &xout) {
62 using DataType = ExplicitDynamicsDataTpl<Scalar>;
63 const std::size_t N = us.size();
66 if (dyn_models.size() != N) {
68 fmt::format(
"Number of controls ({}) should be the same as number of "
69 "dynamical models ({})!",
70 N, dyn_models.size()));
73 for (std::size_t i = 0; i < N; i++) {
74 shared_ptr<DataType> data =
75 std::static_pointer_cast<DataType>(dyn_models[i]->createData());
76 dyn_models[i]->forward(xout[i], us[i], *data);
77 xout[i + 1] = data->xnext_;
83void rollout(
const ExplicitDynamicsModelTpl<Scalar> &dyn_model,
84 const typename math_types<Scalar>::VectorXs &x0,
85 const typename math_types<Scalar>::VectorOfVectors &us,
86 typename math_types<Scalar>::VectorOfVectors &xout) {
87 using DataType = ExplicitDynamicsDataTpl<Scalar>;
88 const std::size_t N = us.size();
92 shared_ptr<DataType> data =
93 std::static_pointer_cast<DataType>(dyn_model.createData());
94 for (std::size_t i = 0; i < N; i++) {
95 dyn_model.forward(xout[i], us[i], *data);
96 xout[i + 1] = data->xnext_;
115rollout(
const std::vector<shared_ptr<C<Scalar>>> &dms,
116 const typename math_types<Scalar>::VectorXs &x0,
117 const typename math_types<Scalar>::VectorOfVectors &us) {
118 const std::size_t N = us.size();
119 typename math_types<Scalar>::VectorOfVectors xout;
math_types< Scalar >::VectorOfVectors rollout(const std::vector< shared_ptr< DynamicsModelTpl< Scalar > > > &dyn_models, const typename math_types< Scalar >::VectorXs &x0, const typename math_types< Scalar >::VectorOfVectors &us, typename math_types< Scalar >::VectorOfVectors &xout)
Perform a rollout of the supplied dynamical models.
static void run(const DynamicsModelTpl< T > &model, const ConstVectorRef &x, const ConstVectorRef &u, DynamicsDataTpl< T > &data, VectorRef xout, const std::optional< ConstVectorRef > &gap=std::nullopt, const uint max_iters=1000, const T EPS=1e-6)