Go to the documentation of this file.
25 #ifndef SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_INTERFACE_H_
26 #define SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_INTERFACE_H_
35 class VertexInterface;
36 class VertexSetInterface;
37 class EdgeSetInterface;
59 using Ptr = std::shared_ptr<EdgeInterface>;
60 using UPtr = std::unique_ptr<EdgeInterface>;
91 return values.squaredNorm();
101 virtual const VertexInterface*
getVertex(
int idx)
const = 0;
112 using Ptr = std::shared_ptr<BaseEdge>;
113 using UPtr = std::unique_ptr<BaseEdge>;
137 virtual bool isLinear()
const {
return false; }
184 double weight = 1.0);
222 using Ptr = std::shared_ptr<BaseMixedEdge>;
223 using UPtr = std::unique_ptr<BaseMixedEdge>;
262 return values.squaredNorm();
269 const double* eq_multipliers =
nullptr,
const double* ineq_multipliers =
nullptr);
272 const double* eq_multipliers =
nullptr,
const double* ineq_multipliers =
nullptr);
284 const double* multipliers_ineq =
nullptr,
double weight_obj = 1.0);
288 const double* multipliers_ineq =
nullptr);
300 const double* multipliers_ineq =
nullptr,
double weight_obj = 1.0);
304 const double* multipliers_ineq =
nullptr);
364 #endif // SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_INTERFACE_H_
virtual int verticesDimension() const =0
Return the combined dimension of all attached vertices (excluding fixed vertex components)
std::shared_ptr< EdgeInterface > Ptr
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override=0
Compute function values.
int getEdgeInequalityIdx() const
int getEdgeIdx() const
Retrieve current edge index (warning, this value is determined within the related HyperGraph)
virtual double computeSquaredNormOfValues()
void computeSquaredNormOfValuesCached()
compute the specialied squared-norm method for computing the values (note only the first element in t...
virtual bool isObjectiveLinear() const
Return true if the edge is linear (and hence its Hessian is always zero)
virtual int getInequalityDimension() const =0
int getNumFiniteVerticesUpperBounds() const
EdgeCache & getObjectiveCache()
int getNumFiniteVerticesLowerBounds() const
virtual VertexInterface * getVertexRaw(int idx)=0
Get access to vertex with index idx (0 <= idx < numVertices)
void computeSquaredNormOfObjectiveValuesCached()
compute the specialied squared-norm method for computing the values (note only the first element in t...
virtual void computeHessianInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
Compute edge block Hessian for a given vertex pair.
virtual void computeInequalityHessian(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
void computeValuesCached()
Call computeValues() and store result to previously allocated internal cache (call allocateInteralVal...
virtual int getDimension() const =0
Get dimension of the edge (dimension of the cost-function/constraint value vector)
virtual void computeEqualityHessianInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
virtual bool isInequalityLinear() const
virtual void precompute()=0
void reserveCacheMemory(int num_value_vectors, int num_jacobians)
virtual const VertexInterface * getVertex(int idx) const =0
virtual void computeObjectiveHessianInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
virtual void computeValues(Eigen::Ref< Eigen::VectorXd > values)=0
Compute function values.
virtual void computeEqualityJacobian(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > block_jacobian, const double *multipliers=nullptr)
void reserveValuesCacheMemory(int num_value_vectors)
virtual ~EdgeInterface()
Virtual destructor.
int getDimension() const override
Get dimension of the edge (dimension of the cost-function/constraint value vector)
int getEdgeObjectiveIdx() const
Retrieve current edge index (warning, this value is determined within the related HyperGraph)
virtual void computeJacobians(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > obj_jacobian, Eigen::Ref< Eigen::MatrixXd > eq_jacobian, Eigen::Ref< Eigen::MatrixXd > ineq_jacobian, const double *obj_multipliers=nullptr, const double *eq_multipliers=nullptr, const double *ineq_multipliers=nullptr)
void reserveValuesCacheMemory(int num_obj_values, int num_eq_values, int num_ineq_values)
void computeObjectiveValuesCached()
Call computeObjectiveValues() and store result to the internal cache.
virtual int getNumVertices() const =0
Return number of attached vertices.
void computeValues(Eigen::Ref< Eigen::VectorXd > values) final
Compute function values.
virtual bool isLeastSquaresForm() const
Defines if the edge is formulated as Least-Squares form.
virtual void computeObjectiveHessian(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
virtual void computeInequalityJacobian(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > block_jacobian, const double *multipliers=nullptr)
void computeInequalityValuesCached()
Call computeInequalityValues() and store result to the internal cache.
EdgeCache _equality_cache
int getDimension() const override=0
Get dimension of the edge (dimension of the cost-function/constraint value vector)
virtual void computeInequalityHessianInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
virtual int getEqualityDimension() const =0
virtual bool isObjectiveLeastSquaresForm() const =0
int getEdgeEqualityIdx() const
void reserveMemoryJacobians(int num_jacobians)
virtual void computeHessiansInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &obj_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &eq_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &ineq_jacobian_i, Eigen::Ref< Eigen::MatrixXd > obj_hessian_ij, Eigen::Ref< Eigen::MatrixXd > eq_hessian_ij, Eigen::Ref< Eigen::MatrixXd > ineq_hessian_ij, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, double weight_obj=1.0)
virtual void computeInequalityValues(Eigen::Ref< Eigen::VectorXd > ineq_values)=0
void reserveJacobiansCacheMemory(int num_obj_jacobians, int num_eq_jacobians, int num_ineq_jacobians)
virtual bool isLinear() const
Return true if the edge is linear (and hence its Hessian is always zero)
virtual int getObjectiveDimension() const =0
friend class EdgeSetInterface
std::unique_ptr< EdgeInterface > UPtr
virtual double computeSumOfObjectiveValues()
A matrix or vector expression mapping an existing expression.
virtual bool isEqualityLinear() const
void reserveMemoryValues(int num_value_vectors)
virtual void computeJacobian(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > block_jacobian, const double *multipliers=nullptr)
Compute edge block jacobian for a given vertex.
virtual void computeConstraintHessians(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &eq_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &ineq_jacobian_i, Eigen::Ref< Eigen::MatrixXd > eq_hessian_ij, Eigen::Ref< Eigen::MatrixXd > ineq_hessian_ij, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
EdgeCache & getInequalityCache()
virtual void computeConstraintHessiansInc(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &eq_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &ineq_jacobian_i, Eigen::Ref< Eigen::MatrixXd > eq_hessian_ij, Eigen::Ref< Eigen::MatrixXd > ineq_hessian_ij, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
virtual void computeHessians(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &obj_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &eq_jacobian_i, const Eigen::Ref< const Eigen::MatrixXd > &ineq_jacobian_i, Eigen::Ref< Eigen::MatrixXd > obj_hessian_ij, Eigen::Ref< Eigen::MatrixXd > eq_hessian_ij, Eigen::Ref< Eigen::MatrixXd > ineq_hessian_ij, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, double weight_obj=1.0)
EdgeCache & getEqualityCache()
virtual void computeEqualityValues(Eigen::Ref< Eigen::VectorXd > eq_values)=0
virtual void computeObjectiveValues(Eigen::Ref< Eigen::VectorXd > obj_values)=0
EdgeCache _objective_cache
virtual double computeSumOfValues()
Abstract class representing a set of edges.
virtual void computeEqualityHessian(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
void computeEqualityValuesCached()
Call computeEqualityValues() and store result to the internal cache.
virtual double computeSquaredNormOfObjectiveValues()
Generic interface class for edges.
EdgeCache _inequality_cache
virtual void computeConstraintJacobians(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > eq_jacobian, Eigen::Ref< Eigen::MatrixXd > ineq_jacobian, const double *eq_multipliers=nullptr, const double *ineq_multipliers=nullptr)
void reserveJacobiansCacheMemory(int num_jacobians)
virtual void computeHessian(int vtx_idx_i, int vtx_idx_j, const Eigen::Ref< const Eigen::MatrixXd > &block_jacobian_i, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
EdgeCache & getCache()
Retreive values computed previously via computeValuesCached()
virtual bool providesJacobian() const
Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten)
void reserveCacheMemory(int num_value_vectors, int num_jacobians)
Eigen::VectorXd & pushValues(int value_dim)
virtual void computeObjectiveJacobian(int vtx_idx, Eigen::Ref< Eigen::MatrixXd > block_jacobian, const double *multipliers=nullptr)
virtual bool providesHessian() const
Return true if a custom Hessian is provided (e.g. computeHessian() is overwritten)
control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:45