Go to the documentation of this file.
25 #ifndef SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_EDGES_MULTIPLE_SHOOTING_EDGES_H_
26 #define SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_EDGES_MULTIPLE_SHOOTING_EDGES_H_
44 class MSDynamicsOnlyEdge :
public Edge<VectorVertex, VectorVertex, VectorVertex>
47 using Ptr = std::shared_ptr<MSDynamicsOnlyEdge>;
48 using UPtr = std::unique_ptr<MSDynamicsOnlyEdge>;
51 :
Edge<VectorVertex, VectorVertex, VectorVertex>(x1, u1, x2),
_dt(dt),
_dynamics(dynamics)
65 bool isLinear()
const override {
return false; }
89 const VectorVertex*
_x1 =
nullptr;
90 const VectorVertex*
_u1 =
nullptr;
100 using Ptr = std::shared_ptr<MSVariableDynamicsOnlyEdge>;
101 using UPtr = std::unique_ptr<MSVariableDynamicsOnlyEdge>;
154 using Ptr = std::shared_ptr<MultipleShootingEdgeSingleControl>;
155 using UPtr = std::unique_ptr<MultipleShootingEdgeSingleControl>;
272 assert(idx == result.size());
277 const VectorVertex*
_xkvert =
nullptr;
278 const VectorVertex*
_ukvert =
nullptr;
279 const ScalarVertex*
_dtvert =
nullptr;
308 using Ptr = std::shared_ptr<MultipleShootingEdgeSingleControlTimeScaling>;
309 using UPtr = std::unique_ptr<MultipleShootingEdgeSingleControlTimeScaling>;
431 assert(idx == result.size());
436 const VectorVertex*
_xkvert =
nullptr;
437 const VectorVertex*
_ukvert =
nullptr;
480 using Ptr = std::shared_ptr<MultipleShootingEdge>;
481 using UPtr = std::unique_ptr<MultipleShootingEdge>;
485 bool eval_intermediate_constr)
486 :
MixedEdge<>(2 + nc_interval + nt_interval),
650 const VectorVertex* x_next =
static_cast<const VectorVertex*
>(
_vertices[1]);
651 assert(x_next->values().size() ==
_dyn_dim);
715 const VectorVertex* x1 =
static_cast<const VectorVertex*
>(
_vertices[0]);
716 _dim_lb_x = x1->getNumberFiniteLowerBounds(
false);
761 assert(idx == result.size());
767 VectorVertex*
_ukvert =
nullptr;
768 ScalarVertex*
_dtvert =
nullptr;
822 using Ptr = std::shared_ptr<MSDynamicsOnlyMultiControlsEdge>;
823 using UPtr = std::unique_ptr<MSDynamicsOnlyMultiControlsEdge>;
890 using Ptr = std::shared_ptr<MSDynamicsOnlyMultiControlsMultiDtsEdge>;
891 using UPtr = std::unique_ptr<MSDynamicsOnlyMultiControlsMultiDtsEdge>;
901 _f.resize(dynamics->getStateDimension());
931 for (
int i = 4; i < (
int)
_vertices.size() - 2; i = i + 2)
951 const VectorVertex*
_x1 =
nullptr;
952 const VectorVertex*
_x2 =
nullptr;
960 #endif // SRC_OPTIMAL_CONTROL_INCLUDE_CORBO_OPTIMAL_CONTROL_STRUCTURED_OCP_EDGES_MULTIPLE_SHOOTING_EDGES_H_
std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> _integrand
StageInequalityConstraint::ConstPtr _stage_ineq
Eigen::VectorXd _nonint_ineq_values
MultipleShootingEdgeSingleControl(SystemDynamicsInterface::Ptr dynamics, StageCost::ConstPtr stage_cost, StageEqualityConstraint::ConstPtr stage_eq, StageInequalityConstraint::ConstPtr stage_ineq, int k, VectorVertex &x_k, VectorVertex &u_k, ScalarVertex &dt_k, VectorVertex &x_kp1)
MSVariableDynamicsOnlyEdge(SystemDynamicsInterface::Ptr dynamics, VectorVertex &x1, VectorVertex &u1, VectorVertex &x2, ScalarVertex &dt)
void computeEqualityValues(Eigen::Ref< Eigen::VectorXd > eq_values) override
bool isObjectiveLeastSquaresForm() const override
int getDimension() const override
Return number of elements/values/components stored in this vertex.
StageInequalityConstraint::ConstPtr _stage_ineq
const VectorVertex * _xnextvert
Eigen::VectorXd _nonint_obj_values
int getEqualityDimension() const override
void computeEqualityValues(Eigen::Ref< Eigen::VectorXd > eq_values) override
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override
Compute function values.
bool isInequalityLinear() const override
std::shared_ptr< NumericalIntegratorExplicitInterface > Ptr
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override
Compute function values.
const Eigen::VectorXd & upperBound() const
Read-access to the underlying upper bound vector.
void computeInequalityValues(Eigen::Ref< Eigen::VectorXd > ineq_values) override
void configureIntegrand()
NumericalIntegratorExplicitInterface::Ptr _integrator
bool isInequalityLinear() const override
void computeInequalityValues(Eigen::Ref< Eigen::VectorXd > ineq_values) override
bool isEqualityLinear() const override
bool hasFiniteUpperBound(int idx) const override
Check if finite upper bound for a single component is provided.
SystemDynamicsInterface::Ptr _dynamics
void setVertex(int idx, VertexInterface &vertex)
StageEqualityConstraint::ConstPtr _stage_eq
int getEqualityDimension() const override
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override
Compute function values.
std::unique_ptr< MSDynamicsOnlyEdge > UPtr
std::shared_ptr< MSVariableDynamicsOnlyEdge > Ptr
bool hasFiniteLowerBound(int idx) const override
Check if finite lower bound for a single component is provided.
SystemDynamicsInterface::Ptr _dynamics
VertexContainer _vertices
Vertex container.
int getDimension() const override
Get dimension of the edge (dimension of the cost-function/constraint value vector)
const VectorVertex * _ukvert
bool isLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
const VertexContainer _vertices
Vertex container.
const VectorVertex * _xkvert
bool isEqualityLinear() const override
SystemDynamicsInterface::Ptr _dynamics
const ScalarVertex * _timevert
bool isLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
const Eigen::VectorXd & values() const
Read-access to the underlying value vector.
void configureIntegrand()
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override
Compute function values.
std::shared_ptr< const StageInequalityConstraint > ConstPtr
MultipleShootingEdgeSingleControlTimeScaling(SystemDynamicsInterface::Ptr dynamics, StageCost::ConstPtr stage_cost, StageEqualityConstraint::ConstPtr stage_eq, StageInequalityConstraint::ConstPtr stage_ineq, int k, VectorVertex &x_k, VectorVertex &u_k, ScalarVertex &time, VectorVertex &x_kp1, double dt)
std::unique_ptr< MultipleShootingEdgeSingleControlTimeScaling > UPtr
MSDynamicsOnlyEdge(SystemDynamicsInterface::Ptr dynamics, VectorVertex &x1, VectorVertex &u1, VectorVertex &x2, double dt)
const ScalarVertex * _dtvert
const VectorVertex * _shooting_node
MSDynamicsOnlyMultiControlsEdge(SystemDynamicsInterface::Ptr dynamics, int num_controls)
bool isLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> _integrand
int getInequalityDimension() const override
MultipleShootingEdge(SystemDynamicsInterface::Ptr dynamics, StageCost::ConstPtr stage_cost, StageEqualityConstraint::ConstPtr stage_eq, StageInequalityConstraint::ConstPtr stage_ineq, int k, int n_interval, int nc_interval, int nt_interval, bool eval_intermediate_constr)
StageCost::ConstPtr _stage_cost
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
int getDimension() const override
Get dimension of the edge (dimension of the cost-function/constraint value vector)
Eigen::VectorXd _lb_ineq_values
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
void precompute() override
void computeObjectiveValues(Eigen::Ref< Eigen::VectorXd > obj_values) override
bool isLeastSquaresForm() const override
Defines if the edge is formulated as Least-Squares form.
void precompute() override
void activateIntermediateStateCostAndConstraints()
bool isObjectiveLeastSquaresForm() const override
int getInequalityDimension() const override
std::shared_ptr< MultipleShootingEdge > Ptr
bool isLeastSquaresForm() const override
Defines if the edge is formulated as Least-Squares form.
void computeObjectiveValues(Eigen::Ref< Eigen::VectorXd > obj_values) override
SystemDynamicsInterface::Ptr _dynamics
std::unique_ptr< MultipleShootingEdgeSingleControl > UPtr
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Eigen::VectorXd _ub_ineq_values
const VectorVertex * _ukvert
std::shared_ptr< SystemDynamicsInterface > Ptr
NumericalIntegratorExplicitInterface::Ptr _integrator
NumericalIntegratorExplicitInterface::Ptr _integrator
std::shared_ptr< MultipleShootingEdgeSingleControl > Ptr
bool isObjectiveLeastSquaresForm() const override
StageCost::ConstPtr _stage_cost
StageCost::ConstPtr _stage_cost
const VectorVertex * _xkvert
const VectorVertex * _xnextvert
NumericalIntegratorExplicitInterface::Ptr _integrator
std::shared_ptr< MultipleShootingEdgeSingleControlTimeScaling > Ptr
std::shared_ptr< MSDynamicsOnlyMultiControlsMultiDtsEdge > Ptr
std::unique_ptr< MSDynamicsOnlyMultiControlsMultiDtsEdge > UPtr
std::unique_ptr< MSVariableDynamicsOnlyEdge > UPtr
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
NumericalIntegratorExplicitInterface::Ptr _integrator
Eigen::VectorXd _nonint_eq_values
A matrix or vector expression mapping an existing expression.
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
const double & value() const
Get underlying value.
void precompute() override
SystemDynamicsInterface::Ptr _dynamics
VertexContainer _vertices
Vertex container.
EIGEN_DEVICE_FUNC SegmentReturnType tail(Index n)
This is the const version of tail(Index).
int getDimension() const override
Get dimension of the edge (dimension of the cost-function/constraint value vector)
StageEqualityConstraint::ConstPtr _stage_eq
int getObjectiveDimension() const override
void computeInequalityValues(Eigen::Ref< Eigen::VectorXd > ineq_values) override
std::shared_ptr< MSDynamicsOnlyEdge > Ptr
StageEqualityConstraint::ConstPtr _stage_eq
MSDynamicsOnlyMultiControlsMultiDtsEdge(SystemDynamicsInterface::Ptr dynamics, VectorVertex &x1, VectorVertex &x2, int num_controls)
bool isObjectiveLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
SystemDynamicsInterface::Ptr _dynamics
NumericalIntegratorExplicitInterface::Ptr _integrator
bool _eval_intermediate_constr
StageInequalityConstraint::ConstPtr _stage_ineq
int getEqualityDimension() const override
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
Vertex implementation for scalar values.
bool isEqualityLinear() const override
bool isLeastSquaresForm() const override
Defines if the edge is formulated as Least-Squares form.
void computeObjectiveValues(Eigen::Ref< Eigen::VectorXd > obj_values) override
bool isLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
int getDimension() const override
Get dimension of the edge (dimension of the cost-function/constraint value vector)
const Eigen::VectorXd & lowerBound() const
Read-access to the underlying lower bound vector.
Templated base edge class that stores an arbitary number of value.
std::shared_ptr< const StageEqualityConstraint > ConstPtr
int getObjectiveDimension() const override
std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> _integrand
void configureIntegrand()
SystemDynamicsInterface::Ptr _dynamics
Vertex implementation that stores an Eigen::VectorXd (dynamic dimension)
int getInequalityDimension() const override
std::shared_ptr< const StageCost > ConstPtr
void setIntegrator(NumericalIntegratorExplicitInterface::Ptr integrator)
bool isInequalityLinear() const override
bool isLeastSquaresForm() const override
Defines if the edge is formulated as Least-Squares form.
int getObjectiveDimension() const override
NumericalIntegratorExplicitInterface::Ptr _integrator
bool isObjectiveLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
bool isObjectiveLinear() const override
Return true if the edge is linear (and hence its Hessian is always zero)
std::unique_ptr< MultipleShootingEdge > UPtr
int _num_intermediate_states
void computeEqualityValues(Eigen::Ref< Eigen::VectorXd > eq_values) override
const VertexContainer _vertices
Vertex container.
control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:58