vertex_set.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_VERTEX_SET_H_
26 #define SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_VERTEX_SET_H_
27 
29 
30 #include <initializer_list>
31 #include <memory>
32 #include <vector>
33 
34 namespace corbo {
35 
46 {
47  public:
48  using Ptr = std::shared_ptr<VertexSetInterface>;
49 
51 
53  virtual ~VertexSetInterface() {}
54 
56 
57  virtual std::vector<VertexInterface*>& getActiveVertices() = 0;
58  virtual void getVertices(std::vector<VertexInterface*>& vertices) = 0;
59 
60  virtual void computeActiveVertices() = 0;
62  void computeVertexIndices();
63  void clearConnectedEdges();
64 
67  void applyIncrementNonFixed(int idx, double increment);
68  double getParameterValue(int idx);
69  void setParameterValue(int idx, double x);
74  double getLowerBound(int idx);
75  double getUpperBound(int idx);
76  void setLowerBound(int idx, double lb);
77  void setUpperBound(int idx, double ub);
79  void restoreBackupParametersActiveVertices(bool keep_backup);
80  void discardBackupParametersActiveVertices(bool all = false);
81 
82  void setModified(bool modified) { _modified = modified; }
83  bool isModified() const { return _modified; }
84 
85  virtual void clear() = 0;
86 
87  protected:
88  void setVertexIdx(VertexInterface& vertex, int idx) { vertex._vertex_idx = idx; }
89 
90  bool _modified = true;
91 };
92 
94 {
95  public:
96  using Ptr = std::shared_ptr<VertexSet>;
97 
98  VertexSet() = default;
99  VertexSet(std::initializer_list<VertexInterface::Ptr> vertices);
100 
101  // implements interface method
102  std::vector<VertexInterface*>& getActiveVertices() override;
103  // implements interface method
104  void getVertices(std::vector<VertexInterface*>& vertices) override;
105  // implements interface method
106  void computeActiveVertices() override;
107 
108  // implements interface method
109  void clear() override;
110 
112  {
113  setModified(true);
114  _vertices.push_back(vertex);
115  }
116 
117  void addVertices(std::initializer_list<VertexInterface::Ptr> vertices)
118  {
119  setModified(true);
120  _vertices.insert(_vertices.end(), vertices.begin(), vertices.end());
121  }
122 
123  const std::vector<VertexInterface::Ptr>& getVertices() { return _vertices; }
124  std::vector<VertexInterface::Ptr>& getVerticesRef()
125  {
126  setModified(true); // Worst case: the user could change the set
127  return _vertices;
128  }
129 
130  private:
131  std::vector<VertexInterface::Ptr> _vertices;
132  std::vector<VertexInterface*> _active_vertices;
133 };
134 
135 } // namespace corbo
136 
137 #endif // SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_HYPER_GRAPH_VERTEX_SET_H_
Scalar * x
void addVertex(VertexInterface::Ptr vertex)
Definition: vertex_set.h:111
Abstract class representing a set of vertices.
Definition: vertex_set.h:45
const std::vector< VertexInterface::Ptr > & getVertices()
Definition: vertex_set.h:123
std::shared_ptr< VertexInterface > Ptr
void setVertexIdx(VertexInterface &vertex, int idx)
Definition: vertex_set.h:88
std::vector< VertexInterface::Ptr > _vertices
Definition: vertex_set.h:131
Generic interface class for vertices.
void setParameterVector(const Eigen::Ref< const Eigen::VectorXd > &x)
Definition: vertex_set.cpp:133
void applyIncrementNonFixed(const Eigen::Ref< const Eigen::VectorXd > &increment)
Active vertices related methods.
Definition: vertex_set.cpp:357
bool isModified() const
Definition: vertex_set.h:83
void computeVertexIndices()
Precompute vertex indices in the hyper-graph (e.g. for the Jacobian or Hessian structure) ...
Definition: vertex_set.cpp:405
virtual void computeActiveVertices()=0
virtual std::vector< VertexInterface * > & getActiveVertices()=0
void setParameterValue(int idx, double x)
Definition: vertex_set.cpp:71
void discardBackupParametersActiveVertices(bool all=false)
Definition: vertex_set.cpp:448
virtual void clear()=0
double getParameterValue(int idx)
Definition: vertex_set.cpp:38
void setModified(bool modified)
Definition: vertex_set.h:82
virtual ~VertexSetInterface()
Virtual destructor.
Definition: vertex_set.h:53
void restoreBackupParametersActiveVertices(bool keep_backup)
Definition: vertex_set.cpp:436
void getParameterVector(Eigen::Ref< Eigen::VectorXd > x)
Definition: vertex_set.cpp:107
int _vertex_idx
vertex index in jacobian or hessian (determined by friend class HyperGraph).
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
double getUpperBound(int idx)
Definition: vertex_set.cpp:252
virtual void getVertices(std::vector< VertexInterface *> &vertices)=0
void setUpperBound(int idx, double ub)
Definition: vertex_set.cpp:321
void setBounds(const Eigen::Ref< const Eigen::VectorXd > &lb, const Eigen::Ref< const Eigen::VectorXd > &ub)
Definition: vertex_set.cpp:189
void setLowerBound(int idx, double lb)
Definition: vertex_set.cpp:285
double getLowerBound(int idx)
Definition: vertex_set.cpp:219
std::shared_ptr< VertexSetInterface > Ptr
Definition: vertex_set.h:48
void addVertices(std::initializer_list< VertexInterface::Ptr > vertices)
Definition: vertex_set.h:117
std::vector< VertexInterface * > _active_vertices
Definition: vertex_set.h:132
std::vector< VertexInterface::Ptr > & getVerticesRef()
Definition: vertex_set.h:124
void getBounds(Eigen::Ref< Eigen::VectorXd > lb, Eigen::Ref< Eigen::VectorXd > ub)
Definition: vertex_set.cpp:159


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