Public Types | Public Member Functions | Private Attributes | List of all members
corbo::BinaryVectorVertexEdge< T, ComputeMethod > Class Template Reference

#include <generic_edge.h>

Inheritance diagram for corbo::BinaryVectorVertexEdge< T, ComputeMethod >:
Inheritance graph
[legend]

Public Types

using Ptr = std::shared_ptr< BinaryVectorVertexEdge >
 
- Public Types inherited from corbo::Edge< VectorVertex, VectorVertex >
using ConstPtr = std::shared_ptr< const Edge >
 
using Ptr = std::shared_ptr< Edge >
 
using UPtr = std::unique_ptr< Edge >
 
using VertexContainer = std::array< VertexInterface *, numVerticesCompileTime >
 Typedef to represent the vertex container. More...
 
- Public Types inherited from corbo::BaseEdge
using Ptr = std::shared_ptr< BaseEdge >
 
using UPtr = std::unique_ptr< BaseEdge >
 
- Public Types inherited from corbo::EdgeInterface
using Ptr = std::shared_ptr< EdgeInterface >
 
using UPtr = std::unique_ptr< EdgeInterface >
 

Public Member Functions

 BinaryVectorVertexEdge (int dim, int k, const T &fun_obj, VectorVertex &vertex1, VectorVertex &vertex2, bool is_linear, bool is_lsq)
 
void computeValues (Eigen::Ref< Eigen::VectorXd > values) override
 Compute function values. More...
 
int getDimension () const override
 Get dimension of the edge (dimension of the cost-function/constraint value vector) More...
 
bool isLeastSquaresForm () const override
 Defines if the edge is formulated as Least-Squares form. More...
 
bool isLinear () const override
 Return true if the edge is linear (and hence its Hessian is always zero) More...
 
bool providesJacobian () const override
 Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten) More...
 
- Public Member Functions inherited from corbo::Edge< VectorVertex, VectorVertex >
 Edge ()=delete
 
 Edge (VerticesT &... args)
 Construct edge by providing connected vertices. More...
 
int getNumVertices () const override
 Return number of attached vertices. More...
 
const VertexInterfacegetVertex (int idx) const override
 
VertexInterfacegetVertexRaw (int idx) override
 Get access to vertex with index idx (0 <= idx < numVertices) More...
 
bool providesJacobian () const override
 Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten) More...
 
int verticesDimension () const override
 Return the combined dimension of all attached vertices (excluding fixed vertex components) More...
 
- Public Member Functions inherited from corbo::BaseEdge
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)
 
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. More...
 
virtual void computeHessianInc (int vtx_idx_i, int vtx_idx_j, Eigen::Ref< Eigen::MatrixXd > block_hessian_ij, const double *multipliers=nullptr, double weight=1.0)
 
virtual void computeJacobian (int vtx_idx, Eigen::Ref< Eigen::MatrixXd > block_jacobian, const double *multipliers=nullptr)
 Compute edge block jacobian for a given vertex. More...
 
int getEdgeIdx () const
 Retrieve current edge index (warning, this value is determined within the related HyperGraph) More...
 
virtual bool providesHessian () const
 Return true if a custom Hessian is provided (e.g. computeHessian() is overwritten) More...
 
void reserveCacheMemory (int num_value_vectors, int num_jacobians)
 
void reserveValuesCacheMemory (int num_value_vectors)
 
void reserveJacobiansCacheMemory (int num_jacobians)
 
void computeValuesCached ()
 Call computeValues() and store result to previously allocated internal cache (call allocateInteralValuesCache() first once) More...
 
void computeSquaredNormOfValuesCached ()
 compute the specialied squared-norm method for computing the values (note only the first element in the values cache is used) More...
 
EdgeCachegetCache ()
 Retreive values computed previously via computeValuesCached() More...
 
const EdgeCachegetCache () const
 
- Public Member Functions inherited from corbo::EdgeInterface
virtual double computeSquaredNormOfValues ()
 
virtual double computeSumOfValues ()
 
int getNumFiniteVerticesLowerBounds () const
 
int getNumFiniteVerticesUpperBounds () const
 
virtual ~EdgeInterface ()
 Virtual destructor. More...
 

Private Attributes

int _dimension = 0
 
const T & _fun_obj
 
bool _is_linear = false
 
bool _is_lsq = false
 
int _k = 0
 

Additional Inherited Members

- Static Public Attributes inherited from corbo::Edge< VectorVertex, VectorVertex >
static constexpr const int numVerticesCompileTime
 Return number of vertices at compile-time. More...
 
- Protected Attributes inherited from corbo::Edge< VectorVertex, VectorVertex >
const VertexContainer _vertices
 Vertex container. More...
 
- Protected Attributes inherited from corbo::BaseEdge
EdgeCache _cache
 
int _edge_idx = 0
 

Detailed Description

template<typename T, void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
class corbo::BinaryVectorVertexEdge< T, ComputeMethod >

Definition at line 372 of file generic_edge.h.

Member Typedef Documentation

◆ Ptr

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
using corbo::BinaryVectorVertexEdge< T, ComputeMethod >::Ptr = std::shared_ptr<BinaryVectorVertexEdge>

Definition at line 375 of file generic_edge.h.

Constructor & Destructor Documentation

◆ BinaryVectorVertexEdge()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
corbo::BinaryVectorVertexEdge< T, ComputeMethod >::BinaryVectorVertexEdge ( int  dim,
int  k,
const T &  fun_obj,
VectorVertex vertex1,
VectorVertex vertex2,
bool  is_linear,
bool  is_lsq 
)
inlineexplicit

Definition at line 377 of file generic_edge.h.

Member Function Documentation

◆ computeValues()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
void corbo::BinaryVectorVertexEdge< T, ComputeMethod >::computeValues ( Eigen::Ref< Eigen::VectorXd >  values)
inlineoverridevirtual

Compute function values.

Here, the actual cost/constraint function values are computed:

  • objective in non-least-squares form: e(x) (hereby, the actual cost is f(x) = e(x)^T e(x))
  • objective in least-squares form: f(x)
  • equality constraints: ceq(x) (in case constraints are satisfied: ceq(x) = 0)
  • inequality constraints: c(x) (in case constraints are satisfied: c(x) < 0)
    Parameters
    [in]valuesvalues should be stored here according to getDimension().

Implements corbo::Edge< VectorVertex, VectorVertex >.

Definition at line 394 of file generic_edge.h.

◆ getDimension()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
int corbo::BinaryVectorVertexEdge< T, ComputeMethod >::getDimension ( ) const
inlineoverridevirtual

Get dimension of the edge (dimension of the cost-function/constraint value vector)

Implements corbo::Edge< VectorVertex, VectorVertex >.

Definition at line 382 of file generic_edge.h.

◆ isLeastSquaresForm()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
bool corbo::BinaryVectorVertexEdge< T, ComputeMethod >::isLeastSquaresForm ( ) const
inlineoverridevirtual

Defines if the edge is formulated as Least-Squares form.

Least-squares cost terms are defined as $ f(x) = e(x)^T e(x) $ and the function values and Jacobian are computed for $ e(x) $ rather than for $ f(x) $. Specialiezed least-squares solvers require the optimization problem to be defined in this particular form. Other solvers can automatically compute the square of least-squares edges if required. However, the other way round is more restrictive: general solvers might not cope with non-least-squares forms.

Note, in the LS-form case computeValues() computes e(x) and otherwise f(x).

Returns
true if the edge is given in LS-form

Reimplemented from corbo::BaseEdge.

Definition at line 388 of file generic_edge.h.

◆ isLinear()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
bool corbo::BinaryVectorVertexEdge< T, ComputeMethod >::isLinear ( ) const
inlineoverridevirtual

Return true if the edge is linear (and hence its Hessian is always zero)

Implements corbo::Edge< VectorVertex, VectorVertex >.

Definition at line 385 of file generic_edge.h.

◆ providesJacobian()

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
bool corbo::BinaryVectorVertexEdge< T, ComputeMethod >::providesJacobian ( ) const
inlineoverridevirtual

Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten)

Reimplemented from corbo::BaseEdge.

Definition at line 391 of file generic_edge.h.

Member Data Documentation

◆ _dimension

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
int corbo::BinaryVectorVertexEdge< T, ComputeMethod >::_dimension = 0
private

Definition at line 402 of file generic_edge.h.

◆ _fun_obj

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
const T& corbo::BinaryVectorVertexEdge< T, ComputeMethod >::_fun_obj
private

Definition at line 407 of file generic_edge.h.

◆ _is_linear

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
bool corbo::BinaryVectorVertexEdge< T, ComputeMethod >::_is_linear = false
private

Definition at line 404 of file generic_edge.h.

◆ _is_lsq

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
bool corbo::BinaryVectorVertexEdge< T, ComputeMethod >::_is_lsq = false
private

Definition at line 405 of file generic_edge.h.

◆ _k

template<typename T , void(T::*)(int, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, Eigen::Ref< Eigen::VectorXd >) const ComputeMethod>
int corbo::BinaryVectorVertexEdge< T, ComputeMethod >::_k = 0
private

Definition at line 403 of file generic_edge.h.


The documentation for this class was generated from the following file:


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:08:02