g2o
Toggle main menu visibility
Loading...
Searching...
No Matches
g2o
core
hyper_dijkstra.h
Go to the documentation of this file.
1
// g2o - General Graph Optimization
2
// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
// * Redistributions of source code must retain the above copyright notice,
10
// this list of conditions and the following disclaimer.
11
// * Redistributions in binary form must reproduce the above copyright
12
// notice, this list of conditions and the following disclaimer in the
13
// documentation and/or other materials provided with the distribution.
14
//
15
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27
#ifndef G2O_AIS_GENERAL_DIJKSTRA_HH
28
#define G2O_AIS_GENERAL_DIJKSTRA_HH
29
30
#include <limits>
31
#include <map>
32
#include <set>
33
34
#include "
hyper_graph.h
"
35
36
namespace
g2o
{
37
38
struct
G2O_CORE_API
HyperDijkstra
{
39
struct
G2O_CORE_API
CostFunction
{
40
virtual
double
operator()
(
HyperGraph::Edge
* e,
HyperGraph::Vertex
* from,
41
HyperGraph::Vertex
* to) = 0;
42
virtual
~CostFunction
() {}
43
};
44
45
struct
G2O_CORE_API
TreeAction
{
46
virtual
double
perform
(
HyperGraph::Vertex
* v,
HyperGraph::Vertex
* vParent,
47
HyperGraph::Edge
* e);
48
virtual
double
perform
(
HyperGraph::Vertex
* v,
HyperGraph::Vertex
* vParent,
49
HyperGraph::Edge
* e,
double
distance);
50
};
51
52
struct
G2O_CORE_API
AdjacencyMapEntry
{
53
friend
struct
HyperDijkstra
;
54
AdjacencyMapEntry
(
HyperGraph::Vertex
*
_child
= 0,
55
HyperGraph::Vertex
*
_parent
= 0,
56
HyperGraph::Edge
*
_edge
= 0,
57
double
_distance
= std::numeric_limits<double>::max());
58
HyperGraph::Vertex
*
child
()
const
{
return
_child
; }
59
HyperGraph::Vertex
*
parent
()
const
{
return
_parent
; }
60
HyperGraph::Edge
*
edge
()
const
{
return
_edge
; }
61
double
distance
()
const
{
return
_distance
; }
62
HyperGraph::VertexSet
&
children
() {
return
_children
; }
63
const
HyperGraph::VertexSet
&
children
()
const
{
return
_children
; }
64
65
protected
:
66
HyperGraph::Vertex
*
_child
;
67
HyperGraph::Vertex
*
_parent
;
68
HyperGraph::Edge
*
_edge
;
69
double
_distance
;
70
HyperGraph::VertexSet
_children
;
71
};
72
73
typedef
std::map<HyperGraph::Vertex*, AdjacencyMapEntry>
AdjacencyMap
;
74
HyperDijkstra
(
HyperGraph
* g);
75
HyperGraph::VertexSet
&
visited
() {
return
_visited
; }
76
AdjacencyMap
&
adjacencyMap
() {
return
_adjacencyMap
; }
77
HyperGraph
*
graph
() {
return
_graph
; }
78
79
void
shortestPaths(
HyperGraph::Vertex
* v,
HyperDijkstra::CostFunction
* cost,
80
double
maxDistance = std::numeric_limits<double>::max(),
81
double
comparisonConditioner = 1e-3,
bool
directed =
false
,
82
double
maxEdgeCost = std::numeric_limits<double>::max());
83
84
void
shortestPaths(
HyperGraph::VertexSet
& vset,
85
HyperDijkstra::CostFunction
* cost,
86
double
maxDistance = std::numeric_limits<double>::max(),
87
double
comparisonConditioner = 1e-3,
bool
directed =
false
,
88
double
maxEdgeCost = std::numeric_limits<double>::max());
89
90
static
void
computeTree(AdjacencyMap& amap);
91
static
void
visitAdjacencyMap(AdjacencyMap& amap, TreeAction* action,
92
bool
useDistance =
false
);
93
94
protected
:
95
void
reset();
96
97
AdjacencyMap
_adjacencyMap
;
98
HyperGraph::VertexSet
_visited
;
99
HyperGraph
*
_graph
;
100
};
101
102
struct
G2O_CORE_API
UniformCostFunction
:
public
HyperDijkstra::CostFunction
{
103
virtual
double
operator()
(
HyperGraph::Edge
* edge,
HyperGraph::Vertex
* from,
104
HyperGraph::Vertex
* to);
105
};
106
107
}
// namespace g2o
108
#endif
g2o::HyperGraph::Edge
Definition
hyper_graph.h:172
g2o::HyperGraph::Vertex
abstract Vertex, your types must derive from that one
Definition
hyper_graph.h:148
g2o::HyperGraph
Definition
hyper_graph.h:53
g2o::HyperGraph::VertexSet
std::set< Vertex * > VertexSet
Definition
hyper_graph.h:142
G2O_CORE_API
#define G2O_CORE_API
Definition
g2o_core_api.h:29
hyper_graph.h
g2o
Definition
dl_wrapper.cpp:55
g2o::HyperDijkstra::AdjacencyMapEntry::AdjacencyMapEntry
AdjacencyMapEntry(HyperGraph::Vertex *_child=0, HyperGraph::Vertex *_parent=0, HyperGraph::Edge *_edge=0, double _distance=std::numeric_limits< double >::max())
Definition
hyper_dijkstra.cpp:59
g2o::HyperDijkstra::AdjacencyMapEntry::edge
HyperGraph::Edge * edge() const
Definition
hyper_dijkstra.h:60
g2o::HyperDijkstra::AdjacencyMapEntry::_parent
HyperGraph::Vertex * _parent
Definition
hyper_dijkstra.h:67
g2o::HyperDijkstra::AdjacencyMapEntry::children
const HyperGraph::VertexSet & children() const
Definition
hyper_dijkstra.h:63
g2o::HyperDijkstra::AdjacencyMapEntry::HyperDijkstra
friend struct HyperDijkstra
Definition
hyper_dijkstra.h:53
g2o::HyperDijkstra::AdjacencyMapEntry::children
HyperGraph::VertexSet & children()
Definition
hyper_dijkstra.h:62
g2o::HyperDijkstra::AdjacencyMapEntry::_children
HyperGraph::VertexSet _children
Definition
hyper_dijkstra.h:70
g2o::HyperDijkstra::AdjacencyMapEntry::_child
HyperGraph::Vertex * _child
Definition
hyper_dijkstra.h:66
g2o::HyperDijkstra::AdjacencyMapEntry::_distance
double _distance
Definition
hyper_dijkstra.h:69
g2o::HyperDijkstra::AdjacencyMapEntry::child
HyperGraph::Vertex * child() const
Definition
hyper_dijkstra.h:58
g2o::HyperDijkstra::AdjacencyMapEntry::distance
double distance() const
Definition
hyper_dijkstra.h:61
g2o::HyperDijkstra::AdjacencyMapEntry::parent
HyperGraph::Vertex * parent() const
Definition
hyper_dijkstra.h:59
g2o::HyperDijkstra::AdjacencyMapEntry::_edge
HyperGraph::Edge * _edge
Definition
hyper_dijkstra.h:68
g2o::HyperDijkstra::CostFunction
Definition
hyper_dijkstra.h:39
g2o::HyperDijkstra::CostFunction::operator()
virtual double operator()(HyperGraph::Edge *e, HyperGraph::Vertex *from, HyperGraph::Vertex *to)=0
g2o::HyperDijkstra::CostFunction::~CostFunction
virtual ~CostFunction()
Definition
hyper_dijkstra.h:42
g2o::HyperDijkstra::TreeAction
Definition
hyper_dijkstra.h:45
g2o::HyperDijkstra::TreeAction::perform
virtual double perform(HyperGraph::Vertex *v, HyperGraph::Vertex *vParent, HyperGraph::Edge *e)
Definition
hyper_dijkstra.cpp:42
g2o::HyperDijkstra::_graph
HyperGraph * _graph
Definition
hyper_dijkstra.h:99
g2o::HyperDijkstra::HyperDijkstra
HyperDijkstra(HyperGraph *g)
Definition
hyper_dijkstra.cpp:65
g2o::HyperDijkstra::graph
HyperGraph * graph()
Definition
hyper_dijkstra.h:77
g2o::HyperDijkstra::visited
HyperGraph::VertexSet & visited()
Definition
hyper_dijkstra.h:75
g2o::HyperDijkstra::_visited
HyperGraph::VertexSet _visited
Definition
hyper_dijkstra.h:98
g2o::HyperDijkstra::_adjacencyMap
AdjacencyMap _adjacencyMap
Definition
hyper_dijkstra.h:97
g2o::HyperDijkstra::adjacencyMap
AdjacencyMap & adjacencyMap()
Definition
hyper_dijkstra.h:76
g2o::HyperDijkstra::AdjacencyMap
std::map< HyperGraph::Vertex *, AdjacencyMapEntry > AdjacencyMap
Definition
hyper_dijkstra.h:73
g2o::UniformCostFunction
Definition
hyper_dijkstra.h:102
g2o::UniformCostFunction::operator()
virtual double operator()(HyperGraph::Edge *edge, HyperGraph::Vertex *from, HyperGraph::Vertex *to)
Definition
hyper_dijkstra.cpp:232
Generated on
for g2o by
1.17.0