41 std::vector<BaseEdge::Ptr> cost_terms, eq_terms, ineq_terms;
45 for (
int k = 0; k < n - 1; ++k)
91 edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
100 FDCollocationEdge::Ptr sys_edge = std::make_shared<FDCollocationEdge>(dynamics, _x_seq[k], _u_seq[block_idx], x_next,
_dt);
101 sys_edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
111 edge->setFiniteDifferencesCollocationMethod(
_fd_eval);
162 #ifdef MESSAGE_SUPPORT 163 void FiniteDifferencesGridMoveBlocking::fromMessage(
const messages::FiniteDifferencesGridMoveBlocking& message, std::stringstream* issues)
165 if (message.n() < 2 && issues) *issues <<
"FiniteDifferencesGridMoveBlocking: Number of states must be greater than or equal 2.\n";
166 if (message.dt() <= 0 && issues) *issues <<
"FiniteDifferencesGridMoveBlocking: Dt must be greater than 0.0.\n";
173 switch (message.cost_integration_rule())
175 case messages::FiniteDifferencesGridMoveBlocking::CostIntegrationRule::FiniteDifferencesGridMoveBlocking_CostIntegrationRule_LeftSum:
180 case messages::FiniteDifferencesGridMoveBlocking::CostIntegrationRule::FiniteDifferencesGridMoveBlocking_CostIntegrationRule_TrapezoidalRule:
187 PRINT_ERROR_NAMED(
"FiniteDifferencesGridMoveBlocking: Selected cost integration rule not implemented");
194 util::get_oneof_field_type(message.fd_collocation(),
"fd_collocation", type,
false);
199 fd_eval->fromMessage(message.fd_collocation(), issues);
204 if (issues) *issues <<
"FiniteDifferencesGridMoveBlocking: unknown finite differences collocation method specified.\n";
209 if (message.b_size() >
getNRef() - 1 && issues)
211 *issues <<
"FiniteDifferencesGridMoveBlocking: Cannot have more blocking indices than controls.\n";
217 void FiniteDifferencesGridMoveBlocking::toMessage(messages::FiniteDifferencesGridMoveBlocking& message)
const 231 message.set_cost_integration_rule(
232 messages::FiniteDifferencesGridMoveBlocking::CostIntegrationRule::FiniteDifferencesGridMoveBlocking_CostIntegrationRule_LeftSum);
237 message.set_cost_integration_rule(messages::FiniteDifferencesGridMoveBlocking::CostIntegrationRule::
238 FiniteDifferencesGridMoveBlocking_CostIntegrationRule_TrapezoidalRule);
243 PRINT_ERROR_NAMED(
"FiniteDifferencesGridMoveBlocking: Selected cost integration rule not implemented");
std::shared_ptr< TrapezoidalIntegralInequalityEdge > Ptr
#define PRINT_ERROR_NAMED(msg)
CostIntegrationRule _cost_integration
void setWarmStartShiftU(bool shift_u)
std::shared_ptr< LeftSumEqualityEdge > Ptr
BaseEdge::Ptr getFinalStateCostEdge(int k, VectorVertex &xf)
A matrix or vector expression mapping an existing array of data.
int getN() const override
FinalStageConstraint::Ptr final_stage_constraints
virtual bool isFixed() const
Check if all components are fixed.
StageCost::Ptr stage_cost
std::shared_ptr< LeftSumCostEdge > Ptr
Vertex implementation for scalar values.
bool isValid() const override
void setFiniteDifferencesCollocationMethod(FiniteDifferencesCollocationInterface::Ptr fd_eval)
PartiallyFixedVectorVertex _xf
std::shared_ptr< FDCollocationEdge > Ptr
std::shared_ptr< TrapezoidalIntegralCostEdge > Ptr
void setCostIntegrationRule(CostIntegrationRule integration)
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)
FiniteDifferencesCollocationInterface::Ptr _fd_eval
std::shared_ptr< LeftSumInequalityEdge > Ptr
void createEdges(NlpFunctions &nlp_fun, OptimizationEdgeSet &edges, SystemDynamicsInterface::Ptr dynamics) override
std::shared_ptr< BaseEdge > Ptr
void addObjectiveEdge(BaseEdge::Ptr edge)
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)
Eigen::VectorXi _blocking_vector
BaseEdge::Ptr getFinalStateConstraintEdge(int k, VectorVertex &xf)
std::vector< VectorVertex > _u_seq
void setWarmStart(bool active)
void addEqualityEdge(BaseEdge::Ptr edge)
Vertex implementation that stores an Eigen::VectorXd (dynamic dimension)
StageInequalityConstraint::Ptr stage_inequalities
std::vector< VectorVertex > _x_seq
std::shared_ptr< TrapezoidalIntegralEqualityDynamicsEdge > Ptr
void addInequalityEdge(BaseEdge::Ptr edge)
std::shared_ptr< FiniteDifferencesCollocationInterface > Ptr
StageEqualityConstraint::Ptr stage_equalities
std::shared_ptr< SystemDynamicsInterface > Ptr