49 std::vector<BaseEdge::Ptr> cost_terms, eq_terms, ineq_terms;
55 std::vector<VectorVertex>& u_seq =
_intervals[i].u_seq;
59 if (u_seq.size() == 1)
82 dynamics,
s, u_seq.front(), s_next,
_dt);
92 int num_controls = (
int)u_seq.size();
98 num_controls + 1, num_controls,
102 edge->setVertex(0, s);
103 edge->setVertex(1, s_next);
105 for (
int i = 0; i < num_controls; ++i)
107 edge->setVertex(vert_idx++, u_seq[i]);
109 edge->setVertex(vert_idx++,
_dt);
119 edge->setVertex(0, s);
120 edge->setVertex(1, s_next);
121 edge->setVertex(2,
_dt);
122 for (
int i = 0; i < num_controls; ++i)
124 edge->setVertex(3 + i, u_seq[i]);
140 for (
int i = 1; i < (
int)u_seq.size(); ++i)
168 k += (
int)u_seq.size();
201 std::vector<BaseEdge::Ptr>& edges)
208 std::make_shared<Edge>(dim, k, stage_fun, uk, stage_fun.isLinearNonIntegralControlTerm(k), stage_fun.isLsqFormNonIntegralControlTerm(k));
209 edges.push_back(edge);
217 std::make_shared<Edge>(dim, k, stage_fun, dt, stage_fun.isLinearNonIntegralDtTerm(k), stage_fun.isLsqFormNonIntegralDtTerm(k));
218 edges.push_back(edge);
225 Edge::Ptr edge = std::make_shared<Edge>(dim, k, stage_fun, uk, u_prev, dt_prev,
false,
false);
226 edges.push_back(edge);
230 #ifdef MESSAGE_SUPPORT 231 void MultipleShootingGrid::fromMessage(
const messages::MultipleShootingGrid& message, std::stringstream* issues)
233 if (message.n() < 2 && issues) *issues <<
"MultipleShootingGrid: Number of states must be greater than or equal 2.\n";
234 if (message.dt() <= 0 && issues) *issues <<
"MultipleShootingGrid: Dt must be greater than 0.0.\n";
244 util::get_oneof_field_type(message.integrator(),
"explicit_integrator", type,
false);
249 integrator->fromMessage(message.integrator(), issues);
254 if (issues) *issues <<
"MultipleShootingGrid: unknown integration method specified.\n";
259 void MultipleShootingGrid::toMessage(messages::MultipleShootingGrid& message)
const void setNumControlsPerShootingInterval(int num_u_per_interv)
std::shared_ptr< MSDynamicsOnlyMultiControlsEdge > Ptr
virtual int getNonIntegralControlTermDimension(int k) const
BaseEdge::Ptr getFinalStateCostEdge(int k, VectorVertex &xf)
FinalStageConstraint::Ptr final_stage_constraints
bool _intermediate_x_constraints
virtual bool isFixed() const
Check if all components are fixed.
StageCost::Ptr stage_cost
virtual int getNonIntegralDtTermDimension(int k) const
Vertex implementation for scalar values.
std::shared_ptr< MultipleShootingEdge > Ptr
NumericalIntegratorExplicitInterface::Ptr _integrator
void addMixedEdge(BaseMixedEdge::Ptr edge)
std::shared_ptr< MSVariableDynamicsOnlyEdge > Ptr
std::shared_ptr< MultipleShootingEdgeSingleControl > Ptr
void getFinalControlDeviationEdges(int n, VectorVertex &u_ref, VectorVertex &u_prev, ScalarVertex &u_prev_dt, std::vector< BaseEdge::Ptr > &cost_edges, std::vector< BaseEdge::Ptr > &eq_edges, std::vector< BaseEdge::Ptr > &ineq_edges)
void createEdges(NlpFunctions &nlp_fun, OptimizationEdgeSet &edges, SystemDynamicsInterface::Ptr dynamics) override
std::shared_ptr< Edge > Ptr
std::vector< ShootingInterval > _intervals
bool hasIntegralTerms(int k) const
int _num_u_per_interv_ref
void setWarmStart(bool active)
int getN() const override
std::shared_ptr< BaseEdge > Ptr
void addObjectiveEdge(BaseEdge::Ptr edge)
virtual int getNonIntegralControlDeviationTermDimension(int k) const
std::shared_ptr< NumericalIntegratorExplicitInterface > Ptr
void clear() override
Clear complete backup container.
void getNonIntegralStageFunctionEdges(int k, VectorVertex &xk, VectorVertex &uk, ScalarVertex &dt, VectorVertex &u_prev, ScalarVertex &u_prev_dt, const StageFunction &stage_fun, std::vector< BaseEdge::Ptr > &edges)
BaseEdge::Ptr getFinalStateConstraintEdge(int k, VectorVertex &xf)
void addEqualityEdge(BaseEdge::Ptr edge)
Templated base edge class that stores an arbitary number of value.
Vertex implementation that stores an Eigen::VectorXd (dynamic dimension)
void getStageFunctionEdgesIntermediateControlDtMultipleShooting(int k, VectorVertex &uk, ScalarVertex &dt, VectorVertex &u_prev, ScalarVertex &dt_prev, const StageFunction &stage_fun, std::vector< BaseEdge::Ptr > &edges)
StageInequalityConstraint::Ptr stage_inequalities
PartiallyFixedVectorVertex _xf
void addInequalityEdge(BaseEdge::Ptr edge)
StageEqualityConstraint::Ptr stage_equalities
std::shared_ptr< SystemDynamicsInterface > Ptr
void setNumericalIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)