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 
45 class VertexSetInterface
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 
93 class VertexSet : public VertexSetInterface
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 
111  void addVertex(VertexInterface::Ptr vertex)
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_
corbo::VertexSetInterface::getLowerBound
double getLowerBound(int idx)
Definition: vertex_set.cpp:241
corbo::VertexSet::getActiveVertices
std::vector< VertexInterface * > & getActiveVertices() override
Definition: vertex_set.cpp:490
corbo::VertexSet::clear
void clear() override
Definition: vertex_set.cpp:515
corbo::VertexSet::addVertices
void addVertices(std::initializer_list< VertexInterface::Ptr > vertices)
Definition: vertex_set.h:139
corbo::VertexSetInterface::setBounds
void setBounds(const Eigen::Ref< const Eigen::VectorXd > &lb, const Eigen::Ref< const Eigen::VectorXd > &ub)
Definition: vertex_set.cpp:211
corbo::VertexSet::_vertices
std::vector< VertexInterface::Ptr > _vertices
Definition: vertex_set.h:153
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::VertexSetInterface::setLowerBound
void setLowerBound(int idx, double lb)
Definition: vertex_set.cpp:307
corbo::VertexSetInterface::Ptr
std::shared_ptr< VertexSetInterface > Ptr
Definition: vertex_set.h:92
corbo::VertexSetInterface::~VertexSetInterface
virtual ~VertexSetInterface()
Virtual destructor.
Definition: vertex_set.h:97
corbo::VertexSetInterface::restoreBackupParametersActiveVertices
void restoreBackupParametersActiveVertices(bool keep_backup)
Definition: vertex_set.cpp:458
corbo::VertexSetInterface::computeActiveVertices
virtual void computeActiveVertices()=0
corbo::VertexSetInterface::discardBackupParametersActiveVertices
void discardBackupParametersActiveVertices(bool all=false)
Definition: vertex_set.cpp:470
corbo::VertexSet::addVertex
void addVertex(VertexInterface::Ptr vertex)
Definition: vertex_set.h:133
corbo::VertexSetInterface::getParameterVector
void getParameterVector(Eigen::Ref< Eigen::VectorXd > x)
Definition: vertex_set.cpp:129
corbo::VertexSet::_active_vertices
std::vector< VertexInterface * > _active_vertices
Definition: vertex_set.h:154
corbo::VertexSetInterface::setUpperBound
void setUpperBound(int idx, double ub)
Definition: vertex_set.cpp:343
corbo::VertexSet::computeActiveVertices
void computeActiveVertices() override
Definition: vertex_set.cpp:504
corbo::VertexInterface::Ptr
std::shared_ptr< VertexInterface > Ptr
Definition: vertex_interface.h:80
corbo::VertexSetInterface::VertexSetInterface
VertexSetInterface()
Definition: vertex_set.h:94
corbo::VertexSetInterface::_modified
bool _modified
Definition: vertex_set.h:134
corbo::VertexSetInterface::getActiveVertices
virtual std::vector< VertexInterface * > & getActiveVertices()=0
x
Scalar * x
Definition: level1_cplx_impl.h:89
corbo::VertexSetInterface::computeVertexIndices
void computeVertexIndices()
Precompute vertex indices in the hyper-graph (e.g. for the Jacobian or Hessian structure)
Definition: vertex_set.cpp:427
corbo::VertexSet::getVerticesRef
std::vector< VertexInterface::Ptr > & getVerticesRef()
Definition: vertex_set.h:146
corbo::VertexSet
Definition: vertex_set.h:115
corbo::VertexSetInterface::setParameterVector
void setParameterVector(const Eigen::Ref< const Eigen::VectorXd > &x)
Definition: vertex_set.cpp:155
corbo::VertexSetInterface::setParameterValue
void setParameterValue(int idx, double x)
Definition: vertex_set.cpp:93
corbo::VertexSetInterface::setVertexIdx
void setVertexIdx(VertexInterface &vertex, int idx)
Definition: vertex_set.h:132
corbo::VertexSetInterface::clearConnectedEdges
void clearConnectedEdges()
Definition: vertex_set.cpp:442
corbo::VertexSetInterface::getVertices
virtual void getVertices(std::vector< VertexInterface * > &vertices)=0
Eigen::Ref
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
corbo::VertexSetInterface::isModified
bool isModified() const
Definition: vertex_set.h:127
corbo::VertexSetInterface::getBounds
void getBounds(Eigen::Ref< Eigen::VectorXd > lb, Eigen::Ref< Eigen::VectorXd > ub)
Definition: vertex_set.cpp:181
corbo::VertexSetInterface::getParameterValue
double getParameterValue(int idx)
Definition: vertex_set.cpp:60
vertex_interface.h
corbo::VertexSetInterface::getUpperBound
double getUpperBound(int idx)
Definition: vertex_set.cpp:274
corbo::VertexSetInterface::getParameterDimension
int getParameterDimension()
Definition: vertex_set.cpp:51
corbo::VertexSetInterface::applyIncrementNonFixed
void applyIncrementNonFixed(const Eigen::Ref< const Eigen::VectorXd > &increment)
Active vertices related methods.
Definition: vertex_set.cpp:379
corbo::VertexSet::getVertices
const std::vector< VertexInterface::Ptr > & getVertices()
Definition: vertex_set.h:145
corbo::VertexSet::VertexSet
VertexSet()=default
corbo::VertexSetInterface::setModified
void setModified(bool modified)
Definition: vertex_set.h:126
corbo::VertexSetInterface::clear
virtual void clear()=0
corbo::VertexSetInterface
Abstract class representing a set of vertices.
Definition: vertex_set.h:67
corbo::VertexSetInterface::backupParametersActiveVertices
void backupParametersActiveVertices()
Definition: vertex_set.cpp:453


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:07:15