28#include <boost/assign/list_inserter.hpp>
42 COLAMD, METIS, NATURAL, CUSTOM
56 template<
typename KEYS>
58 Base(keys.begin(), keys.end()) {
63 boost::assign::list_inserter<boost::assign_detail::call_push_back<This> >
operator+=(
65 return boost::assign::make_list_inserter(
66 boost::assign_detail::call_push_back<This>(*
this))(key);
94 template<
class FACTOR_GRAPH>
113 template<
class FACTOR_GRAPH>
115 const KeyVector& constrainLast,
bool forceOrder =
false) {
130 bool forceOrder =
false);
140 template<
class FACTOR_GRAPH>
142 const KeyVector& constrainFirst,
bool forceOrder =
false) {
158 const KeyVector& constrainFirst,
bool forceOrder =
false);
169 template<
class FACTOR_GRAPH>
189 template<
class FACTOR_GRAPH>
193 std::stable_sort(keys.begin(), keys.end());
194 return Ordering(keys.begin(), keys.end());
198 template<
class FACTOR_GRAPH>
199 static GTSAM_EXPORT
void CSRFormat(std::vector<int>& xadj,
200 std::vector<int>& adj,
const FACTOR_GRAPH& graph);
205 template<
class FACTOR_GRAPH>
218 template<
class FACTOR_GRAPH>
220 const FACTOR_GRAPH& graph) {
224 switch (orderingType) {
232 throw std::runtime_error(
233 "Ordering::Create error: called with CUSTOM ordering type.");
235 throw std::runtime_error(
236 "Ordering::Create error: called with unknown ordering type.");
246 void print(
const std::string& str =
"",
const KeyFormatter& keyFormatter =
247 DefaultKeyFormatter)
const;
250 bool equals(
const Ordering& other,
double tol = 1e-9)
const;
257 const VariableIndex& variableIndex, std::vector<int>& cmember);
261 template<
class ARCHIVE>
262 void serialize(ARCHIVE & ar,
const unsigned int version) {
263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
A thin wrapper around std::set that uses boost's fast_pool_allocator.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:100
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:151
The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS a...
Definition: MetisIndex.h:45
Definition: Ordering.h:34
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
Definition: Ordering.h:190
static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap< Key, int > &groups)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition: Ordering.h:170
Ordering(const KEYS &keys)
Create from a container.
Definition: Ordering.h:57
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition: Ordering.h:95
OrderingType
Type of ordering to use.
Definition: Ordering.h:41
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition: Ordering.h:114
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: Ordering.h:46
boost::assign::list_inserter< boost::assign_detail::call_push_back< This > > operator+=(Key key)
Add new variables to the ordering as ordering += key1, key2, ... Equivalent to calling push_back.
Definition: Ordering.h:63
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition: Ordering.h:141
GTSAM_EXPORT Ordering()
Create an empty ordering.
Definition: Ordering.h:50
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
Definition: Ordering.cpp:212
FastMap< Key, size_t > invert() const
Invert (not reverse) the ordering - returns a map from key to order position.
Definition: Ordering.cpp:36
friend class boost::serialization::access
Serialization function.
Definition: Ordering.h:260
Ordering This
Typedef to this class.
Definition: Ordering.h:45
bool contains(const Key &key) const
Check if key exists in ordering.
Definition: Ordering.cpp:293
static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int > &adj, const FACTOR_GRAPH &graph)
METIS Formatting function.
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition: VariableIndex.h:43