35 : _level(level), _optimizer(optimizer) {}
40 std::set<OptimizableGraph::Vertex*> vset;
44 for (
size_t i = 0; i < e->
vertices().size(); i++) {
50 for (std::set<OptimizableGraph::Vertex*>::iterator it = vset.begin();
51 it != vset.end(); ++it) {
58 for (HyperGraph::VertexSet::iterator it =
_gauge.begin(); it !=
_gauge.end();
76 cerr <<
"!!! optimization failure" << endl;
79 for (HyperGraph::VertexSet::iterator it =
_gauge.begin();
80 it !=
_gauge.end(); ++it) {
97 cerr <<
"FATAL: failure while building linear structure" << endl;
104 std::set<OptimizableGraph::Edge*> star;
105 for (HyperGraph::EdgeSet::iterator it =
_starEdges.begin();
111 if (result < 0) ok =
false;
114 for (std::set<OptimizableGraph::Vertex*>::iterator it = vset.begin();
115 it != vset.end(); ++it) {
119 for (HyperGraph::VertexSet::iterator it =
_gauge.begin(); it !=
_gauge.end();
const VertexContainer & vertices() const
int id() const
returns the id
A general case Vertex for optimization.
virtual void push()=0
backup the position of the vertex to a stack
void setFixed(bool fixed)
true => this node should be considered fixed during the optimization
Base for solvers operating on the approximated Hessian, e.g., Gauss-Newton, Levenberg.
virtual void updateLinearSystem()
virtual bool buildLinearStructure()
virtual bool init(bool online=false)=0
void computeActiveErrors()
int optimize(int iterations, bool online=false)
virtual bool initializeOptimization(HyperGraph::EdgeSet &eset)
virtual void computeInitialGuess()
const VertexContainer & indexMapping() const
the index mapping of the vertices
const VertexContainer & activeVertices() const
the vertices active in the current optimization
OptimizationAlgorithm * solver()
int labelEdges(std::set< OptimizableGraph::Edge * > &edges)
bool labelStarEdges(int iterations, EdgeLabeler *labeler)
SparseOptimizer * optimizer()
returns the optimizer
SparseOptimizer * _optimizer
optimizer
HyperGraph::VertexSet _gauge
vertices that are fixed (center of the star)
HyperGraph::EdgeSet _starEdges
edges in the star
Star(int level, SparseOptimizer *optimizer)
HyperGraph::EdgeSet _lowLevelEdges
edges in the lower level