25 #ifndef SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_H_ 26 #define SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_H_ 147 template <
class... Vertices>
151 using Ptr = std::shared_ptr<Edge>;
153 using UPtr = std::unique_ptr<Edge>;
170 template <
class... VerticesT>
174 static_assert(util::variadic_temp_equal<std::tuple<Vertices...>, std::tuple<VerticesT...>>::value,
175 "Edge(): Number and types of vertices passed via the constructor does not match number of class template parameters");
224 using Ptr = std::shared_ptr<Edge>;
226 using UPtr = std::unique_ptr<Edge>;
234 explicit Edge(
int num_vertices) { resizeVertexContainer(num_vertices); }
287 template <
class... Vertices>
291 using Ptr = std::shared_ptr<MixedEdge>;
293 using UPtr = std::unique_ptr<MixedEdge>;
310 template <
class... VerticesT>
314 static_assert(util::variadic_temp_equal<std::tuple<Vertices...>, std::tuple<VerticesT...>>::value,
315 "MixedEdge(): Number and types of vertices passed via the constructor does not match number of class template parameters");
319 int getObjectiveDimension()
const override = 0;
321 int getEqualityDimension()
const override = 0;
323 int getInequalityDimension()
const override = 0;
341 void precompute()
override = 0;
371 using Ptr = std::shared_ptr<MixedEdge>;
373 using UPtr = std::unique_ptr<MixedEdge>;
393 int getObjectiveDimension()
const override = 0;
395 int getEqualityDimension()
const override = 0;
397 int getInequalityDimension()
const override = 0;
415 void precompute()
override = 0;
443 #endif // SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_EDGE_H_
std::unique_ptr< EdgeInterface > UPtr
const VertexContainer _vertices
Vertex container.
std::vector< VertexInterface * > VertexContainer
Typedef to represent the vertex container.
bool providesJacobian() const override
Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten) ...
int getNumVertices() const override
Return number of attached vertices.
int getNumVertices() const override
Return number of attached vertices.
VertexContainer _vertices
Vertex container.
std::shared_ptr< MixedEdge > Ptr
const VertexInterface * getVertex(int idx) const override
Generic interface class for vertices.
std::shared_ptr< const Edge > ConstPtr
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW
std::shared_ptr< EdgeInterface > Ptr
int getNumVertices() const override
Return number of attached vertices.
void resizeVertexContainer(int n)
Set number n of vertices attached to this edge.
void setVertex(int idx, VertexInterface &vertex)
void resizeVertexContainer(int n)
Set number n of vertices attached to this edge.
int verticesDimension() const override
Return the combined dimension of all attached vertices (excluding fixed vertex components) ...
MixedEdge(VerticesT &... args)
Construct edge by providing connected vertices.
static constexpr const int numVerticesCompileTime
Return number of vertices at compile-time.
VertexInterface * getVertexRaw(int idx) override
Get access to vertex with index idx (0 <= idx < numVertices)
Edge(VerticesT &... args)
Construct edge by providing connected vertices.
std::array< VertexInterface *, numVerticesCompileTime > VertexContainer
Typedef to represent the vertex container.
std::shared_ptr< const MixedEdge > ConstPtr
MixedEdge(int num_vertices)
VertexInterface * getVertexRaw(int idx) override
Get access to vertex with index idx (0 <= idx < numVertices)
const VertexInterface * getVertex(int idx) const override
bool isLinear() const override=0
Return true if the edge is linear (and hence its Hessian is always zero)
int verticesDimension() const override
Return the combined dimension of all attached vertices (excluding fixed vertex components) ...
int getNumVertices() const override
Return number of attached vertices.
void computeValues(Eigen::Ref< Eigen::VectorXd > values) override=0
Compute function values.
const VertexInterface * getVertex(int idx) const override
A matrix or vector expression mapping an existing expression.
std::shared_ptr< const MixedEdge > ConstPtr
const VertexInterface * getVertex(int idx) const override
std::vector< VertexInterface * > VertexContainer
Typedef to represent the vertex container.
std::shared_ptr< Edge > Ptr
int getDimension() const override=0
Get dimension of the edge (dimension of the cost-function/constraint value vector) ...
VertexInterface * getVertexRaw(int idx) override
Get access to vertex with index idx (0 <= idx < numVertices)
Templated base edge class that stores an arbitary number of value.
std::unique_ptr< MixedEdge > UPtr
std::unique_ptr< Edge > UPtr
const VertexContainer _vertices
Vertex container.
void setVertex(int idx, VertexInterface &vertex)
VertexContainer _vertices
Vertex container.
int verticesDimension() const override
Return the combined dimension of all attached vertices (excluding fixed vertex components) ...
VertexInterface * getVertexRaw(int idx) override
Get access to vertex with index idx (0 <= idx < numVertices)
std::shared_ptr< const Edge > ConstPtr
int verticesDimension() const override
Return the combined dimension of all attached vertices (excluding fixed vertex components) ...
bool providesJacobian() const override
Return true if a custom Jacobian is provided (e.g. computeJacobian() is overwritten) ...